Skip to content

Commit 04370d3

Browse files
committedSep 15, 2017
[X86] Disable _mm512_maskz_set1_epi64 intrinsic on 32-bit targets to prevent a backend isel failure.
The __builtin_ia32_pbroadcastq512_mem_mask we were previously trying to use in 32-bit mode is not implemented in the x86 backend and causes isel to fail in release builds. In debug builds it fails even earlier during legalization with an llvm_unreachable. While there add the missing test case for this intrinsic for this for 64-bit mode. This fixes PR34631. D37668 should be able to recover this for 32-bit mode soon. But I wanted to fix the crash ahead of that. llvm-svn: 313392
1 parent d13d61f commit 04370d3

File tree

3 files changed

+9
-8
lines changed

3 files changed

+9
-8
lines changed
 

‎clang/include/clang/Basic/BuiltinsX86.def

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -974,7 +974,6 @@ TARGET_BUILTIN(__builtin_ia32_pmuludq512, "V8LLiV16iV16i", "", "avx512f")
974974
TARGET_BUILTIN(__builtin_ia32_ptestmd512, "UsV16iV16iUs", "", "avx512f")
975975
TARGET_BUILTIN(__builtin_ia32_ptestmq512, "UcV8LLiV8LLiUc", "", "avx512f")
976976
TARGET_BUILTIN(__builtin_ia32_pbroadcastd512_gpr_mask, "V16iiV16iUs", "", "avx512f")
977-
TARGET_BUILTIN(__builtin_ia32_pbroadcastq512_mem_mask, "V8LLiLLiV8LLiUc", "", "avx512f")
978977
TARGET_BUILTIN(__builtin_ia32_loaddqusi512_mask, "V16iiC*V16iUs", "", "avx512f")
979978
TARGET_BUILTIN(__builtin_ia32_loaddqudi512_mask, "V8LLiLLiC*V8LLiUc", "", "avx512f")
980979
TARGET_BUILTIN(__builtin_ia32_loadups512_mask, "V16ffC*V16fUs", "", "avx512f")

‎clang/lib/Headers/avx512fintrin.h

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -267,21 +267,16 @@ _mm512_maskz_set1_epi32(__mmask16 __M, int __A)
267267
__M);
268268
}
269269

270+
#ifdef __x86_64__
270271
static __inline __m512i __DEFAULT_FN_ATTRS
271272
_mm512_maskz_set1_epi64(__mmask8 __M, long long __A)
272273
{
273-
#ifdef __x86_64__
274274
return (__m512i) __builtin_ia32_pbroadcastq512_gpr_mask (__A,
275275
(__v8di)
276276
_mm512_setzero_si512 (),
277277
__M);
278-
#else
279-
return (__m512i) __builtin_ia32_pbroadcastq512_mem_mask (__A,
280-
(__v8di)
281-
_mm512_setzero_si512 (),
282-
__M);
283-
#endif
284278
}
279+
#endif
285280

286281
static __inline __m512 __DEFAULT_FN_ATTRS
287282
_mm512_setzero_ps(void)

‎clang/test/CodeGen/avx512f-builtins.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7935,6 +7935,13 @@ __m512i test_mm512_mask_set1_epi64 (__m512i __O, __mmask8 __M, long long __A)
79357935
//CHECK: @llvm.x86.avx512.mask.pbroadcast.q.gpr.512
79367936
return _mm512_mask_set1_epi64 (__O, __M, __A);
79377937
}
7938+
7939+
__m512i test_mm512_maskz_set1_epi64 (__mmask8 __M, long long __A)
7940+
{
7941+
//CHECK-LABEL: @test_mm512_maskz_set1_epi64
7942+
//CHECK: @llvm.x86.avx512.mask.pbroadcast.q.gpr.512
7943+
return _mm512_maskz_set1_epi64 (__M, __A);
7944+
}
79387945
#endif
79397946

79407947
__m512i test_mm512_set_epi64 (long long __A, long long __B, long long __C,

0 commit comments

Comments
 (0)
Please sign in to comment.