diff options
| author | Juergen Ributzka <juergen@apple.com> | 2015-03-04 00:13:25 +0000 |
|---|---|---|
| committer | Juergen Ributzka <juergen@apple.com> | 2015-03-04 00:13:25 +0000 |
| commit | 1f7a17661cb617a1bd82aa72977bca288a2d7f9d (patch) | |
| tree | 300480e2e6669162bfac684d60ed3c19f5e58920 /llvm/lib | |
| parent | 5a2ab2bb932d94eb350f809693a48d05e4a7eea6 (diff) | |
| download | bcm5719-llvm-1f7a17661cb617a1bd82aa72977bca288a2d7f9d.tar.gz bcm5719-llvm-1f7a17661cb617a1bd82aa72977bca288a2d7f9d.zip | |
Remove 'llvm.x86.avx2.vbroadcasti128' intrinsic.
The intrinsic is no longer generated by the front-end. Remove the intrinsic and
auto-upgrade it to a vector shuffle.
Reviewed by Nadav
This is related to rdar://problem/18742778.
llvm-svn: 231182
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/IR/AutoUpgrade.cpp | 12 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrSSE.td | 5 |
2 files changed, 12 insertions, 5 deletions
diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp index 8306a1afeed..6800e7a0a13 100644 --- a/llvm/lib/IR/AutoUpgrade.cpp +++ b/llvm/lib/IR/AutoUpgrade.cpp @@ -179,6 +179,7 @@ static bool UpgradeIntrinsicFunction1(Function *F, Function *&NewFn) { Name == "x86.avx2.pblendw" || Name == "x86.avx2.pblendd.128" || Name == "x86.avx2.pblendd.256" || + Name == "x86.avx2.vbroadcasti128" || (Name.startswith("x86.xop.vpcom") && F->arg_size() == 2)) { NewFn = nullptr; return true; @@ -553,6 +554,17 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) { for (unsigned I = 0; I < EltNum; ++I) Rep = Builder.CreateInsertElement(Rep, Load, ConstantInt::get(I32Ty, I)); + } else if (Name == "llvm.x86.avx2.vbroadcasti128") { + // Replace vbroadcasts with a vector shuffle. + Value *Op = Builder.CreatePointerCast( + CI->getArgOperand(0), + PointerType::getUnqual(VectorType::get(Type::getInt64Ty(C), 2))); + Value *Load = Builder.CreateLoad(Op); + SmallVector<Constant *, 4> Idxs; // 0, 1, 0, 1. + for (unsigned i = 0; i != 4; ++i) + Idxs.push_back(Builder.getInt32(i & 1)); + Rep = Builder.CreateShuffleVector(Load, UndefValue::get(Load->getType()), + ConstantVector::get(Idxs)); } else if (Name == "llvm.x86.sse2.psll.dq") { // 128-bit shift left specified in bits. unsigned Shift = cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue(); diff --git a/llvm/lib/Target/X86/X86InstrSSE.td b/llvm/lib/Target/X86/X86InstrSSE.td index 8e8bdb60d2b..6d3cfd5cebe 100644 --- a/llvm/lib/Target/X86/X86InstrSSE.td +++ b/llvm/lib/Target/X86/X86InstrSSE.td @@ -7834,11 +7834,6 @@ def VBROADCASTSDYrr : avx2_broadcast_reg<0x19, "vbroadcastsd", VR256, int_x86_avx2_vbroadcast_sd_pd_256, WriteFShuffle256>, VEX_L; -let Predicates = [HasAVX2] in -def VBROADCASTI128 : avx_broadcast<0x5A, "vbroadcasti128", VR256, i128mem, - int_x86_avx2_vbroadcasti128, WriteLoad>, - VEX_L; - let Predicates = [HasAVX] in def : Pat<(int_x86_avx_vbroadcastf128_ps_256 addr:$src), (VBROADCASTF128 addr:$src)>; |

