Skip to content

Commit 1c36697

Browse files
mikolaj-pirogtstellar
authored andcommitted
[AVX10.2] Fix wrong mask casting in some convert intrinsics (#126627)
Found during work on #120927. This caused the compiler to silently drop ignore half of the mask in the specific intrinsics. (cherry picked from commit af522c5)
1 parent ac97cff commit 1c36697

File tree

2 files changed

+16
-16
lines changed

2 files changed

+16
-16
lines changed

clang/lib/Headers/avx10_2convertintrin.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -260,13 +260,13 @@ static __inline__ __m256i __DEFAULT_FN_ATTRS256 _mm256_cvt2ph_bf8(__m256h __A,
260260
static __inline__ __m256i __DEFAULT_FN_ATTRS256
261261
_mm256_mask_cvt2ph_bf8(__m256i __W, __mmask32 __U, __m256h __A, __m256h __B) {
262262
return (__m256i)__builtin_ia32_selectb_256(
263-
(__mmask16)__U, (__v32qi)_mm256_cvt2ph_bf8(__A, __B), (__v32qi)__W);
263+
(__mmask32)__U, (__v32qi)_mm256_cvt2ph_bf8(__A, __B), (__v32qi)__W);
264264
}
265265

266266
static __inline__ __m256i __DEFAULT_FN_ATTRS256
267267
_mm256_maskz_cvt2ph_bf8(__mmask32 __U, __m256h __A, __m256h __B) {
268268
return (__m256i)__builtin_ia32_selectb_256(
269-
(__mmask16)__U, (__v32qi)_mm256_cvt2ph_bf8(__A, __B),
269+
(__mmask32)__U, (__v32qi)_mm256_cvt2ph_bf8(__A, __B),
270270
(__v32qi)(__m256i)_mm256_setzero_si256());
271271
}
272272

@@ -297,13 +297,13 @@ _mm256_cvts2ph_bf8(__m256h __A, __m256h __B) {
297297
static __inline__ __m256i __DEFAULT_FN_ATTRS256
298298
_mm256_mask_cvts2ph_bf8(__m256i __W, __mmask32 __U, __m256h __A, __m256h __B) {
299299
return (__m256i)__builtin_ia32_selectb_256(
300-
(__mmask16)__U, (__v32qi)_mm256_cvts2ph_bf8(__A, __B), (__v32qi)__W);
300+
(__mmask32)__U, (__v32qi)_mm256_cvts2ph_bf8(__A, __B), (__v32qi)__W);
301301
}
302302

303303
static __inline__ __m256i __DEFAULT_FN_ATTRS256
304304
_mm256_maskz_cvts2ph_bf8(__mmask32 __U, __m256h __A, __m256h __B) {
305305
return (__m256i)__builtin_ia32_selectb_256(
306-
(__mmask16)__U, (__v32qi)_mm256_cvts2ph_bf8(__A, __B),
306+
(__mmask32)__U, (__v32qi)_mm256_cvts2ph_bf8(__A, __B),
307307
(__v32qi)(__m256i)_mm256_setzero_si256());
308308
}
309309

@@ -334,13 +334,13 @@ static __inline__ __m256i __DEFAULT_FN_ATTRS256 _mm256_cvt2ph_hf8(__m256h __A,
334334
static __inline__ __m256i __DEFAULT_FN_ATTRS256
335335
_mm256_mask_cvt2ph_hf8(__m256i __W, __mmask32 __U, __m256h __A, __m256h __B) {
336336
return (__m256i)__builtin_ia32_selectb_256(
337-
(__mmask16)__U, (__v32qi)_mm256_cvt2ph_hf8(__A, __B), (__v32qi)__W);
337+
(__mmask32)__U, (__v32qi)_mm256_cvt2ph_hf8(__A, __B), (__v32qi)__W);
338338
}
339339

340340
static __inline__ __m256i __DEFAULT_FN_ATTRS256
341341
_mm256_maskz_cvt2ph_hf8(__mmask32 __U, __m256h __A, __m256h __B) {
342342
return (__m256i)__builtin_ia32_selectb_256(
343-
(__mmask16)__U, (__v32qi)_mm256_cvt2ph_hf8(__A, __B),
343+
(__mmask32)__U, (__v32qi)_mm256_cvt2ph_hf8(__A, __B),
344344
(__v32qi)(__m256i)_mm256_setzero_si256());
345345
}
346346

@@ -371,13 +371,13 @@ _mm256_cvts2ph_hf8(__m256h __A, __m256h __B) {
371371
static __inline__ __m256i __DEFAULT_FN_ATTRS256
372372
_mm256_mask_cvts2ph_hf8(__m256i __W, __mmask32 __U, __m256h __A, __m256h __B) {
373373
return (__m256i)__builtin_ia32_selectb_256(
374-
(__mmask16)__U, (__v32qi)_mm256_cvts2ph_hf8(__A, __B), (__v32qi)__W);
374+
(__mmask32)__U, (__v32qi)_mm256_cvts2ph_hf8(__A, __B), (__v32qi)__W);
375375
}
376376

377377
static __inline__ __m256i __DEFAULT_FN_ATTRS256
378378
_mm256_maskz_cvts2ph_hf8(__mmask32 __U, __m256h __A, __m256h __B) {
379379
return (__m256i)__builtin_ia32_selectb_256(
380-
(__mmask16)__U, (__v32qi)_mm256_cvts2ph_hf8(__A, __B),
380+
(__mmask32)__U, (__v32qi)_mm256_cvts2ph_hf8(__A, __B),
381381
(__v32qi)(__m256i)_mm256_setzero_si256());
382382
}
383383

clang/test/CodeGen/X86/avx10_2convert-builtins.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -231,15 +231,15 @@ __m256i test_mm256_cvt2ph_bf8(__m256h __A, __m256h __B) {
231231
return _mm256_cvt2ph_bf8(__A, __B);
232232
}
233233

234-
__m256i test_mm256_mask_cvt2ph_bf8(__m256i __W, __mmask16 __U, __m256h __A, __m256h __B) {
234+
__m256i test_mm256_mask_cvt2ph_bf8(__m256i __W, __mmask32 __U, __m256h __A, __m256h __B) {
235235
// CHECK-LABEL: @test_mm256_mask_cvt2ph_bf8(
236236
// CHECK: call <32 x i8> @llvm.x86.avx10.vcvt2ph2bf8256(
237237
// CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
238238
// CHECK: ret <4 x i64> %{{.*}}
239239
return _mm256_mask_cvt2ph_bf8(__W, __U, __A, __B);
240240
}
241241

242-
__m256i test_mm256_maskz_cvt2ph_bf8(__mmask16 __U, __m256h __A, __m256h __B) {
242+
__m256i test_mm256_maskz_cvt2ph_bf8(__mmask32 __U, __m256h __A, __m256h __B) {
243243
// CHECK-LABEL: @test_mm256_maskz_cvt2ph_bf8(
244244
// CHECK: call <32 x i8> @llvm.x86.avx10.vcvt2ph2bf8256(
245245
// CHECK: zeroinitializer
@@ -275,15 +275,15 @@ __m256i test_mm256_cvts2ph_bf8(__m256h __A, __m256h __B) {
275275
return _mm256_cvts2ph_bf8(__A, __B);
276276
}
277277

278-
__m256i test_mm256_mask_cvts2ph_bf8(__m256i __W, __mmask16 __U, __m256h __A, __m256h __B) {
278+
__m256i test_mm256_mask_cvts2ph_bf8(__m256i __W, __mmask32 __U, __m256h __A, __m256h __B) {
279279
// CHECK-LABEL: @test_mm256_mask_cvts2ph_bf8(
280280
// CHECK: call <32 x i8> @llvm.x86.avx10.vcvt2ph2bf8s256(
281281
// CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
282282
// CHECK: ret <4 x i64> %{{.*}}
283283
return _mm256_mask_cvts2ph_bf8(__W, __U, __A, __B);
284284
}
285285

286-
__m256i test_mm256_maskz_cvts2ph_bf8(__mmask16 __U, __m256h __A, __m256h __B) {
286+
__m256i test_mm256_maskz_cvts2ph_bf8(__mmask32 __U, __m256h __A, __m256h __B) {
287287
// CHECK-LABEL: @test_mm256_maskz_cvts2ph_bf8(
288288
// CHECK: call <32 x i8> @llvm.x86.avx10.vcvt2ph2bf8s256(
289289
// CHECK: zeroinitializer
@@ -319,15 +319,15 @@ __m256i test_mm256_cvt2ph_hf8(__m256h __A, __m256h __B) {
319319
return _mm256_cvt2ph_hf8(__A, __B);
320320
}
321321

322-
__m256i test_mm256_mask_cvt2ph_hf8(__m256i __W, __mmask16 __U, __m256h __A, __m256h __B) {
322+
__m256i test_mm256_mask_cvt2ph_hf8(__m256i __W, __mmask32 __U, __m256h __A, __m256h __B) {
323323
// CHECK-LABEL: @test_mm256_mask_cvt2ph_hf8(
324324
// CHECK: call <32 x i8> @llvm.x86.avx10.vcvt2ph2hf8256(
325325
// CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
326326
// CHECK: ret <4 x i64> %{{.*}}
327327
return _mm256_mask_cvt2ph_hf8(__W, __U, __A, __B);
328328
}
329329

330-
__m256i test_mm256_maskz_cvt2ph_hf8(__mmask16 __U, __m256h __A, __m256h __B) {
330+
__m256i test_mm256_maskz_cvt2ph_hf8(__mmask32 __U, __m256h __A, __m256h __B) {
331331
// CHECK-LABEL: @test_mm256_maskz_cvt2ph_hf8(
332332
// CHECK: call <32 x i8> @llvm.x86.avx10.vcvt2ph2hf8256(
333333
// CHECK: zeroinitializer
@@ -363,15 +363,15 @@ __m256i test_mm256_cvts2ph_hf8(__m256h __A, __m256h __B) {
363363
return _mm256_cvts2ph_hf8(__A, __B);
364364
}
365365

366-
__m256i test_mm256_mask_cvts2ph_hf8(__m256i __W, __mmask16 __U, __m256h __A, __m256h __B) {
366+
__m256i test_mm256_mask_cvts2ph_hf8(__m256i __W, __mmask32 __U, __m256h __A, __m256h __B) {
367367
// CHECK-LABEL: @test_mm256_mask_cvts2ph_hf8(
368368
// CHECK: call <32 x i8> @llvm.x86.avx10.vcvt2ph2hf8s256(
369369
// CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
370370
// CHECK: ret <4 x i64> %{{.*}}
371371
return _mm256_mask_cvts2ph_hf8(__W, __U, __A, __B);
372372
}
373373

374-
__m256i test_mm256_maskz_cvts2ph_hf8(__mmask16 __U, __m256h __A, __m256h __B) {
374+
__m256i test_mm256_maskz_cvts2ph_hf8(__mmask32 __U, __m256h __A, __m256h __B) {
375375
// CHECK-LABEL: @test_mm256_maskz_cvts2ph_hf8(
376376
// CHECK: call <32 x i8> @llvm.x86.avx10.vcvt2ph2hf8s256(
377377
// CHECK: zeroinitializer

0 commit comments

Comments
 (0)