Skip to content

Commit c78aeab

Browse files
authored
[X86] Add a EVEX256 macro to match with GCC and MSVC (#71317)
1 parent a4eadd7 commit c78aeab

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed

clang/lib/Basic/Targets/X86.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -797,8 +797,10 @@ void X86TargetInfo::getTargetDefines(const LangOptions &Opts,
797797
Builder.defineMacro("__AVX512BITALG__");
798798
if (HasAVX512BW)
799799
Builder.defineMacro("__AVX512BW__");
800-
if (HasAVX512VL)
800+
if (HasAVX512VL) {
801801
Builder.defineMacro("__AVX512VL__");
802+
Builder.defineMacro("__EVEX256__");
803+
}
802804
if (HasAVX512VBMI)
803805
Builder.defineMacro("__AVX512VBMI__");
804806
if (HasAVX512VBMI2)

clang/test/Preprocessor/predefined-arch-macros.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -799,6 +799,7 @@
799799
// CHECK_KNL_M32: #define __AVX__ 1
800800
// CHECK_KNL_M32: #define __BMI2__ 1
801801
// CHECK_KNL_M32: #define __BMI__ 1
802+
// CHECK_KNL_M32-NOT: #define __EVEX256__ 1
802803
// CHECK_KNL_M32: #define __EVEX512__ 1
803804
// CHECK_KNL_M32: #define __F16C__ 1
804805
// CHECK_KNL_M32: #define __FMA__ 1
@@ -837,6 +838,7 @@
837838
// CHECK_KNL_M64: #define __AVX__ 1
838839
// CHECK_KNL_M64: #define __BMI2__ 1
839840
// CHECK_KNL_M64: #define __BMI__ 1
841+
// CHECK_KNL_M64-NOT: #define __EVEX256__ 1
840842
// CHECK_KNL_M64: #define __EVEX512__ 1
841843
// CHECK_KNL_M64: #define __F16C__ 1
842844
// CHECK_KNL_M64: #define __FMA__ 1
@@ -879,6 +881,7 @@
879881
// CHECK_KNM_M32: #define __AVX__ 1
880882
// CHECK_KNM_M32: #define __BMI2__ 1
881883
// CHECK_KNM_M32: #define __BMI__ 1
884+
// CHECK_KNM_M32-NOT: #define __EVEX256__ 1
882885
// CHECK_KNM_M32: #define __EVEX512__ 1
883886
// CHECK_KNM_M32: #define __F16C__ 1
884887
// CHECK_KNM_M32: #define __FMA__ 1
@@ -915,6 +918,7 @@
915918
// CHECK_KNM_M64: #define __AVX__ 1
916919
// CHECK_KNM_M64: #define __BMI2__ 1
917920
// CHECK_KNM_M64: #define __BMI__ 1
921+
// CHECK_KNM_M64-NOT: #define __EVEX256__ 1
918922
// CHECK_KNM_M64: #define __EVEX512__ 1
919923
// CHECK_KNM_M64: #define __F16C__ 1
920924
// CHECK_KNM_M64: #define __FMA__ 1
@@ -956,6 +960,7 @@
956960
// CHECK_SKX_M32: #define __BMI__ 1
957961
// CHECK_SKX_M32: #define __CLFLUSHOPT__ 1
958962
// CHECK_SKX_M32: #define __CLWB__ 1
963+
// CHECK_SKX_M32: #define __EVEX256__ 1
959964
// CHECK_SKX_M32: #define __EVEX512__ 1
960965
// CHECK_SKX_M32: #define __F16C__ 1
961966
// CHECK_SKX_M32: #define __FMA__ 1
@@ -1002,6 +1007,7 @@
10021007
// CHECK_SKX_M64: #define __BMI__ 1
10031008
// CHECK_SKX_M64: #define __CLFLUSHOPT__ 1
10041009
// CHECK_SKX_M64: #define __CLWB__ 1
1010+
// CHECK_SKX_M64: #define __EVEX256__ 1
10051011
// CHECK_SKX_M64: #define __EVEX512__ 1
10061012
// CHECK_SKX_M64: #define __F16C__ 1
10071013
// CHECK_SKX_M64: #define __FMA__ 1
@@ -1052,6 +1058,7 @@
10521058
// CHECK_CLX_M32: #define __BMI__ 1
10531059
// CHECK_CLX_M32: #define __CLFLUSHOPT__ 1
10541060
// CHECK_CLX_M32: #define __CLWB__ 1
1061+
// CHECK_CLX_M32: #define __EVEX256__ 1
10551062
// CHECK_CLX_M32: #define __EVEX512__ 1
10561063
// CHECK_CLX_M32: #define __F16C__ 1
10571064
// CHECK_CLX_M32: #define __FMA__ 1
@@ -1099,6 +1106,7 @@
10991106
// CHECK_CLX_M64: #define __BMI__ 1
11001107
// CHECK_CLX_M64: #define __CLFLUSHOPT__ 1
11011108
// CHECK_CLX_M64: #define __CLWB__ 1
1109+
// CHECK_CLX_M64: #define __EVEX256__ 1
11021110
// CHECK_CLX_M64: #define __EVEX512__ 1
11031111
// CHECK_CLX_M64: #define __F16C__ 1
11041112
// CHECK_CLX_M64: #define __FMA__ 1
@@ -1150,6 +1158,7 @@
11501158
// CHECK_CPX_M32: #define __BMI__ 1
11511159
// CHECK_CPX_M32: #define __CLFLUSHOPT__ 1
11521160
// CHECK_CPX_M32: #define __CLWB__ 1
1161+
// CHECK_CPX_M32: #define __EVEX256__ 1
11531162
// CHECK_CPX_M32: #define __EVEX512__ 1
11541163
// CHECK_CPX_M32: #define __F16C__ 1
11551164
// CHECK_CPX_M32: #define __FMA__ 1
@@ -1198,6 +1207,7 @@
11981207
// CHECK_CPX_M64: #define __BMI__ 1
11991208
// CHECK_CPX_M64: #define __CLFLUSHOPT__ 1
12001209
// CHECK_CPX_M64: #define __CLWB__ 1
1210+
// CHECK_CPX_M64: #define __EVEX256__ 1
12011211
// CHECK_CPX_M64: #define __EVEX512__ 1
12021212
// CHECK_CPX_M64: #define __F16C__ 1
12031213
// CHECK_CPX_M64: #define __FMA__ 1
@@ -1249,6 +1259,7 @@
12491259
// CHECK_CNL_M32: #define __BMI__ 1
12501260
// CHECK_CNL_M32: #define __CLFLUSHOPT__ 1
12511261
// CHECK_CNL_M32-NOT: #define __CLWB__ 1
1262+
// CHECK_CNL_M32: #define __EVEX256__ 1
12521263
// CHECK_CNL_M32: #define __EVEX512__ 1
12531264
// CHECK_CNL_M32: #define __F16C__ 1
12541265
// CHECK_CNL_M32: #define __FMA__ 1
@@ -1298,6 +1309,7 @@
12981309
// CHECK_CNL_M64: #define __BMI__ 1
12991310
// CHECK_CNL_M64: #define __CLFLUSHOPT__ 1
13001311
// CHECK_CNL_M64-NOT: #define __CLWB__ 1
1312+
// CHECK_CNL_M64: #define __EVEX256__ 1
13011313
// CHECK_CNL_M64: #define __EVEX512__ 1
13021314
// CHECK_CNL_M64: #define __F16C__ 1
13031315
// CHECK_CNL_M64: #define __FMA__ 1
@@ -1355,6 +1367,7 @@
13551367
// CHECK_ICL_M32: #define __BMI__ 1
13561368
// CHECK_ICL_M32: #define __CLFLUSHOPT__ 1
13571369
// CHECK_ICL_M32-NOT: #define __CLWB__ 1
1370+
// CHECK_ICL_M32: #define __EVEX256__ 1
13581371
// CHECK_ICL_M32: #define __EVEX512__ 1
13591372
// CHECK_ICL_M32: #define __F16C__ 1
13601373
// CHECK_ICL_M32: #define __FMA__ 1
@@ -1417,6 +1430,7 @@
14171430
// CHECK_ICL_M64: #define __BMI__ 1
14181431
// CHECK_ICL_M64: #define __CLFLUSHOPT__ 1
14191432
// CHECK_ICL_M64-NOT: #define __CLWB__ 1
1433+
// CHECK_ICL_M64: #define __EVEX256__ 1
14201434
// CHECK_ICL_M64: #define __EVEX512__ 1
14211435
// CHECK_ICL_M64: #define __F16C__ 1
14221436
// CHECK_ICL_M64: #define __FMA__ 1
@@ -1477,6 +1491,7 @@
14771491
// CHECK_ICX_M32: #define __BMI__ 1
14781492
// CHECK_ICX_M32: #define __CLFLUSHOPT__ 1
14791493
// CHECK_ICX_M32: #define __CLWB__ 1
1494+
// CHECK_ICX_M32: #define __EVEX256__ 1
14801495
// CHECK_ICX_M32: #define __EVEX512__ 1
14811496
// CHECK_ICX_M32: #define __F16C__ 1
14821497
// CHECK_ICX_M32: #define __FMA__ 1
@@ -1536,6 +1551,7 @@
15361551
// CHECK_ICX_M64: #define __BMI__ 1
15371552
// CHECK_ICX_M64: #define __CLFLUSHOPT__ 1
15381553
// CHECK_ICX_M64: #define __CLWB__ 1
1554+
// CHECK_ICX_M64: #define __EVEX256__ 1
15391555
// CHECK_ICX_M64: #define __EVEX512__ 1
15401556
// CHECK_ICX_M64: #define __F16C__ 1
15411557
// CHECK_ICX_M64: #define __FMA__ 1
@@ -1597,6 +1613,7 @@
15971613
// CHECK_TGL_M32: #define __BMI__ 1
15981614
// CHECK_TGL_M32: #define __CLFLUSHOPT__ 1
15991615
// CHECK_TGL_M32: #define __CLWB__ 1
1616+
// CHECK_TGL_M32: #define __EVEX256__ 1
16001617
// CHECK_TGL_M32: #define __EVEX512__ 1
16011618
// CHECK_TGL_M32: #define __F16C__ 1
16021619
// CHECK_TGL_M32: #define __FMA__ 1
@@ -1660,6 +1677,7 @@
16601677
// CHECK_TGL_M64: #define __BMI__ 1
16611678
// CHECK_TGL_M64: #define __CLFLUSHOPT__ 1
16621679
// CHECK_TGL_M64: #define __CLWB__ 1
1680+
// CHECK_TGL_M64: #define __EVEX256__ 1
16631681
// CHECK_TGL_M64: #define __EVEX512__ 1
16641682
// CHECK_TGL_M64: #define __F16C__ 1
16651683
// CHECK_TGL_M64: #define __FMA__ 1
@@ -1734,6 +1752,7 @@
17341752
// CHECK_SPR_M32: #define __CLFLUSHOPT__ 1
17351753
// CHECK_SPR_M32: #define __CLWB__ 1
17361754
// CHECK_SPR_M32: #define __ENQCMD__ 1
1755+
// CHECK_SPR_M32: #define __EVEX256__ 1
17371756
// CHECK_SPR_M32: #define __EVEX512__ 1
17381757
// CHECK_SPR_M32: #define __F16C__ 1
17391758
// CHECK_SPR_M32: #define __FMA__ 1
@@ -1810,6 +1829,7 @@
18101829
// CHECK_SPR_M64: #define __CLFLUSHOPT__ 1
18111830
// CHECK_SPR_M64: #define __CLWB__ 1
18121831
// CHECK_SPR_M64: #define __ENQCMD__ 1
1832+
// CHECK_SPR_M64: #define __EVEX256__ 1
18131833
// CHECK_SPR_M64: #define __EVEX512__ 1
18141834
// CHECK_SPR_M64: #define __F16C__ 1
18151835
// CHECK_SPR_M64: #define __FMA__ 1
@@ -1890,6 +1910,7 @@
18901910
// CHECK_GNR_M32: #define __CLFLUSHOPT__ 1
18911911
// CHECK_GNR_M32: #define __CLWB__ 1
18921912
// CHECK_GNR_M32: #define __ENQCMD__ 1
1913+
// CHECK_GNR_M32: #define __EVEX256__ 1
18931914
// CHECK_GNR_M32: #define __EVEX512__ 1
18941915
// CHECK_GNR_M32: #define __F16C__ 1
18951916
// CHECK_GNR_M32: #define __FMA__ 1
@@ -1970,6 +1991,7 @@
19701991
// CHECK_GNR_M64: #define __CLFLUSHOPT__ 1
19711992
// CHECK_GNR_M64: #define __CLWB__ 1
19721993
// CHECK_GNR_M64: #define __ENQCMD__ 1
1994+
// CHECK_GNR_M64: #define __EVEX256__ 1
19731995
// CHECK_GNR_M64: #define __EVEX512__ 1
19741996
// CHECK_GNR_M64: #define __F16C__ 1
19751997
// CHECK_GNR_M64: #define __FMA__ 1
@@ -3893,6 +3915,7 @@
38933915
// CHECK_ZNVER4_M32: #define __CLFLUSHOPT__ 1
38943916
// CHECK_ZNVER4_M32: #define __CLWB__ 1
38953917
// CHECK_ZNVER4_M32: #define __CLZERO__ 1
3918+
// CHECK_ZNVER4_M32: #define __EVEX256__ 1
38963919
// CHECK_ZNVER4_M32: #define __EVEX512__ 1
38973920
// CHECK_ZNVER4_M32: #define __F16C__ 1
38983921
// CHECK_ZNVER4_M32-NOT: #define __FMA4__ 1
@@ -3958,6 +3981,7 @@
39583981
// CHECK_ZNVER4_M64: #define __CLFLUSHOPT__ 1
39593982
// CHECK_ZNVER4_M64: #define __CLWB__ 1
39603983
// CHECK_ZNVER4_M64: #define __CLZERO__ 1
3984+
// CHECK_ZNVER4_M64: #define __EVEX256__ 1
39613985
// CHECK_ZNVER4_M64: #define __EVEX512__ 1
39623986
// CHECK_ZNVER4_M64: #define __F16C__ 1
39633987
// CHECK_ZNVER4_M64-NOT: #define __FMA4__ 1

clang/test/Preprocessor/x86_target_features.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@
160160
// AVX512VL: #define __AVX512F__ 1
161161
// AVX512VL: #define __AVX512VL__ 1
162162
// AVX512VL: #define __AVX__ 1
163+
// AVX512VL: #define __EVEX256__ 1
163164
// AVX512VL: #define __EVEX512__ 1
164165
// AVX512VL: #define __SSE2_MATH__ 1
165166
// AVX512VL: #define __SSE2__ 1
@@ -492,6 +493,7 @@
492493
// 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
493494

494495
// AVX512BF16_NOAVX512VL: #define __AVX512BF16__ 1
496+
// AVX512BF16_NOAVX512VL-NOT: #define __EVEX256__ 1
495497
// AVX512BF16_NOAVX512VL: #define __EVEX512__ 1
496498

497499
// 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 @@
504506
// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mavx512vp2intersect -mno-avx512f -x c -E -dM -o - %s | FileCheck -check-prefix=NOVP2INTERSECT %s
505507

506508
// NOVP2INTERSECT-NOT: #define __AVX512VP2INTERSECT__ 1
509+
// NOVP2INTERSECT-NOT: #define __EVEX256__ 1
507510
// NOVP2INTERSECT-NOT: #define __EVEX512__ 1
508511

509512

@@ -611,36 +614,42 @@
611614
// AVX512FP16: #define __AVX512DQ__ 1
612615
// AVX512FP16: #define __AVX512FP16__ 1
613616
// AVX512FP16: #define __AVX512VL__ 1
617+
// AVX512FP16: #define __EVEX256__ 1
614618
// AVX512FP16: #define __EVEX512__ 1
615619

616620
// 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
617621

618622
// AVX512FP16NOAVX512VL-NOT: #define __AVX512FP16__ 1
619623
// AVX512FP16NOAVX512VL-NOT: #define __AVX512VL__ 1
624+
// AVX512FP16NOAVX512VL-NOT: #define __EVEX256__ 1
620625
// AVX512FP16NOAVX512VL: #define __EVEX512__ 1
621626

622627
// 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
623628

624629
// AVX512FP16NOAVX512BW-NOT: #define __AVX512BW__ 1
625630
// AVX512FP16NOAVX512BW-NOT: #define __AVX512FP16__ 1
631+
// AVX512FP16NOAVX512BW: #define __EVEX256__ 1
626632
// AVX512FP16NOAVX512BW: #define __EVEX512__ 1
627633

628634
// 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
629635

630636
// AVX512FP16NOAVX512DQ-NOT: #define __AVX512DQ__ 1
631637
// AVX512FP16NOAVX512DQ-NOT: #define __AVX512FP16__ 1
638+
// AVX512FP16NOAVX512DQ: #define __EVEX256__ 1
632639
// AVX512FP16NOAVX512DQ: #define __EVEX512__ 1
633640

634641
// 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
635642
// 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
636643
// 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
637644
// NOEVEX512-NOT: #define __AVX512F__ 1
645+
// NOEVEX512-NOT: #define __EVEX256__ 1
638646
// NOEVEX512-NOT: #define __EVEX512__ 1
639647

640648
// 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
641649
// 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
642650
// 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
643651
// AVX512NOEVEX512: #define __AVX512F__ 1
652+
// AVX512NOEVEX512-NOT: #define __EVEX256__ 1
644653
// AVX512NOEVEX512-NOT: #define __EVEX512__ 1
645654

646655
// RUN: %clang -target x86_64-unknown-linux-gnu -march=atom -mcmpccxadd -x c -E -dM -o - %s | FileCheck -check-prefix=CMPCCXADD %s
@@ -755,13 +764,15 @@
755764
// 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
756765
// AVX10_1_256: #define __AVX10_1__ 1
757766
// AVX10_1_256: #define __AVX512F__ 1
767+
// AVX10_1_256: #define __EVEX256__ 1
758768
// AVX10_1_256-NOT: __EVEX512__
759769

760770
// 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
761771
// RUN: %clang -target i686-unknown-linux-gnu -march=atom -mavx10.1-512 -mno-avx512f -x c -E -dM -o - %s | FileCheck -check-prefix=AVX10_1_512 %s
762772
// 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
763773
// AVX10_1_512: #define __AVX10_1__ 1
764774
// AVX10_1_512: #define __AVX512F__ 1
775+
// AVX10_1_512: #define __EVEX256__ 1
765776
// AVX10_1_512: #define __EVEX512__ 1
766777

767778
// RUN: %clang -target i686-unknown-linux-gnu -march=atom -musermsr -x c -E -dM -o - %s | FileCheck -check-prefix=USERMSR %s

0 commit comments

Comments
 (0)