diff --git a/clang/include/clang/Basic/BuiltinsX86.def b/clang/include/clang/Basic/BuiltinsX86.def index c13fdb082dc1..5aa2c1bd5b39 100644 --- a/clang/include/clang/Basic/BuiltinsX86.def +++ b/clang/include/clang/Basic/BuiltinsX86.def @@ -562,5 +562,18 @@ BUILTIN(__builtin_ia32_vbroadcastsd_pd256, "V4dV2d", "") BUILTIN(__builtin_ia32_vbroadcastsi256, "V4LLiV2LLiC*", "") BUILTIN(__builtin_ia32_pblendd128, "V4iV4iV4iIi", "") BUILTIN(__builtin_ia32_pblendd256, "V8iV8iV8iIi", "") +BUILTIN(__builtin_ia32_pbroadcastb256, "V32cV16c", "") +BUILTIN(__builtin_ia32_pbroadcastw256, "V16sV8s", "") +BUILTIN(__builtin_ia32_pbroadcastd256, "V8iV4i", "") +BUILTIN(__builtin_ia32_pbroadcastq256, "V4LLiV2LLi", "") +BUILTIN(__builtin_ia32_pbroadcastb128, "V16cV16c", "") +BUILTIN(__builtin_ia32_pbroadcastw128, "V8sV8s", "") +BUILTIN(__builtin_ia32_pbroadcastd128, "V4iV4i", "") +BUILTIN(__builtin_ia32_pbroadcastq128, "V2LLiV2LLi", "") +BUILTIN(__builtin_ia32_permvarsi256, "V8iV8iV8i", "") +BUILTIN(__builtin_ia32_permdf256, "V4dV4dIc", "") +BUILTIN(__builtin_ia32_permvarsf256, "V8fV8fV8f", "") +BUILTIN(__builtin_ia32_permdi256, "V4LLiV4LLiIc", "") +BUILTIN(__builtin_ia32_permti256, "V4LLiV4LLiV4LLiIc", "") #undef BUILTIN diff --git a/clang/test/CodeGen/avx2-builtins.c b/clang/test/CodeGen/avx2-builtins.c index dc9c5009c642..caa27f639d0a 100644 --- a/clang/test/CodeGen/avx2-builtins.c +++ b/clang/test/CodeGen/avx2-builtins.c @@ -597,7 +597,7 @@ __m256 test_mm256_broadcastss_ps(__m128 a) { } __m256d test_mm256_broadcastsd_pd(__m128d a) { - // CHECK: @llvm.x86.avx2.vbroadcast.sd.pd.256 + // check: @llvm.x86.avx2.vbroadcast.sd.pd.256 return _mm256_broadcastsd_pd(a); } @@ -615,3 +615,68 @@ __m256i test_mm256_blend_epi32(__m256i a, __m256i b) { // CHECK: @llvm.x86.avx2.pblendd.256 return _mm256_blend_epi32(a, b, 57); } + +__m256i test_mm256_broadcastb_epi8(__m128i a) { + // CHECK: @llvm.x86.avx2.pbroadcastb.256 + return _mm256_broadcastb_epi8(a); +} + +__m256i test_mm256_broadcastw_epi16(__m128i a) { + // CHECK: @llvm.x86.avx2.pbroadcastw.256 + return _mm256_broadcastw_epi16(a); +} + +__m256i test_mm256_broadcastd_epi32(__m128i a) { + // CHECK: @llvm.x86.avx2.pbroadcastd.256 + return _mm256_broadcastd_epi32(a); +} + +__m256i test_mm256_broadcastq_epi64(__m128i a) { + // CHECK: @llvm.x86.avx2.pbroadcastq.256 + return _mm256_broadcastq_epi64(a); +} + +__m128i test_mm_broadcastb_epi8(__m128i a) { + // CHECK: @llvm.x86.avx2.pbroadcastb.128 + return _mm_broadcastb_epi8(a); +} + +__m128i test_mm_broadcastw_epi16(__m128i a) { + // CHECK: @llvm.x86.avx2.pbroadcastw.128 + return _mm_broadcastw_epi16(a); +} + +__m128i test_mm_broadcastd_epi32(__m128i a) { + // CHECK: @llvm.x86.avx2.pbroadcastd.128 + return _mm_broadcastd_epi32(a); +} + +__m128i test_mm_broadcastq_epi64(__m128i a) { + // CHECK: @llvm.x86.avx2.pbroadcastq.128 + return _mm_broadcastq_epi64(a); +} + +__m256i test_mm256_permutevar8x32_epi32(__m256i a, __m256i b) { + // CHECK: @llvm.x86.avx2.permd + return _mm256_permutevar8x32_epi32(a, b); +} + +__m256d test_mm256_permute4x64_pd(__m256d a) { + // CHECK: @llvm.x86.avx2.permpd + return _mm256_permute4x64_pd(a, 25); +} + +__m256 test_mm256_permutevar8x32_ps(__m256 a, __m256 b) { + // CHECK: @llvm.x86.avx2.permps + return _mm256_permutevar8x32_ps(a, b); +} + +__m256i test_mm256_permute4x64_epi64(__m256i a) { + // CHECK: @llvm.x86.avx2.permq + return _mm256_permute4x64_epi64(a, 35); +} + +__m256i test_mm256_permute2x128_si256(__m256i a, __m256i b) { + // CHECK: @llvm.x86.avx2.vperm2i128 + return _mm256_permute2x128_si256(a, b, 94); +}