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
This commit is contained in:
Juergen Ributzka 2013-08-17 16:40:09 +00:00
parent b4c2fa244a
commit 2c2dbf4542
4 changed files with 15 additions and 5 deletions

View File

@ -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", "")

View File

@ -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));
}
}
}

View File

@ -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__ ({ \

View File

@ -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) {