diff options
author | Craig Topper <craig.topper@intel.com> | 2017-09-15 20:27:59 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@intel.com> | 2017-09-15 20:27:59 +0000 |
commit | 04370d3a820f65ac91faae9eb026ddea33b4f16e (patch) | |
tree | e3b286f05442a8228073e6a00b0985df5abd0914 | |
parent | d13d61fdb4166236c77893e08a5c60c0bfa0dc0c (diff) | |
download | bcm5719-llvm-04370d3a820f65ac91faae9eb026ddea33b4f16e.tar.gz bcm5719-llvm-04370d3a820f65ac91faae9eb026ddea33b4f16e.zip |
[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
-rw-r--r-- | clang/include/clang/Basic/BuiltinsX86.def | 1 | ||||
-rw-r--r-- | clang/lib/Headers/avx512fintrin.h | 9 | ||||
-rw-r--r-- | clang/test/CodeGen/avx512f-builtins.c | 7 |
3 files changed, 9 insertions, 8 deletions
diff --git a/clang/include/clang/Basic/BuiltinsX86.def b/clang/include/clang/Basic/BuiltinsX86.def index 6bfb180409d..e73cc9b9b79 100644 --- a/clang/include/clang/Basic/BuiltinsX86.def +++ b/clang/include/clang/Basic/BuiltinsX86.def @@ -974,7 +974,6 @@ TARGET_BUILTIN(__builtin_ia32_pmuludq512, "V8LLiV16iV16i", "", "avx512f") TARGET_BUILTIN(__builtin_ia32_ptestmd512, "UsV16iV16iUs", "", "avx512f") TARGET_BUILTIN(__builtin_ia32_ptestmq512, "UcV8LLiV8LLiUc", "", "avx512f") TARGET_BUILTIN(__builtin_ia32_pbroadcastd512_gpr_mask, "V16iiV16iUs", "", "avx512f") -TARGET_BUILTIN(__builtin_ia32_pbroadcastq512_mem_mask, "V8LLiLLiV8LLiUc", "", "avx512f") TARGET_BUILTIN(__builtin_ia32_loaddqusi512_mask, "V16iiC*V16iUs", "", "avx512f") TARGET_BUILTIN(__builtin_ia32_loaddqudi512_mask, "V8LLiLLiC*V8LLiUc", "", "avx512f") TARGET_BUILTIN(__builtin_ia32_loadups512_mask, "V16ffC*V16fUs", "", "avx512f") diff --git a/clang/lib/Headers/avx512fintrin.h b/clang/lib/Headers/avx512fintrin.h index 2b4497a1ce4..8ec3aa4c826 100644 --- a/clang/lib/Headers/avx512fintrin.h +++ b/clang/lib/Headers/avx512fintrin.h @@ -267,21 +267,16 @@ _mm512_maskz_set1_epi32(__mmask16 __M, int __A) __M); } +#ifdef __x86_64__ static __inline __m512i __DEFAULT_FN_ATTRS _mm512_maskz_set1_epi64(__mmask8 __M, long long __A) { -#ifdef __x86_64__ return (__m512i) __builtin_ia32_pbroadcastq512_gpr_mask (__A, (__v8di) _mm512_setzero_si512 (), __M); -#else - return (__m512i) __builtin_ia32_pbroadcastq512_mem_mask (__A, - (__v8di) - _mm512_setzero_si512 (), - __M); -#endif } +#endif static __inline __m512 __DEFAULT_FN_ATTRS _mm512_setzero_ps(void) diff --git a/clang/test/CodeGen/avx512f-builtins.c b/clang/test/CodeGen/avx512f-builtins.c index 6e22e4e66e6..381d73ab220 100644 --- a/clang/test/CodeGen/avx512f-builtins.c +++ b/clang/test/CodeGen/avx512f-builtins.c @@ -7935,6 +7935,13 @@ __m512i test_mm512_mask_set1_epi64 (__m512i __O, __mmask8 __M, long long __A) //CHECK: @llvm.x86.avx512.mask.pbroadcast.q.gpr.512 return _mm512_mask_set1_epi64 (__O, __M, __A); } + +__m512i test_mm512_maskz_set1_epi64 (__mmask8 __M, long long __A) +{ + //CHECK-LABEL: @test_mm512_maskz_set1_epi64 + //CHECK: @llvm.x86.avx512.mask.pbroadcast.q.gpr.512 + return _mm512_maskz_set1_epi64 (__M, __A); +} #endif __m512i test_mm512_set_epi64 (long long __A, long long __B, long long __C, |