Skip to content

Commit f5e48fe

Browse files
authored
[X86][AVX10] Allow 64-bit mask register used without EVEX512 (#75571)
This is to reflect new document change that 64-bit mask is support by AVX10 256-bit targets. Latest documents can be found in: https://cdrdv2.intel.com/v1/dl/getContent/784267 https://cdrdv2.intel.com/v1/dl/getContent/784343
1 parent 681eacc commit f5e48fe

File tree

4 files changed

+62
-99
lines changed

4 files changed

+62
-99
lines changed

clang/include/clang/Basic/BuiltinsX86.def

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -979,7 +979,7 @@ TARGET_BUILTIN(__builtin_ia32_scatterpfqps, "vUcV8Oiv*IiIi", "nV:512:", "avx512p
979979
TARGET_BUILTIN(__builtin_ia32_knotqi, "UcUc", "nc", "avx512dq")
980980
TARGET_BUILTIN(__builtin_ia32_knothi, "UsUs", "nc", "avx512f")
981981
TARGET_BUILTIN(__builtin_ia32_knotsi, "UiUi", "nc", "avx512bw")
982-
TARGET_BUILTIN(__builtin_ia32_knotdi, "UOiUOi", "nc", "avx512bw,evex512")
982+
TARGET_BUILTIN(__builtin_ia32_knotdi, "UOiUOi", "nc", "avx512bw")
983983

984984
TARGET_BUILTIN(__builtin_ia32_cmpb128_mask, "UsV16cV16cIiUs", "ncV:128:", "avx512vl,avx512bw")
985985
TARGET_BUILTIN(__builtin_ia32_cmpd128_mask, "UcV4iV4iIiUc", "ncV:128:", "avx512vl")
@@ -1349,7 +1349,7 @@ TARGET_BUILTIN(__builtin_ia32_vpmadd52luq128, "V2OiV2OiV2OiV2Oi", "ncV:128:", "a
13491349
TARGET_BUILTIN(__builtin_ia32_vpmadd52luq256, "V4OiV4OiV4OiV4Oi", "ncV:256:", "avx512ifma,avx512vl|avxifma")
13501350
TARGET_BUILTIN(__builtin_ia32_vcomisd, "iV2dV2dIiIi", "ncV:128:", "avx512f")
13511351
TARGET_BUILTIN(__builtin_ia32_vcomiss, "iV4fV4fIiIi", "ncV:128:", "avx512f")
1352-
TARGET_BUILTIN(__builtin_ia32_kunpckdi, "UOiUOiUOi", "nc", "avx512bw,evex512")
1352+
TARGET_BUILTIN(__builtin_ia32_kunpckdi, "UOiUOiUOi", "nc", "avx512bw")
13531353
TARGET_BUILTIN(__builtin_ia32_kunpcksi, "UiUiUi", "nc", "avx512bw")
13541354
TARGET_BUILTIN(__builtin_ia32_loaddquhi512_mask, "V32sV32sC*V32sUi", "nV:512:", "avx512bw,evex512")
13551355
TARGET_BUILTIN(__builtin_ia32_loaddquqi512_mask, "V64cV64cC*V64cUOi", "nV:512:", "avx512bw,evex512")
@@ -1665,56 +1665,56 @@ TARGET_BUILTIN(__builtin_ia32_fpclassss_mask, "UcV4fIiUc", "ncV:128:", "avx512dq
16651665
TARGET_BUILTIN(__builtin_ia32_kaddqi, "UcUcUc", "nc", "avx512dq")
16661666
TARGET_BUILTIN(__builtin_ia32_kaddhi, "UsUsUs", "nc", "avx512dq")
16671667
TARGET_BUILTIN(__builtin_ia32_kaddsi, "UiUiUi", "nc", "avx512bw")
1668-
TARGET_BUILTIN(__builtin_ia32_kadddi, "UOiUOiUOi", "nc", "avx512bw,evex512")
1668+
TARGET_BUILTIN(__builtin_ia32_kadddi, "UOiUOiUOi", "nc", "avx512bw")
16691669
TARGET_BUILTIN(__builtin_ia32_kandqi, "UcUcUc", "nc", "avx512dq")
16701670
TARGET_BUILTIN(__builtin_ia32_kandhi, "UsUsUs", "nc", "avx512f")
16711671
TARGET_BUILTIN(__builtin_ia32_kandsi, "UiUiUi", "nc", "avx512bw")
1672-
TARGET_BUILTIN(__builtin_ia32_kanddi, "UOiUOiUOi", "nc", "avx512bw,evex512")
1672+
TARGET_BUILTIN(__builtin_ia32_kanddi, "UOiUOiUOi", "nc", "avx512bw")
16731673
TARGET_BUILTIN(__builtin_ia32_kandnqi, "UcUcUc", "nc", "avx512dq")
16741674
TARGET_BUILTIN(__builtin_ia32_kandnhi, "UsUsUs", "nc", "avx512f")
16751675
TARGET_BUILTIN(__builtin_ia32_kandnsi, "UiUiUi", "nc", "avx512bw")
1676-
TARGET_BUILTIN(__builtin_ia32_kandndi, "UOiUOiUOi", "nc", "avx512bw,evex512")
1676+
TARGET_BUILTIN(__builtin_ia32_kandndi, "UOiUOiUOi", "nc", "avx512bw")
16771677
TARGET_BUILTIN(__builtin_ia32_korqi, "UcUcUc", "nc", "avx512dq")
16781678
TARGET_BUILTIN(__builtin_ia32_korhi, "UsUsUs", "nc", "avx512f")
16791679
TARGET_BUILTIN(__builtin_ia32_korsi, "UiUiUi", "nc", "avx512bw")
1680-
TARGET_BUILTIN(__builtin_ia32_kordi, "UOiUOiUOi", "nc", "avx512bw,evex512")
1680+
TARGET_BUILTIN(__builtin_ia32_kordi, "UOiUOiUOi", "nc", "avx512bw")
16811681
TARGET_BUILTIN(__builtin_ia32_kortestcqi, "iUcUc", "nc", "avx512dq")
16821682
TARGET_BUILTIN(__builtin_ia32_kortestzqi, "iUcUc", "nc", "avx512dq")
16831683
TARGET_BUILTIN(__builtin_ia32_kortestchi, "iUsUs", "nc", "avx512f")
16841684
TARGET_BUILTIN(__builtin_ia32_kortestzhi, "iUsUs", "nc", "avx512f")
16851685
TARGET_BUILTIN(__builtin_ia32_kortestcsi, "iUiUi", "nc", "avx512bw")
16861686
TARGET_BUILTIN(__builtin_ia32_kortestzsi, "iUiUi", "nc", "avx512bw")
1687-
TARGET_BUILTIN(__builtin_ia32_kortestcdi, "iUOiUOi", "nc", "avx512bw,evex512")
1688-
TARGET_BUILTIN(__builtin_ia32_kortestzdi, "iUOiUOi", "nc", "avx512bw,evex512")
1687+
TARGET_BUILTIN(__builtin_ia32_kortestcdi, "iUOiUOi", "nc", "avx512bw")
1688+
TARGET_BUILTIN(__builtin_ia32_kortestzdi, "iUOiUOi", "nc", "avx512bw")
16891689
TARGET_BUILTIN(__builtin_ia32_ktestcqi, "iUcUc", "nc", "avx512dq")
16901690
TARGET_BUILTIN(__builtin_ia32_ktestzqi, "iUcUc", "nc", "avx512dq")
16911691
TARGET_BUILTIN(__builtin_ia32_ktestchi, "iUsUs", "nc", "avx512dq")
16921692
TARGET_BUILTIN(__builtin_ia32_ktestzhi, "iUsUs", "nc", "avx512dq")
16931693
TARGET_BUILTIN(__builtin_ia32_ktestcsi, "iUiUi", "nc", "avx512bw")
16941694
TARGET_BUILTIN(__builtin_ia32_ktestzsi, "iUiUi", "nc", "avx512bw")
1695-
TARGET_BUILTIN(__builtin_ia32_ktestcdi, "iUOiUOi", "nc", "avx512bw,evex512")
1696-
TARGET_BUILTIN(__builtin_ia32_ktestzdi, "iUOiUOi", "nc", "avx512bw,evex512")
1695+
TARGET_BUILTIN(__builtin_ia32_ktestcdi, "iUOiUOi", "nc", "avx512bw")
1696+
TARGET_BUILTIN(__builtin_ia32_ktestzdi, "iUOiUOi", "nc", "avx512bw")
16971697
TARGET_BUILTIN(__builtin_ia32_kunpckhi, "UsUsUs", "nc", "avx512f")
16981698
TARGET_BUILTIN(__builtin_ia32_kxnorqi, "UcUcUc", "nc", "avx512dq")
16991699
TARGET_BUILTIN(__builtin_ia32_kxnorhi, "UsUsUs", "nc", "avx512f")
17001700
TARGET_BUILTIN(__builtin_ia32_kxnorsi, "UiUiUi", "nc", "avx512bw")
1701-
TARGET_BUILTIN(__builtin_ia32_kxnordi, "UOiUOiUOi", "nc", "avx512bw,evex512")
1701+
TARGET_BUILTIN(__builtin_ia32_kxnordi, "UOiUOiUOi", "nc", "avx512bw")
17021702
TARGET_BUILTIN(__builtin_ia32_kxorqi, "UcUcUc", "nc", "avx512dq")
17031703
TARGET_BUILTIN(__builtin_ia32_kxorhi, "UsUsUs", "nc", "avx512f")
17041704
TARGET_BUILTIN(__builtin_ia32_kxorsi, "UiUiUi", "nc", "avx512bw")
1705-
TARGET_BUILTIN(__builtin_ia32_kxordi, "UOiUOiUOi", "nc", "avx512bw,evex512")
1705+
TARGET_BUILTIN(__builtin_ia32_kxordi, "UOiUOiUOi", "nc", "avx512bw")
17061706
TARGET_BUILTIN(__builtin_ia32_kshiftliqi, "UcUcIUi", "nc", "avx512dq")
17071707
TARGET_BUILTIN(__builtin_ia32_kshiftlihi, "UsUsIUi", "nc", "avx512f")
17081708
TARGET_BUILTIN(__builtin_ia32_kshiftlisi, "UiUiIUi", "nc", "avx512bw")
1709-
TARGET_BUILTIN(__builtin_ia32_kshiftlidi, "UOiUOiIUi", "nc", "avx512bw,evex512")
1709+
TARGET_BUILTIN(__builtin_ia32_kshiftlidi, "UOiUOiIUi", "nc", "avx512bw")
17101710
TARGET_BUILTIN(__builtin_ia32_kshiftriqi, "UcUcIUi", "nc", "avx512dq")
17111711
TARGET_BUILTIN(__builtin_ia32_kshiftrihi, "UsUsIUi", "nc", "avx512f")
17121712
TARGET_BUILTIN(__builtin_ia32_kshiftrisi, "UiUiIUi", "nc", "avx512bw")
1713-
TARGET_BUILTIN(__builtin_ia32_kshiftridi, "UOiUOiIUi", "nc", "avx512bw,evex512")
1713+
TARGET_BUILTIN(__builtin_ia32_kshiftridi, "UOiUOiIUi", "nc", "avx512bw")
17141714
TARGET_BUILTIN(__builtin_ia32_kmovb, "UcUc", "nc", "avx512dq")
17151715
TARGET_BUILTIN(__builtin_ia32_kmovw, "UsUs", "nc", "avx512f")
17161716
TARGET_BUILTIN(__builtin_ia32_kmovd, "UiUi", "nc", "avx512bw")
1717-
TARGET_BUILTIN(__builtin_ia32_kmovq, "UOiUOi", "nc", "avx512bw,evex512")
1717+
TARGET_BUILTIN(__builtin_ia32_kmovq, "UOiUOi", "nc", "avx512bw")
17181718
TARGET_BUILTIN(__builtin_ia32_palignr512, "V64cV64cV64cIi", "ncV:512:", "avx512bw,evex512")
17191719
TARGET_BUILTIN(__builtin_ia32_dbpsadbw128, "V8sV16cV16cIi", "ncV:128:", "avx512bw,avx512vl")
17201720
TARGET_BUILTIN(__builtin_ia32_dbpsadbw256, "V16sV32cV32cIi", "ncV:256:", "avx512bw,avx512vl")

clang/lib/Headers/avx512bwintrin.h

Lines changed: 33 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@ typedef unsigned int __mmask32;
1818
typedef unsigned long long __mmask64;
1919

2020
/* Define the default attributes for the functions in this file. */
21-
#define __DEFAULT_FN_ATTRS512 __attribute__((__always_inline__, __nodebug__, __target__("avx512bw,evex512"), __min_vector_width__(512)))
22-
#define __DEFAULT_FN_ATTRS64 __attribute__((__always_inline__, __nodebug__, __target__("avx512bw,evex512")))
21+
#define __DEFAULT_FN_ATTRS512 \
22+
__attribute__((__always_inline__, __nodebug__, \
23+
__target__("avx512bw,evex512"), __min_vector_width__(512)))
2324
#define __DEFAULT_FN_ATTRS \
2425
__attribute__((__always_inline__, __nodebug__, \
2526
__target__("avx512bw,no-evex512")))
@@ -30,9 +31,7 @@ _knot_mask32(__mmask32 __M)
3031
return __builtin_ia32_knotsi(__M);
3132
}
3233

33-
static __inline __mmask64 __DEFAULT_FN_ATTRS64
34-
_knot_mask64(__mmask64 __M)
35-
{
34+
static __inline __mmask64 __DEFAULT_FN_ATTRS _knot_mask64(__mmask64 __M) {
3635
return __builtin_ia32_knotdi(__M);
3736
}
3837

@@ -42,9 +41,8 @@ _kand_mask32(__mmask32 __A, __mmask32 __B)
4241
return (__mmask32)__builtin_ia32_kandsi((__mmask32)__A, (__mmask32)__B);
4342
}
4443

45-
static __inline__ __mmask64 __DEFAULT_FN_ATTRS64
46-
_kand_mask64(__mmask64 __A, __mmask64 __B)
47-
{
44+
static __inline__ __mmask64 __DEFAULT_FN_ATTRS _kand_mask64(__mmask64 __A,
45+
__mmask64 __B) {
4846
return (__mmask64)__builtin_ia32_kanddi((__mmask64)__A, (__mmask64)__B);
4947
}
5048

@@ -54,9 +52,8 @@ _kandn_mask32(__mmask32 __A, __mmask32 __B)
5452
return (__mmask32)__builtin_ia32_kandnsi((__mmask32)__A, (__mmask32)__B);
5553
}
5654

57-
static __inline__ __mmask64 __DEFAULT_FN_ATTRS64
58-
_kandn_mask64(__mmask64 __A, __mmask64 __B)
59-
{
55+
static __inline__ __mmask64 __DEFAULT_FN_ATTRS _kandn_mask64(__mmask64 __A,
56+
__mmask64 __B) {
6057
return (__mmask64)__builtin_ia32_kandndi((__mmask64)__A, (__mmask64)__B);
6158
}
6259

@@ -66,9 +63,8 @@ _kor_mask32(__mmask32 __A, __mmask32 __B)
6663
return (__mmask32)__builtin_ia32_korsi((__mmask32)__A, (__mmask32)__B);
6764
}
6865

69-
static __inline__ __mmask64 __DEFAULT_FN_ATTRS64
70-
_kor_mask64(__mmask64 __A, __mmask64 __B)
71-
{
66+
static __inline__ __mmask64 __DEFAULT_FN_ATTRS _kor_mask64(__mmask64 __A,
67+
__mmask64 __B) {
7268
return (__mmask64)__builtin_ia32_kordi((__mmask64)__A, (__mmask64)__B);
7369
}
7470

@@ -78,9 +74,8 @@ _kxnor_mask32(__mmask32 __A, __mmask32 __B)
7874
return (__mmask32)__builtin_ia32_kxnorsi((__mmask32)__A, (__mmask32)__B);
7975
}
8076

81-
static __inline__ __mmask64 __DEFAULT_FN_ATTRS64
82-
_kxnor_mask64(__mmask64 __A, __mmask64 __B)
83-
{
77+
static __inline__ __mmask64 __DEFAULT_FN_ATTRS _kxnor_mask64(__mmask64 __A,
78+
__mmask64 __B) {
8479
return (__mmask64)__builtin_ia32_kxnordi((__mmask64)__A, (__mmask64)__B);
8580
}
8681

@@ -90,9 +85,8 @@ _kxor_mask32(__mmask32 __A, __mmask32 __B)
9085
return (__mmask32)__builtin_ia32_kxorsi((__mmask32)__A, (__mmask32)__B);
9186
}
9287

93-
static __inline__ __mmask64 __DEFAULT_FN_ATTRS64
94-
_kxor_mask64(__mmask64 __A, __mmask64 __B)
95-
{
88+
static __inline__ __mmask64 __DEFAULT_FN_ATTRS _kxor_mask64(__mmask64 __A,
89+
__mmask64 __B) {
9690
return (__mmask64)__builtin_ia32_kxordi((__mmask64)__A, (__mmask64)__B);
9791
}
9892

@@ -114,19 +108,17 @@ _kortest_mask32_u8(__mmask32 __A, __mmask32 __B, unsigned char *__C) {
114108
return (unsigned char)__builtin_ia32_kortestzsi(__A, __B);
115109
}
116110

117-
static __inline__ unsigned char __DEFAULT_FN_ATTRS64
118-
_kortestc_mask64_u8(__mmask64 __A, __mmask64 __B)
119-
{
111+
static __inline__ unsigned char __DEFAULT_FN_ATTRS
112+
_kortestc_mask64_u8(__mmask64 __A, __mmask64 __B) {
120113
return (unsigned char)__builtin_ia32_kortestcdi(__A, __B);
121114
}
122115

123-
static __inline__ unsigned char __DEFAULT_FN_ATTRS64
124-
_kortestz_mask64_u8(__mmask64 __A, __mmask64 __B)
125-
{
116+
static __inline__ unsigned char __DEFAULT_FN_ATTRS
117+
_kortestz_mask64_u8(__mmask64 __A, __mmask64 __B) {
126118
return (unsigned char)__builtin_ia32_kortestzdi(__A, __B);
127119
}
128120

129-
static __inline__ unsigned char __DEFAULT_FN_ATTRS64
121+
static __inline__ unsigned char __DEFAULT_FN_ATTRS
130122
_kortest_mask64_u8(__mmask64 __A, __mmask64 __B, unsigned char *__C) {
131123
*__C = (unsigned char)__builtin_ia32_kortestcdi(__A, __B);
132124
return (unsigned char)__builtin_ia32_kortestzdi(__A, __B);
@@ -150,19 +142,17 @@ _ktest_mask32_u8(__mmask32 __A, __mmask32 __B, unsigned char *__C) {
150142
return (unsigned char)__builtin_ia32_ktestzsi(__A, __B);
151143
}
152144

153-
static __inline__ unsigned char __DEFAULT_FN_ATTRS64
154-
_ktestc_mask64_u8(__mmask64 __A, __mmask64 __B)
155-
{
145+
static __inline__ unsigned char __DEFAULT_FN_ATTRS
146+
_ktestc_mask64_u8(__mmask64 __A, __mmask64 __B) {
156147
return (unsigned char)__builtin_ia32_ktestcdi(__A, __B);
157148
}
158149

159-
static __inline__ unsigned char __DEFAULT_FN_ATTRS64
160-
_ktestz_mask64_u8(__mmask64 __A, __mmask64 __B)
161-
{
150+
static __inline__ unsigned char __DEFAULT_FN_ATTRS
151+
_ktestz_mask64_u8(__mmask64 __A, __mmask64 __B) {
162152
return (unsigned char)__builtin_ia32_ktestzdi(__A, __B);
163153
}
164154

165-
static __inline__ unsigned char __DEFAULT_FN_ATTRS64
155+
static __inline__ unsigned char __DEFAULT_FN_ATTRS
166156
_ktest_mask64_u8(__mmask64 __A, __mmask64 __B, unsigned char *__C) {
167157
*__C = (unsigned char)__builtin_ia32_ktestcdi(__A, __B);
168158
return (unsigned char)__builtin_ia32_ktestzdi(__A, __B);
@@ -174,9 +164,8 @@ _kadd_mask32(__mmask32 __A, __mmask32 __B)
174164
return (__mmask32)__builtin_ia32_kaddsi((__mmask32)__A, (__mmask32)__B);
175165
}
176166

177-
static __inline__ __mmask64 __DEFAULT_FN_ATTRS64
178-
_kadd_mask64(__mmask64 __A, __mmask64 __B)
179-
{
167+
static __inline__ __mmask64 __DEFAULT_FN_ATTRS _kadd_mask64(__mmask64 __A,
168+
__mmask64 __B) {
180169
return (__mmask64)__builtin_ia32_kadddi((__mmask64)__A, (__mmask64)__B);
181170
}
182171

@@ -197,7 +186,7 @@ _cvtmask32_u32(__mmask32 __A) {
197186
return (unsigned int)__builtin_ia32_kmovd((__mmask32)__A);
198187
}
199188

200-
static __inline__ unsigned long long __DEFAULT_FN_ATTRS64
189+
static __inline__ unsigned long long __DEFAULT_FN_ATTRS
201190
_cvtmask64_u64(__mmask64 __A) {
202191
return (unsigned long long)__builtin_ia32_kmovq((__mmask64)__A);
203192
}
@@ -207,7 +196,7 @@ _cvtu32_mask32(unsigned int __A) {
207196
return (__mmask32)__builtin_ia32_kmovd((__mmask32)__A);
208197
}
209198

210-
static __inline__ __mmask64 __DEFAULT_FN_ATTRS64
199+
static __inline__ __mmask64 __DEFAULT_FN_ATTRS
211200
_cvtu64_mask64(unsigned long long __A) {
212201
return (__mmask64)__builtin_ia32_kmovq((__mmask64)__A);
213202
}
@@ -217,8 +206,7 @@ _load_mask32(__mmask32 *__A) {
217206
return (__mmask32)__builtin_ia32_kmovd(*(__mmask32 *)__A);
218207
}
219208

220-
static __inline__ __mmask64 __DEFAULT_FN_ATTRS64
221-
_load_mask64(__mmask64 *__A) {
209+
static __inline__ __mmask64 __DEFAULT_FN_ATTRS _load_mask64(__mmask64 *__A) {
222210
return (__mmask64)__builtin_ia32_kmovq(*(__mmask64 *)__A);
223211
}
224212

@@ -227,8 +215,8 @@ _store_mask32(__mmask32 *__A, __mmask32 __B) {
227215
*(__mmask32 *)__A = __builtin_ia32_kmovd((__mmask32)__B);
228216
}
229217

230-
static __inline__ void __DEFAULT_FN_ATTRS64
231-
_store_mask64(__mmask64 *__A, __mmask64 __B) {
218+
static __inline__ void __DEFAULT_FN_ATTRS _store_mask64(__mmask64 *__A,
219+
__mmask64 __B) {
232220
*(__mmask64 *)__A = __builtin_ia32_kmovq((__mmask64)__B);
233221
}
234222

@@ -1717,9 +1705,8 @@ _mm512_maskz_set1_epi8 (__mmask64 __M, char __A)
17171705
(__v64qi) _mm512_setzero_si512());
17181706
}
17191707

1720-
static __inline__ __mmask64 __DEFAULT_FN_ATTRS64
1721-
_mm512_kunpackd (__mmask64 __A, __mmask64 __B)
1722-
{
1708+
static __inline__ __mmask64 __DEFAULT_FN_ATTRS _mm512_kunpackd(__mmask64 __A,
1709+
__mmask64 __B) {
17231710
return (__mmask64) __builtin_ia32_kunpckdi ((__mmask64) __A,
17241711
(__mmask64) __B);
17251712
}

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

Lines changed: 14 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
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
1+
// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx512bw -target-feature -evex512 -emit-llvm -o /dev/null -verify=noevex
2+
// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx512bw -emit-llvm -o /dev/null -verify
3+
// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx10.1-256 -emit-llvm -o /dev/null -verify=noevex
4+
// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx10.1-512 -emit-llvm -o /dev/null -verify
75

86
#include <immintrin.h>
97

10-
#if FEATURE_TEST & 3
11-
// expected-no-diagnostics
12-
#endif
8+
// No error emitted whether we have "evex512" feature or not.
9+
__attribute__((target("avx512bw,no-evex512")))
10+
__mmask64 k64_verify_1(__mmask64 a) {
11+
return _knot_mask64(a); // expected-no-diagnostics
12+
}
13+
14+
__mmask64 k64_verify_2(__mmask64 a) {
15+
return _knot_mask64(a); // expected-no-diagnostic
16+
}
1317

14-
#if FEATURE_TEST & 1
1518
__attribute__((target("avx512bw,evex512")))
1619
__m512d zmm_verify_ok(__m512d a) {
1720
// No error emitted if we have "evex512" feature.
18-
return __builtin_ia32_sqrtpd512(a, _MM_FROUND_CUR_DIRECTION);
21+
return __builtin_ia32_sqrtpd512(a, _MM_FROUND_CUR_DIRECTION); // expected-no-diagnostic
1922
}
2023

2124
__m512d zmm_error(__m512d a) {
@@ -27,24 +30,3 @@ __m512d zmm_error(__m512d a) {
2730
// noevex-warning@*:* {{invalid feature combination: +avx512bw +avx10.1-256; will be promoted to avx10.1-512}}
2831
// noevex-warning@*:* {{invalid feature combination: +avx512bw +avx10.1-256; will be promoted to avx10.1-512}}
2932
#endif
30-
#endif
31-
32-
#if FEATURE_TEST & 2
33-
__attribute__((target("avx512bw,evex512")))
34-
__mmask64 k64_verify_ok(__mmask64 a) {
35-
// No error emitted if we have "evex512" feature.
36-
return _knot_mask64(a);
37-
}
38-
#if defined(__AVX10_1__) && !defined(__AVX10_1_512__)
39-
// noevex-warning@*:* {{invalid feature combination: +avx512bw +avx10.1-256; will be promoted to avx10.1-512}}
40-
// noevex-warning@*:* {{invalid feature combination: +avx512bw +avx10.1-256; will be promoted to avx10.1-512}}
41-
// noevex-warning@*:* {{invalid feature combination: +avx512bw +avx10.1-256; will be promoted to avx10.1-512}}
42-
// noevex-warning@*:* {{invalid feature combination: +avx512bw +avx10.1-256; will be promoted to avx10.1-512}}
43-
// noevex-warning@*:* {{invalid feature combination: +avx512bw +avx10.1-256; will be promoted to avx10.1-512}}
44-
// noevex-warning@*:* {{invalid feature combination: +avx512bw +avx10.1-256; will be promoted to avx10.1-512}}
45-
#endif
46-
47-
__mmask64 test_knot_mask64(__mmask64 a) {
48-
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'}}
49-
}
50-
#endif

llvm/lib/Target/X86/X86RegisterInfo.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,12 +1077,6 @@ bool X86RegisterInfo::getRegAllocationHints(Register VirtReg,
10771077
VirtReg, Order, Hints, MF, VRM, Matrix);
10781078

10791079
unsigned ID = RC.getID();
1080-
const X86Subtarget &Subtarget = MF.getSubtarget<X86Subtarget>();
1081-
if ((ID == X86::VK64RegClassID || ID == X86::VK64WMRegClassID) &&
1082-
Subtarget.hasAVX512() && !Subtarget.hasEVEX512())
1083-
report_fatal_error(
1084-
"64-bit mask registers are not supported without EVEX512");
1085-
10861080
if (ID != X86::TILERegClassID)
10871081
return BaseImplRetVal;
10881082

0 commit comments

Comments
 (0)