diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-05-27 08:49:15 +0000 | 
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-05-27 08:49:15 +0000 | 
| commit | c013e5737bfe8de742adbc1c937415707c195dc2 (patch) | |
| tree | 070cb0154b207ee708ad5c1becd433f19b81c92c /llvm/lib/Transforms/InstCombine | |
| parent | 85624c5de3e831ffa01fdc2d159e3d69c30de08d (diff) | |
| download | bcm5719-llvm-c013e5737bfe8de742adbc1c937415707c195dc2.tar.gz bcm5719-llvm-c013e5737bfe8de742adbc1c937415707c195dc2.zip  | |
[X86][SSE] Replace (V)PMOVSX and (V)PMOVZX integer extension intrinsics with generic IR (llvm)
This patch removes the llvm intrinsics VPMOVSX and (V)PMOVZX sign/zero extension intrinsics and auto-upgrades to SEXT/ZEXT calls instead. We already did this for SSE41 PMOVSX sometime ago so much of that implementation can be reused.
A companion patch (D20684) removes/auto-upgrade the clang intrinsics.
Differential Revision: http://reviews.llvm.org/D20686
llvm-svn: 270973
Diffstat (limited to 'llvm/lib/Transforms/InstCombine')
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | 44 | 
1 files changed, 0 insertions, 44 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp index c07ca85d3a4..c87d0466a9d 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp @@ -325,24 +325,6 @@ static Value *simplifyX86immShift(const IntrinsicInst &II,    return Builder.CreateAShr(Vec, ShiftVec);  } -static Value *simplifyX86extend(const IntrinsicInst &II, -                                InstCombiner::BuilderTy &Builder, -                                bool SignExtend) { -  VectorType *SrcTy = cast<VectorType>(II.getArgOperand(0)->getType()); -  VectorType *DstTy = cast<VectorType>(II.getType()); -  unsigned NumDstElts = DstTy->getNumElements(); - -  // Extract a subvector of the first NumDstElts lanes and sign/zero extend. -  SmallVector<int, 8> ShuffleMask; -  for (int i = 0; i != (int)NumDstElts; ++i) -    ShuffleMask.push_back(i); - -  Value *SV = Builder.CreateShuffleVector(II.getArgOperand(0), -                                          UndefValue::get(SrcTy), ShuffleMask); -  return SignExtend ? Builder.CreateSExt(SV, DstTy) -                    : Builder.CreateZExt(SV, DstTy); -} -  static Value *simplifyX86insertps(const IntrinsicInst &II,                                    InstCombiner::BuilderTy &Builder) {    auto *CInt = dyn_cast<ConstantInt>(II.getArgOperand(2)); @@ -1649,32 +1631,6 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {      break;    } -  case Intrinsic::x86_avx2_pmovsxbd: -  case Intrinsic::x86_avx2_pmovsxbq: -  case Intrinsic::x86_avx2_pmovsxbw: -  case Intrinsic::x86_avx2_pmovsxdq: -  case Intrinsic::x86_avx2_pmovsxwd: -  case Intrinsic::x86_avx2_pmovsxwq: -    if (Value *V = simplifyX86extend(*II, *Builder, true)) -      return replaceInstUsesWith(*II, V); -    break; - -  case Intrinsic::x86_sse41_pmovzxbd: -  case Intrinsic::x86_sse41_pmovzxbq: -  case Intrinsic::x86_sse41_pmovzxbw: -  case Intrinsic::x86_sse41_pmovzxdq: -  case Intrinsic::x86_sse41_pmovzxwd: -  case Intrinsic::x86_sse41_pmovzxwq: -  case Intrinsic::x86_avx2_pmovzxbd: -  case Intrinsic::x86_avx2_pmovzxbq: -  case Intrinsic::x86_avx2_pmovzxbw: -  case Intrinsic::x86_avx2_pmovzxdq: -  case Intrinsic::x86_avx2_pmovzxwd: -  case Intrinsic::x86_avx2_pmovzxwq: -    if (Value *V = simplifyX86extend(*II, *Builder, false)) -      return replaceInstUsesWith(*II, V); -    break; -    case Intrinsic::x86_sse41_insertps:      if (Value *V = simplifyX86insertps(*II, *Builder))        return replaceInstUsesWith(*II, V);  | 

