From 2c2dbf45428a807bdec8c77709da59d1dfe23717 Mon Sep 17 00:00:00 2001 From: Juergen Ributzka Date: Sat, 17 Aug 2013 16:40:09 +0000 Subject: [PATCH] Fix the name and the type of the argument for intrinisc _mm256_broadcastsi128_si256 to align with the Intel documentation. This fixes bug PR 16581 and rdar:14747994. llvm-svn: 188609 --- clang/include/clang/Basic/BuiltinsX86.def | 2 +- clang/lib/CodeGen/CGBuiltin.cpp | 10 ++++++++++ clang/lib/Headers/avx2intrin.h | 4 ++-- clang/test/CodeGen/avx2-builtins.c | 4 ++-- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/clang/include/clang/Basic/BuiltinsX86.def b/clang/include/clang/Basic/BuiltinsX86.def index d536821d55d9..cfa38fbff15d 100644 --- a/clang/include/clang/Basic/BuiltinsX86.def +++ b/clang/include/clang/Basic/BuiltinsX86.def @@ -559,7 +559,7 @@ BUILTIN(__builtin_ia32_movntdqa256, "V4LLiV4LLi*", "") BUILTIN(__builtin_ia32_vbroadcastss_ps, "V4fV4f", "") BUILTIN(__builtin_ia32_vbroadcastss_ps256, "V8fV4f", "") BUILTIN(__builtin_ia32_vbroadcastsd_pd256, "V4dV2d", "") -BUILTIN(__builtin_ia32_vbroadcastsi256, "V4LLiV2LLiC*", "") +BUILTIN(__builtin_ia32_vbroadcastsi256, "V4LLiV2LLi", "") BUILTIN(__builtin_ia32_pblendd128, "V4iV4iV4iIi", "") BUILTIN(__builtin_ia32_pblendd256, "V8iV8iV8iIi", "") BUILTIN(__builtin_ia32_pbroadcastb256, "V32cV16c", "") diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 56abba3c5e9f..7f3fb9c448e2 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -3129,6 +3129,16 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, Builder.CreateStore(Builder.CreateExtractValue(Call, 0), Ops[0]); return Builder.CreateExtractValue(Call, 1); } + // AVX2 broadcast + case X86::BI__builtin_ia32_vbroadcastsi256: { + llvm::Type *VecTy = llvm::VectorType::get(Int64Ty, 2); + llvm::Type *PtrTy = Int8PtrTy; + Value *One = llvm::ConstantInt::get(Int32Ty, 1); + Value *Tmp = Builder.CreateAlloca(VecTy, One); + Builder.CreateStore(Ops[0], Tmp); + return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_avx2_vbroadcasti128), + Builder.CreateBitCast(Tmp, PtrTy)); + } } } diff --git a/clang/lib/Headers/avx2intrin.h b/clang/lib/Headers/avx2intrin.h index 1887fc80e630..69826c5b8e08 100644 --- a/clang/lib/Headers/avx2intrin.h +++ b/clang/lib/Headers/avx2intrin.h @@ -753,9 +753,9 @@ _mm256_broadcastsd_pd(__m128d __X) } static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) -_mm_broadcastsi128_si256(__m128i const *__a) +_mm256_broadcastsi128_si256(__m128i __X) { - return (__m256i)__builtin_ia32_vbroadcastsi256(__a); + return (__m256i)__builtin_ia32_vbroadcastsi256(__X); } #define _mm_blend_epi32(V1, V2, M) __extension__ ({ \ diff --git a/clang/test/CodeGen/avx2-builtins.c b/clang/test/CodeGen/avx2-builtins.c index b5bc60503173..1ff14f4e0eb6 100644 --- a/clang/test/CodeGen/avx2-builtins.c +++ b/clang/test/CodeGen/avx2-builtins.c @@ -606,9 +606,9 @@ __m256d test_mm256_broadcastsd_pd(__m128d a) { return _mm256_broadcastsd_pd(a); } -__m256i test_mm_broadcastsi128_si256(__m128i *a) { +__m256i test_mm256_broadcastsi128_si256(__m128i a) { // CHECK: @llvm.x86.avx2.vbroadcasti128 - return _mm_broadcastsi128_si256(a); + return _mm256_broadcastsi128_si256(a); } __m128i test_mm_blend_epi32(__m128i a, __m128i b) {