Skip to content

Commit cfbf0a5

Browse files
authored
1 parent f3ea731 commit cfbf0a5

File tree

16 files changed

+167
-12
lines changed

16 files changed

+167
-12
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,7 @@ X86 Support
570570
- Support ISA of ``USER_MSR``.
571571
* Support intrinsic of ``_urdmsr``.
572572
* Support intrinsic of ``_uwrmsr``.
573+
- Support ISA of ``AVX10.1``.
573574

574575
Arm and AArch64 Support
575576
^^^^^^^^^^^^^^^^^^^^^^^

clang/include/clang/Driver/Options.td

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,9 @@ def m_wasm_Features_Driver_Group : OptionGroup<"<wasm driver features group>">,
197197
def m_x86_Features_Group : OptionGroup<"<x86 features group>">,
198198
Group<m_Group>, Visibility<[ClangOption, CLOption]>,
199199
DocName<"X86">;
200+
def m_x86_AVX10_Features_Group : OptionGroup<"<x86 AVX10 features group>">,
201+
Group<m_Group>, Visibility<[ClangOption, CLOption]>,
202+
DocName<"X86 AVX10">;
200203
def m_riscv_Features_Group : OptionGroup<"<riscv features group>">,
201204
Group<m_Group>, DocName<"RISC-V">;
202205
def m_ve_Features_Group : OptionGroup<"<ve features group>">,
@@ -5754,6 +5757,12 @@ def msse4a : Flag<["-"], "msse4a">, Group<m_x86_Features_Group>;
57545757
def mno_sse4a : Flag<["-"], "mno-sse4a">, Group<m_x86_Features_Group>;
57555758
def mavx : Flag<["-"], "mavx">, Group<m_x86_Features_Group>;
57565759
def mno_avx : Flag<["-"], "mno-avx">, Group<m_x86_Features_Group>;
5760+
def mavx10_1_256 : Flag<["-"], "mavx10.1-256">, Group<m_x86_AVX10_Features_Group>;
5761+
def mno_avx10_1_256 : Flag<["-"], "mno-avx10.1-256">, Group<m_x86_AVX10_Features_Group>;
5762+
def mavx10_1_512 : Flag<["-"], "mavx10.1-512">, Group<m_x86_AVX10_Features_Group>;
5763+
def mno_avx10_1_512 : Flag<["-"], "mno-avx10.1-512">, Group<m_x86_AVX10_Features_Group>;
5764+
def mavx10_1 : Flag<["-"], "mavx10.1">, Alias<mavx10_1_256>;
5765+
def mno_avx10_1 : Flag<["-"], "mno-avx10.1">, Alias<mno_avx10_1_256>;
57575766
def mavx2 : Flag<["-"], "mavx2">, Group<m_x86_Features_Group>;
57585767
def mno_avx2 : Flag<["-"], "mno-avx2">, Group<m_x86_Features_Group>;
57595768
def mavx512f : Flag<["-"], "mavx512f">, Group<m_x86_Features_Group>;

