diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp index eec3cd558435e..6703e51df5eaa 100644 --- a/clang/lib/Basic/Targets/X86.cpp +++ b/clang/lib/Basic/Targets/X86.cpp @@ -797,8 +797,10 @@ void X86TargetInfo::getTargetDefines(const LangOptions &Opts, Builder.defineMacro("__AVX512BITALG__"); if (HasAVX512BW) Builder.defineMacro("__AVX512BW__"); - if (HasAVX512VL) + if (HasAVX512VL) { Builder.defineMacro("__AVX512VL__"); + Builder.defineMacro("__EVEX256__"); + } if (HasAVX512VBMI) Builder.defineMacro("__AVX512VBMI__"); if (HasAVX512VBMI2) diff --git a/clang/test/Preprocessor/predefined-arch-macros.c b/clang/test/Preprocessor/predefined-arch-macros.c index f10793983b5e7..1ae6faea77678 100644 --- a/clang/test/Preprocessor/predefined-arch-macros.c +++ b/clang/test/Preprocessor/predefined-arch-macros.c @@ -799,6 +799,7 @@ // CHECK_KNL_M32: #define __AVX__ 1 // CHECK_KNL_M32: #define __BMI2__ 1 // CHECK_KNL_M32: #define __BMI__ 1 +// CHECK_KNL_M32-NOT: #define __EVEX256__ 1 // CHECK_KNL_M32: #define __EVEX512__ 1 // CHECK_KNL_M32: #define __F16C__ 1 // CHECK_KNL_M32: #define __FMA__ 1 @@ -837,6 +838,7 @@ // CHECK_KNL_M64: #define __AVX__ 1 // CHECK_KNL_M64: #define __BMI2__ 1 // CHECK_KNL_M64: #define __BMI__ 1 +// CHECK_KNL_M64-NOT: #define __EVEX256__ 1 // CHECK_KNL_M64: #define __EVEX512__ 1 // CHECK_KNL_M64: #define __F16C__ 1 // CHECK_KNL_M64: #define __FMA__ 1 @@ -879,6 +881,7 @@ // CHECK_KNM_M32: #define __AVX__ 1 // CHECK_KNM_M32: #define __BMI2__ 1 // CHECK_KNM_M32: #define __BMI__ 1 +// CHECK_KNM_M32-NOT: #define __EVEX256__ 1 // CHECK_KNM_M32: #define __EVEX512__ 1 // CHECK_KNM_M32: #define __F16C__ 1 // CHECK_KNM_M32: #define __FMA__ 1 @@ -915,6 +918,7 @@ // CHECK_KNM_M64: #define __AVX__ 1 // CHECK_KNM_M64: #define __BMI2__ 1 // CHECK_KNM_M64: #define __BMI__ 1 +// CHECK_KNM_M64-NOT: #define __EVEX256__ 1 // CHECK_KNM_M64: #define __EVEX512__ 1 // CHECK_KNM_M64: #define __F16C__ 1 // CHECK_KNM_M64: #define __FMA__ 1 @@ -956,6 +960,7 @@ // CHECK_SKX_M32: #define __BMI__ 1 // CHECK_SKX_M32: #define __CLFLUSHOPT__ 1 // CHECK_SKX_M32: #define __CLWB__ 1 +// CHECK_SKX_M32: #define __EVEX256__ 1 // CHECK_SKX_M32: #define __EVEX512__ 1 // CHECK_SKX_M32: #define __F16C__ 1 // CHECK_SKX_M32: #define __FMA__ 1 @@ -1002,6 +1007,7 @@ // CHECK_SKX_M64: #define __BMI__ 1 // CHECK_SKX_M64: #define __CLFLUSHOPT__ 1 // CHECK_SKX_M64: #define __CLWB__ 1 +// CHECK_SKX_M64: #define __EVEX256__ 1 // CHECK_SKX_M64: #define __EVEX512__ 1 // CHECK_SKX_M64: #define __F16C__ 1 // CHECK_SKX_M64: #define __FMA__ 1 @@ -1052,6 +1058,7 @@ // CHECK_CLX_M32: #define __BMI__ 1 // CHECK_CLX_M32: #define __CLFLUSHOPT__ 1 // CHECK_CLX_M32: #define __CLWB__ 1 +// CHECK_CLX_M32: #define __EVEX256__ 1 // CHECK_CLX_M32: #define __EVEX512__ 1 // CHECK_CLX_M32: #define __F16C__ 1 // CHECK_CLX_M32: #define __FMA__ 1 @@ -1099,6 +1106,7 @@ // CHECK_CLX_M64: #define __BMI__ 1 // CHECK_CLX_M64: #define __CLFLUSHOPT__ 1 // CHECK_CLX_M64: #define __CLWB__ 1 +// CHECK_CLX_M64: #define __EVEX256__ 1 // CHECK_CLX_M64: #define __EVEX512__ 1 // CHECK_CLX_M64: #define __F16C__ 1 // CHECK_CLX_M64: #define __FMA__ 1 @@ -1150,6 +1158,7 @@ // CHECK_CPX_M32: #define __BMI__ 1 // CHECK_CPX_M32: #define __CLFLUSHOPT__ 1 // CHECK_CPX_M32: #define __CLWB__ 1 +// CHECK_CPX_M32: #define __EVEX256__ 1 // CHECK_CPX_M32: #define __EVEX512__ 1 // CHECK_CPX_M32: #define __F16C__ 1 // CHECK_CPX_M32: #define __FMA__ 1 @@ -1198,6 +1207,7 @@ // CHECK_CPX_M64: #define __BMI__ 1 // CHECK_CPX_M64: #define __CLFLUSHOPT__ 1 // CHECK_CPX_M64: #define __CLWB__ 1 +// CHECK_CPX_M64: #define __EVEX256__ 1 // CHECK_CPX_M64: #define __EVEX512__ 1 // CHECK_CPX_M64: #define __F16C__ 1 // CHECK_CPX_M64: #define __FMA__ 1 @@ -1249,6 +1259,7 @@ // CHECK_CNL_M32: #define __BMI__ 1 // CHECK_CNL_M32: #define __CLFLUSHOPT__ 1 // CHECK_CNL_M32-NOT: #define __CLWB__ 1 +// CHECK_CNL_M32: #define __EVEX256__ 1 // CHECK_CNL_M32: #define __EVEX512__ 1 // CHECK_CNL_M32: #define __F16C__ 1 // CHECK_CNL_M32: #define __FMA__ 1 @@ -1298,6 +1309,7 @@ // CHECK_CNL_M64: #define __BMI__ 1 // CHECK_CNL_M64: #define __CLFLUSHOPT__ 1 // CHECK_CNL_M64-NOT: #define __CLWB__ 1 +// CHECK_CNL_M64: #define __EVEX256__ 1 // CHECK_CNL_M64: #define __EVEX512__ 1 // CHECK_CNL_M64: #define __F16C__ 1 // CHECK_CNL_M64: #define __FMA__ 1 @@ -1355,6 +1367,7 @@ // CHECK_ICL_M32: #define __BMI__ 1 // CHECK_ICL_M32: #define __CLFLUSHOPT__ 1 // CHECK_ICL_M32-NOT: #define __CLWB__ 1 +// CHECK_ICL_M32: #define __EVEX256__ 1 // CHECK_ICL_M32: #define __EVEX512__ 1 // CHECK_ICL_M32: #define __F16C__ 1 // CHECK_ICL_M32: #define __FMA__ 1 @@ -1417,6 +1430,7 @@ // CHECK_ICL_M64: #define __BMI__ 1 // CHECK_ICL_M64: #define __CLFLUSHOPT__ 1 // CHECK_ICL_M64-NOT: #define __CLWB__ 1 +// CHECK_ICL_M64: #define __EVEX256__ 1 // CHECK_ICL_M64: #define __EVEX512__ 1 // CHECK_ICL_M64: #define __F16C__ 1 // CHECK_ICL_M64: #define __FMA__ 1 @@ -1477,6 +1491,7 @@ // CHECK_ICX_M32: #define __BMI__ 1 // CHECK_ICX_M32: #define __CLFLUSHOPT__ 1 // CHECK_ICX_M32: #define __CLWB__ 1 +// CHECK_ICX_M32: #define __EVEX256__ 1 // CHECK_ICX_M32: #define __EVEX512__ 1 // CHECK_ICX_M32: #define __F16C__ 1 // CHECK_ICX_M32: #define __FMA__ 1 @@ -1536,6 +1551,7 @@ // CHECK_ICX_M64: #define __BMI__ 1 // CHECK_ICX_M64: #define __CLFLUSHOPT__ 1 // CHECK_ICX_M64: #define __CLWB__ 1 +// CHECK_ICX_M64: #define __EVEX256__ 1 // CHECK_ICX_M64: #define __EVEX512__ 1 // CHECK_ICX_M64: #define __F16C__ 1 // CHECK_ICX_M64: #define __FMA__ 1 @@ -1597,6 +1613,7 @@ // CHECK_TGL_M32: #define __BMI__ 1 // CHECK_TGL_M32: #define __CLFLUSHOPT__ 1 // CHECK_TGL_M32: #define __CLWB__ 1 +// CHECK_TGL_M32: #define __EVEX256__ 1 // CHECK_TGL_M32: #define __EVEX512__ 1 // CHECK_TGL_M32: #define __F16C__ 1 // CHECK_TGL_M32: #define __FMA__ 1 @@ -1660,6 +1677,7 @@ // CHECK_TGL_M64: #define __BMI__ 1 // CHECK_TGL_M64: #define __CLFLUSHOPT__ 1 // CHECK_TGL_M64: #define __CLWB__ 1 +// CHECK_TGL_M64: #define __EVEX256__ 1 // CHECK_TGL_M64: #define __EVEX512__ 1 // CHECK_TGL_M64: #define __F16C__ 1 // CHECK_TGL_M64: #define __FMA__ 1 @@ -1734,6 +1752,7 @@ // CHECK_SPR_M32: #define __CLFLUSHOPT__ 1 // CHECK_SPR_M32: #define __CLWB__ 1 // CHECK_SPR_M32: #define __ENQCMD__ 1 +// CHECK_SPR_M32: #define __EVEX256__ 1 // CHECK_SPR_M32: #define __EVEX512__ 1 // CHECK_SPR_M32: #define __F16C__ 1 // CHECK_SPR_M32: #define __FMA__ 1 @@ -1810,6 +1829,7 @@ // CHECK_SPR_M64: #define __CLFLUSHOPT__ 1 // CHECK_SPR_M64: #define __CLWB__ 1 // CHECK_SPR_M64: #define __ENQCMD__ 1 +// CHECK_SPR_M64: #define __EVEX256__ 1 // CHECK_SPR_M64: #define __EVEX512__ 1 // CHECK_SPR_M64: #define __F16C__ 1 // CHECK_SPR_M64: #define __FMA__ 1 @@ -1890,6 +1910,7 @@ // CHECK_GNR_M32: #define __CLFLUSHOPT__ 1 // CHECK_GNR_M32: #define __CLWB__ 1 // CHECK_GNR_M32: #define __ENQCMD__ 1 +// CHECK_GNR_M32: #define __EVEX256__ 1 // CHECK_GNR_M32: #define __EVEX512__ 1 // CHECK_GNR_M32: #define __F16C__ 1 // CHECK_GNR_M32: #define __FMA__ 1 @@ -1970,6 +1991,7 @@ // CHECK_GNR_M64: #define __CLFLUSHOPT__ 1 // CHECK_GNR_M64: #define __CLWB__ 1 // CHECK_GNR_M64: #define __ENQCMD__ 1 +// CHECK_GNR_M64: #define __EVEX256__ 1 // CHECK_GNR_M64: #define __EVEX512__ 1 // CHECK_GNR_M64: #define __F16C__ 1 // CHECK_GNR_M64: #define __FMA__ 1 @@ -3893,6 +3915,7 @@ // CHECK_ZNVER4_M32: #define __CLFLUSHOPT__ 1 // CHECK_ZNVER4_M32: #define __CLWB__ 1 // CHECK_ZNVER4_M32: #define __CLZERO__ 1 +// CHECK_ZNVER4_M32: #define __EVEX256__ 1 // CHECK_ZNVER4_M32: #define __EVEX512__ 1 // CHECK_ZNVER4_M32: #define __F16C__ 1 // CHECK_ZNVER4_M32-NOT: #define __FMA4__ 1 @@ -3958,6 +3981,7 @@ // CHECK_ZNVER4_M64: #define __CLFLUSHOPT__ 1 // CHECK_ZNVER4_M64: #define __CLWB__ 1 // CHECK_ZNVER4_M64: #define __CLZERO__ 1 +// CHECK_ZNVER4_M64: #define __EVEX256__ 1 // CHECK_ZNVER4_M64: #define __EVEX512__ 1 // CHECK_ZNVER4_M64: #define __F16C__ 1 // CHECK_ZNVER4_M64-NOT: #define __FMA4__ 1 diff --git a/clang/test/Preprocessor/x86_target_features.c b/clang/test/Preprocessor/x86_target_features.c index 7c03ff87eefe3..14e2c71a7d735 100644 --- a/clang/test/Preprocessor/x86_target_features.c +++ b/clang/test/Preprocessor/x86_target_features.c @@ -160,6 +160,7 @@ // AVX512VL: #define __AVX512F__ 1 // AVX512VL: #define __AVX512VL__ 1 // AVX512VL: #define __AVX__ 1 +// AVX512VL: #define __EVEX256__ 1 // AVX512VL: #define __EVEX512__ 1 // AVX512VL: #define __SSE2_MATH__ 1 // AVX512VL: #define __SSE2__ 1 @@ -492,6 +493,7 @@ // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512bf16 -mno-avx512vl -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=AVX512BF16_NOAVX512VL %s // AVX512BF16_NOAVX512VL: #define __AVX512BF16__ 1 +// AVX512BF16_NOAVX512VL-NOT: #define __EVEX256__ 1 // AVX512BF16_NOAVX512VL: #define __EVEX512__ 1 // RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mavx512vp2intersect -x c -E -dM -o - %s | FileCheck -check-prefix=VP2INTERSECT %s @@ -504,6 +506,7 @@ // RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mavx512vp2intersect -mno-avx512f -x c -E -dM -o - %s | FileCheck -check-prefix=NOVP2INTERSECT %s // NOVP2INTERSECT-NOT: #define __AVX512VP2INTERSECT__ 1 +// NOVP2INTERSECT-NOT: #define __EVEX256__ 1 // NOVP2INTERSECT-NOT: #define __EVEX512__ 1 @@ -611,36 +614,42 @@ // AVX512FP16: #define __AVX512DQ__ 1 // AVX512FP16: #define __AVX512FP16__ 1 // AVX512FP16: #define __AVX512VL__ 1 +// AVX512FP16: #define __EVEX256__ 1 // AVX512FP16: #define __EVEX512__ 1 // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512fp16 -mno-avx512vl -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=AVX512FP16NOAVX512VL %s // AVX512FP16NOAVX512VL-NOT: #define __AVX512FP16__ 1 // AVX512FP16NOAVX512VL-NOT: #define __AVX512VL__ 1 +// AVX512FP16NOAVX512VL-NOT: #define __EVEX256__ 1 // AVX512FP16NOAVX512VL: #define __EVEX512__ 1 // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512fp16 -mno-avx512bw -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=AVX512FP16NOAVX512BW %s // AVX512FP16NOAVX512BW-NOT: #define __AVX512BW__ 1 // AVX512FP16NOAVX512BW-NOT: #define __AVX512FP16__ 1 +// AVX512FP16NOAVX512BW: #define __EVEX256__ 1 // AVX512FP16NOAVX512BW: #define __EVEX512__ 1 // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512fp16 -mno-avx512dq -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=AVX512FP16NOAVX512DQ %s // AVX512FP16NOAVX512DQ-NOT: #define __AVX512DQ__ 1 // AVX512FP16NOAVX512DQ-NOT: #define __AVX512FP16__ 1 +// AVX512FP16NOAVX512DQ: #define __EVEX256__ 1 // AVX512FP16NOAVX512DQ: #define __EVEX512__ 1 // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512f -mno-avx512f -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=NOEVEX512 %s // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512cd -mno-avx512f -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=NOEVEX512 %s // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512er -mno-avx512f -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=NOEVEX512 %s // NOEVEX512-NOT: #define __AVX512F__ 1 +// NOEVEX512-NOT: #define __EVEX256__ 1 // NOEVEX512-NOT: #define __EVEX512__ 1 // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512f -mno-evex512 -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=AVX512NOEVEX512 %s // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512cd -mno-evex512 -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=AVX512NOEVEX512 %s // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512er -mno-evex512 -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=AVX512NOEVEX512 %s // AVX512NOEVEX512: #define __AVX512F__ 1 +// AVX512NOEVEX512-NOT: #define __EVEX256__ 1 // AVX512NOEVEX512-NOT: #define __EVEX512__ 1 // RUN: %clang -target x86_64-unknown-linux-gnu -march=atom -mcmpccxadd -x c -E -dM -o - %s | FileCheck -check-prefix=CMPCCXADD %s @@ -755,6 +764,7 @@ // RUN: %clang -target i686-unknown-linux-gnu -march=atom -mavx10.1-256 -mno-avx512f -x c -E -dM -o - %s | FileCheck -check-prefix=AVX10_1_256 %s // AVX10_1_256: #define __AVX10_1__ 1 // AVX10_1_256: #define __AVX512F__ 1 +// AVX10_1_256: #define __EVEX256__ 1 // AVX10_1_256-NOT: __EVEX512__ // RUN: %clang -target i686-unknown-linux-gnu -march=atom -mavx10.1-512 -x c -E -dM -o - %s | FileCheck -check-prefix=AVX10_1_512 %s @@ -762,6 +772,7 @@ // RUN: %clang -target i686-unknown-linux-gnu -march=atom -mavx10.1-512 -mno-evex512 -x c -E -dM -o - %s | FileCheck -check-prefix=AVX10_1_512 %s // AVX10_1_512: #define __AVX10_1__ 1 // AVX10_1_512: #define __AVX512F__ 1 +// AVX10_1_512: #define __EVEX256__ 1 // AVX10_1_512: #define __EVEX512__ 1 // RUN: %clang -target i686-unknown-linux-gnu -march=atom -musermsr -x c -E -dM -o - %s | FileCheck -check-prefix=USERMSR %s