clang/lib/Basic/Targets/X86.cpp

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ bool X86TargetInfo::initFeatureMap(
121121
std::vector<std::string> UpdatedFeaturesVec;
122122
bool HasEVEX512 = true;
123123
bool HasAVX512F = false;
124+
bool HasAVX10 = false;
124125
for (const auto &Feature : FeaturesVec) {
125126
// Expand general-regs-only to -x86, -mmx and -sse
126127
if (Feature == "+general-regs-only") {
@@ -130,17 +131,35 @@ bool X86TargetInfo::initFeatureMap(
130131
continue;
131132
}
132133

133-
if (!HasAVX512F && Feature.substr(0, 7) == "+avx512")
134+
if (Feature.substr(0, 7) == "+avx10.") {
135+
HasAVX10 = true;
134136
HasAVX512F = true;
135-
if (HasAVX512F && Feature == "-avx512f")
137+
if (Feature.substr(Feature.size() - 3, 3) == "512") {
138+
HasEVEX512 = true;
139+
} else if (Feature.substr(7, 2) == "1-") {
140+
HasEVEX512 = false;
141+
}
142+
} else if (!HasAVX512F && Feature.substr(0, 7) == "+avx512") {
143+
HasAVX512F = true;
144+
} else if (HasAVX512F && Feature == "-avx512f") {
145+
HasAVX512F = false;
146+
} else if (HasAVX10 && Feature == "-avx10.1-256") {
147+
HasAVX10 = false;
136148
HasAVX512F = false;
137-
if (HasEVEX512 && Feature == "-evex512")
149+
} else if (!HasEVEX512 && Feature == "+evex512") {
150+
HasEVEX512 = true;
151+
} else if (HasEVEX512 && Feature == "-avx10.1-512") {
138152
HasEVEX512 = false;
153+
} else if (HasEVEX512 && Feature == "-evex512") {
154+
HasEVEX512 = false;
155+
}
139156

140157
UpdatedFeaturesVec.push_back(Feature);
141158
}
142159
if (HasAVX512F && HasEVEX512)
143160
UpdatedFeaturesVec.push_back("+evex512");
161+
else if (HasAVX10)
162+
UpdatedFeaturesVec.push_back("-evex512");
144163

145164
if (!TargetInfo::initFeatureMap(Features, Diags, CPU, UpdatedFeaturesVec))
146165
return false;
@@ -241,6 +260,10 @@ bool X86TargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
241260
HasGFNI = true;
242261
} else if (Feature == "+evex512") {
243262
HasEVEX512 = true;
263+
} else if (Feature == "+avx10.1-256") {
264+
HasAVX10_1 = true;
265+
} else if (Feature == "+avx10.1-512") {
266+
HasAVX10_1_512 = true;
244267
} else if (Feature == "+avx512cd") {
245268
HasAVX512CD = true;
246269
} else if (Feature == "+avx512vpopcntdq") {
@@ -748,6 +771,10 @@ void X86TargetInfo::getTargetDefines(const LangOptions &Opts,
748771

749772
if (HasEVEX512)
750773
Builder.defineMacro("__EVEX512__");
774+
if (HasAVX10_1)
775+
Builder.defineMacro("__AVX10_1__");
776+
if (HasAVX10_1_512)
777+
Builder.defineMacro("__AVX10_1_512__");
751778
if (HasAVX512CD)
752779
Builder.defineMacro("__AVX512CD__");
753780
if (HasAVX512VPOPCNTDQ)
@@ -973,6 +1000,8 @@ bool X86TargetInfo::isValidFeatureName(StringRef Name) const {
9731000
.Case("amx-int8", true)
9741001
.Case("amx-tile", true)
9751002
.Case("avx", true)
1003+
.Case("avx10.1-256", true)
1004+
.Case("avx10.1-512", true)
9761005
.Case("avx2", true)
9771006
.Case("avx512f", true)
9781007
.Case("avx512cd", true)
@@ -1081,6 +1110,8 @@ bool X86TargetInfo::hasFeature(StringRef Feature) const {
10811110
.Case("amx-int8", HasAMXINT8)
10821111
.Case("amx-tile", HasAMXTILE)
10831112
.Case("avx", SSELevel >= AVX)
1113+
.Case("avx10.1-256", HasAVX10_1)
1114+
.Case("avx10.1-512", HasAVX10_1_512)
10841115
.Case("avx2", SSELevel >= AVX2)
10851116
.Case("avx512f", SSELevel >= AVX512F)
10861117
.Case("avx512cd", HasAVX512CD)

clang/lib/Basic/Targets/X86.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ class LLVM_LIBRARY_VISIBILITY X86TargetInfo : public TargetInfo {
9595
bool HasLWP = false;
9696
bool HasFMA = false;
9797
bool HasF16C = false;
98+
bool HasAVX10_1 = false;
99+
bool HasAVX10_1_512 = false;
98100
bool HasEVEX512 = false;
99101
bool HasAVX512CD = false;
100102
bool HasAVX512VPOPCNTDQ = false;

clang/lib/Driver/ToolChains/Arch/X86.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,31 @@ void x86::getX86TargetFeatures(const Driver &D, const llvm::Triple &Triple,
229229
<< D.getOpts().getOptionName(LVIOpt);
230230
}
231231

232+
bool HasAVX10 = false;
233+
for (const Arg *A : Args.filtered(options::OPT_m_x86_AVX10_Features_Group)) {
234+
StringRef Name = A->getOption().getName();
235+
A->claim();
236+
237+
// Skip over "-m".
238+
assert(Name.startswith("m") && "Invalid feature name.");
239+
Name = Name.substr(1);
240+
241+
bool IsNegative = Name.startswith("no-");
242+
if (IsNegative)
243+
Name = Name.substr(3);
244+
245+
#ifndef NDEBUG
246+
assert(Name.startswith("avx10.") && "Invalid AVX10 feature name.");
247+
StringRef Version, Width;
248+
std::tie(Version, Width) = Name.substr(6).split('-');
249+
assert(Version == "1" && "Invalid AVX10 feature name.");
250+
assert((Width == "256" || Width == "512") && "Invalid AVX10 feature name.");
251+
#endif
252+
253+
Features.push_back(Args.MakeArgString((IsNegative ? "-" : "+") + Name));
254+
HasAVX10 = true;
255+
}
256+
232257
// Now add any that the user explicitly requested on the command line,
233258
// which may override the defaults.
234259
for (const Arg *A : Args.filtered(options::OPT_m_x86_Features_Group,
@@ -246,9 +271,14 @@ void x86::getX86TargetFeatures(const Driver &D, const llvm::Triple &Triple,
246271
continue;
247272
}
248273

274+
StringRef AVX512Name = Name;
249275
bool IsNegative = Name.startswith("no-");
250276
if (IsNegative)
251277
Name = Name.substr(3);
278+
if (HasAVX10 && (Name.startswith("avx512") || Name == "evex512")) {
279+
D.Diag(diag::warn_drv_unused_argument) << AVX512Name;
280+
continue;
281+
}
252282
Features.push_back(Args.MakeArgString((IsNegative ? "-" : "+") + Name));
253283
}
254284

clang/test/CodeGen/X86/avx512-error.c

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
1-
// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx512bw -target-feature -evex512 -emit-llvm -o /dev/null -verify -DFEATURE_TEST=1
2-
// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx512bw -target-feature -evex512 -emit-llvm -o /dev/null -verify -DFEATURE_TEST=2
1+
// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx512bw -target-feature -evex512 -emit-llvm -o /dev/null -verify=noevex -DFEATURE_TEST=1
2+
// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx512bw -target-feature -evex512 -emit-llvm -o /dev/null -verify=noevex -DFEATURE_TEST=2
3+
// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx512bw -emit-llvm -o /dev/null -verify -DFEATURE_TEST=3
4+
// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx10.1-256 -emit-llvm -o /dev/null -verify=noevex -DFEATURE_TEST=1
5+
// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx10.1-256 -emit-llvm -o /dev/null -verify=noevex -DFEATURE_TEST=2
6+
// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx10.1-512 -emit-llvm -o /dev/null -verify -DFEATURE_TEST=3
37

48
#include <immintrin.h>
59

6-
#if FEATURE_TEST == 1
10+
#if FEATURE_TEST & 3
11+
// expected-no-diagnostics
12+
#endif
13+
14+
#if FEATURE_TEST & 1
715
__attribute__((target("avx512bw,evex512")))
816
__m512d zmm_verify_ok(__m512d a) {
917
// No error emitted if we have "evex512" feature.
@@ -12,18 +20,18 @@ __m512d zmm_verify_ok(__m512d a) {
1220

1321
__m512d zmm_error(__m512d a) {
1422
// CHECK-LABEL: @test_mm512_sqrt_pd
15-
return __builtin_ia32_sqrtpd512(a, _MM_FROUND_CUR_DIRECTION); // expected-error {{'__builtin_ia32_sqrtpd512' needs target feature avx512f,evex512}}
23+
return __builtin_ia32_sqrtpd512(a, _MM_FROUND_CUR_DIRECTION); // noevex-error {{'__builtin_ia32_sqrtpd512' needs target feature avx512f,evex512}}
1624
}
1725
#endif
1826

19-
#if FEATURE_TEST == 2
27+
#if FEATURE_TEST & 2
2028
__attribute__((target("avx512bw,evex512")))
2129
__mmask64 k64_verify_ok(__mmask64 a) {
2230
// No error emitted if we have "evex512" feature.
2331
return _knot_mask64(a);
2432
}
2533

2634
__mmask64 test_knot_mask64(__mmask64 a) {
27-
return _knot_mask64(a); // expected-error {{always_inline function '_knot_mask64' requires target feature 'evex512', but would be inlined into function 'test_knot_mask64' that is compiled without support for 'evex512'}}
35+
return _knot_mask64(a); // noevex-error {{always_inline function '_knot_mask64' requires target feature 'evex512', but would be inlined into function 'test_knot_mask64' that is compiled without support for 'evex512'}}
2836
}
2937
#endif

clang/test/CodeGen/attr-target-x86.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ void __attribute__((target("arch=x86-64-v2"))) x86_64_v2(void) {}
3636
void __attribute__((target("arch=x86-64-v3"))) x86_64_v3(void) {}
3737
void __attribute__((target("arch=x86-64-v4"))) x86_64_v4(void) {}
3838

39+
void __attribute__((target("avx10.1-256"))) avx10_1_256(void) {}
40+
void __attribute__((target("avx10.1-512"))) avx10_1_512(void) {}
41+
3942
// Check that we emit the additional subtarget and cpu features for foo and not for baz or bar.
4043
// CHECK: baz{{.*}} #0
4144
// CHECK: foo{{.*}} #1
@@ -51,13 +54,15 @@ void __attribute__((target("arch=x86-64-v4"))) x86_64_v4(void) {}
5154
// CHECK: lake{{.*}} #7
5255
// CHECK: use_before_def{{.*}} #7
5356
// CHECK: walrus{{.*}} #8
57+
// CHECK: avx10_1_256{{.*}} #12
58+
// CHECK: avx10_1_512{{.*}} #13
5459
// CHECK: #0 = {{.*}}"target-cpu"="i686" "target-features"="+cmov,+cx8,+x87" "tune-cpu"="i686"
5560
// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cmov,+crc32,+cx16,+cx8,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"
5661
// CHECK-NOT: tune-cpu
57-
// CHECK: #2 = {{.*}}"target-cpu"="i686" "target-features"="+cmov,+cx8,+x87,-aes,-avx,-avx2,-avx512bf16,-avx512bitalg,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512fp16,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vbmi2,-avx512vl,-avx512vnni,-avx512vp2intersect,-avx512vpopcntdq,-avxifma,-avxneconvert,-avxvnni,-avxvnniint16,-avxvnniint8,-f16c,-fma,-fma4,-gfni,-kl,-pclmul,-sha,-sha512,-sm3,-sm4,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-vaes,-vpclmulqdq,-widekl,-xop" "tune-cpu"="i686"
62+
// CHECK: #2 = {{.*}}"target-cpu"="i686" "target-features"="+cmov,+cx8,+x87,-aes,-avx,-avx10.1-256,-avx10.1-512,-avx2,-avx512bf16,-avx512bitalg,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512fp16,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vbmi2,-avx512vl,-avx512vnni,-avx512vp2intersect,-avx512vpopcntdq,-avxifma,-avxneconvert,-avxvnni,-avxvnniint16,-avxvnniint8,-f16c,-fma,-fma4,-gfni,-kl,-pclmul,-sha,-sha512,-sm3,-sm4,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-vaes,-vpclmulqdq,-widekl,-xop" "tune-cpu"="i686"
5863
// CHECK: #3 = {{.*}}"target-cpu"="i686" "target-features"="+cmov,+crc32,+cx8,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87" "tune-cpu"="i686"
59-
// CHECK: #4 = {{.*}}"target-cpu"="i686" "target-features"="+cmov,+cx8,+x87,-avx,-avx2,-avx512bf16,-avx512bitalg,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512fp16,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vbmi2,-avx512vl,-avx512vnni,-avx512vp2intersect,-avx512vpopcntdq,-avxifma,-avxneconvert,-avxvnni,-avxvnniint16,-avxvnniint8,-f16c,-fma,-fma4,-sha512,-sm3,-sm4,-sse4.1,-sse4.2,-vaes,-vpclmulqdq,-xop" "tune-cpu"="i686"
60-
// CHECK: #5 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cmov,+crc32,+cx16,+cx8,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes,-vaes"
64+
// CHECK: #4 = {{.*}}"target-cpu"="i686" "target-features"="+cmov,+cx8,+x87,-avx,-avx10.1-256,-avx10.1-512,-avx2,-avx512bf16,-avx512bitalg,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512fp16,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vbmi2,-avx512vl,-avx512vnni,-avx512vp2intersect,-avx512vpopcntdq,-avxifma,-avxneconvert,-avxvnni,-avxvnniint16,-avxvnniint8,-f16c,-fma,-fma4,-sha512,-sm3,-sm4,-sse4.1,-sse4.2,-vaes,-vpclmulqdq,-xop" "tune-cpu"="i686"
65+
// CHECK: #5 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cmov,+crc32,+cx16,+cx8,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes,-avx10.1-256,-avx10.1-512,-vaes"
6166
// CHECK-NOT: tune-cpu
6267
// CHECK: #6 = {{.*}}"target-cpu"="i686" "target-features"="+cmov,+cx8,+x87,-3dnow,-3dnowa,-mmx"
6368
// CHECK: #7 = {{.*}}"target-cpu"="lakemont" "target-features"="+cx8,+mmx"
@@ -70,3 +75,6 @@ void __attribute__((target("arch=x86-64-v4"))) x86_64_v4(void) {}
7075
// CHECK-SAME: "target-features"="+avx,+avx2,+bmi,+bmi2,+cmov,+crc32,+cx16,+cx8,+f16c,+fma,+fxsr,+lzcnt,+mmx,+movbe,+popcnt,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave"
7176
// CHECK: "target-cpu"="x86-64-v4"
7277
// CHECK-SAME: "target-features"="+avx,+avx2,+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512vl,+bmi,+bmi2,+cmov,+crc32,+cx16,+cx8,+evex512,+f16c,+fma,+fxsr,+lzcnt,+mmx,+movbe,+popcnt,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave"
78+
79+
// CHECK: #12 = {{.*}}"target-cpu"="i686" "target-features"="+aes,+avx,+avx10.1-256,+avx2,+avx512bf16,+avx512bitalg,+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512fp16,+avx512ifma,+avx512vbmi,+avx512vbmi2,+avx512vl,+avx512vnni,+avx512vpopcntdq,+cmov,+crc32,+cx8,+f16c,+fma,+mmx,+pclmul,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+vaes,+vpclmulqdq,+x87,+xsave,-avx10.1-512,-evex512"
80+
// CHECK: #13 = {{.*}}"target-cpu"="i686" "target-features"="+aes,+avx,+avx10.1-256,+avx10.1-512,+avx2,+avx512bf16,+avx512bitalg,+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512fp16,+avx512ifma,+avx512vbmi,+avx512vbmi2,+avx512vl,+avx512vnni,+avx512vpopcntdq,+cmov,+crc32,+cx8,+evex512,+f16c,+fma,+mmx,+pclmul,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+vaes,+vpclmulqdq,+x87,+xsave"

clang/test/CodeGen/target-avx-abi-diag.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -target-feature +avx512f -target-feature -evex512 -verify=avx512-256 -DAVX512_ERR=1 -o - -S
66
// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -target-feature +avx512f -target-feature -evex512 -verify=avx512-256 -DAVX512_ERR=2 -o - -S
77
// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -target-feature +avx512f -target-feature -evex512 -verify=avx512-256 -DAVX512_ERR=3 -o - -S
8+
// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -target-feature +avx10.1-512 -verify=both -o - -S
9+
// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -target-feature +avx10.1-256 -verify=avx512-256 -DAVX512_ERR=1 -o - -S
10+
// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -target-feature +avx10.1-256 -verify=avx512-256 -DAVX512_ERR=2 -o - -S
11+
// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -target-feature +avx10.1-256 -verify=avx512-256 -DAVX512_ERR=3 -o - -S
812
// REQUIRES: x86-registered-target
913

1014
// both-no-diagnostics

clang/test/Driver/x86-target-features.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,26 @@
374374
// EVEX512: "-target-feature" "+evex512"
375375
// NO-EVEX512: "-target-feature" "-evex512"
376376

377+
// RUN: %clang --target=i386 -mavx10.1 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=AVX10_1_256 %s
378+
// RUN: %clang --target=i386 -mavx10.1-256 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=AVX10_1_256 %s
379+
// RUN: %clang --target=i386 -mavx10.1-512 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=AVX10_1_512 %s
380+
// RUN: %clang --target=i386 -mavx10.1-256 -mavx10.1-512 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=AVX10_1_512 %s
381+
// RUN: %clang --target=i386 -mavx10.1-512 -mavx10.1-256 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=AVX10_1_256 %s
382+
// RUN: not %clang --target=i386 -march=i386 -mavx10.1-128 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=BAD-AVX10 %s
383+
// RUN: not %clang --target=i386 -march=i386 -mavx10.a-256 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=BAD-AVX10 %s
384+
// RUN: not %clang --target=i386 -march=i386 -mavx10.1024-512 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=BAD-AVX10 %s
385+
// RUN: %clang --target=i386 -march=i386 -mavx10.1 -mavx512f %s -### -o %t.o 2>&1 | FileCheck -check-prefix=AVX10-AVX512 %s
386+
// RUN: %clang --target=i386 -march=i386 -mavx10.1 -mno-avx512f %s -### -o %t.o 2>&1 | FileCheck -check-prefix=AVX10-AVX512 %s
387+
// RUN: %clang --target=i386 -march=i386 -mavx10.1 -mevex512 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=AVX10-EVEX512 %s
388+
// RUN: %clang --target=i386 -march=i386 -mavx10.1 -mno-evex512 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=AVX10-EVEX512 %s
389+
// AVX10_1_256: "-target-feature" "+avx10.1-256"
390+
// AVX10_1_512: "-target-feature" "+avx10.1-512"
391+
// BAD-AVX10: error: unknown argument{{:?}} '-mavx10.{{.*}}'
392+
// AVX10-AVX512: warning: argument unused during compilation: '{{.*}}avx512f'
393+
// AVX10-AVX512-NOT: "avx512f"
394+
// AVX10-EVEX512: warning: argument unused during compilation: '{{.*}}evex512'
395+
// AVX10-EVEX512-NOT: "evex512"
396+
377397
// RUN: %clang --target=i386 -musermsr %s -### -o %t.o 2>&1 | FileCheck -check-prefix=USERMSR %s
378398
// RUN: %clang --target=i386 -mno-usermsr %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-USERMSR %s
379399
// USERMSR: "-target-feature" "+usermsr"

clang/test/Preprocessor/x86_target_features.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,20 @@
750750
// AVXVNNIINT16NOAVX2-NOT: #define __AVX2__ 1
751751
// AVXVNNIINT16NOAVX2-NOT: #define __AVXVNNIINT16__ 1
752752

753+
// RUN: %clang -target i686-unknown-linux-gnu -march=atom -mavx10.1 -x c -E -dM -o - %s | FileCheck -check-prefix=AVX10_1_256 %s
754+
// RUN: %clang -target i686-unknown-linux-gnu -march=atom -mavx10.1-256 -x c -E -dM -o - %s | FileCheck -check-prefix=AVX10_1_256 %s
755+
// 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
756+
// AVX10_1_256: #define __AVX10_1__ 1
757+
// AVX10_1_256: #define __AVX512F__ 1
758+
// AVX10_1_256-NOT: __EVEX512__
759+
760+
// 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
761+
// 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
762+
// 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
763+
// AVX10_1_512: #define __AVX10_1__ 1
764+
// AVX10_1_512: #define __AVX512F__ 1
765+
// AVX10_1_512: #define __EVEX512__ 1
766+
753767
// RUN: %clang -target i686-unknown-linux-gnu -march=atom -musermsr -x c -E -dM -o - %s | FileCheck -check-prefix=USERMSR %s
754768
// USERMSR: #define __USERMSR__ 1
755769

llvm/docs/ReleaseNotes.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ Changes to the X86 Backend
134134
with C, but also fixes code generation where LLVM already assumed that the
135135
type matched and called into libgcc helper functions.
136136
* Support ISA of ``USER_MSR``.
137+
* Support ISA of ``AVX10.1-256`` and ``AVX10.1-512``.
137138

138139
Changes to the OCaml bindings
139140
-----------------------------

llvm/include/llvm/TargetParser/X86TargetParser.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,8 @@ X86_FEATURE (SM3, "sm3")
241241
X86_FEATURE (SM4, "sm4")
242242
X86_FEATURE (AVXVNNIINT16, "avxvnniint16")
243243
X86_FEATURE (EVEX512, "evex512")
244+
X86_FEATURE (AVX10_1, "avx10.1-256")
245+
X86_FEATURE (AVX10_1_512, "avx10.1-512")
244246
X86_FEATURE (USERMSR, "usermsr")
245247
// These features aren't really CPU features, but the frontend can set them.
246248
X86_FEATURE (RETPOLINE_EXTERNAL_THUNK, "retpoline-external-thunk")

0 commit comments

Comments
 (0)