]> granicus.if.org Git - llvm/commitdiff
[X86][IR] Simplify the XOP vpcmov autoupgrade code. NFC
authorCraig Topper <craig.topper@gmail.com>
Sat, 18 Feb 2017 19:51:19 +0000 (19:51 +0000)
committerCraig Topper <craig.topper@gmail.com>
Sat, 18 Feb 2017 19:51:19 +0000 (19:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@295563 91177308-0d34-0410-b5e6-96231b3b80d8

lib/IR/AutoUpgrade.cpp

index 099acbf0e7837446cd0c823debe8728d070af863..977a61f0542b554e376bccb91e3fabbbeb9b8dbd 100644 (file)
@@ -1079,14 +1079,10 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) {
           Builder.CreateCall(VPCOM, {CI->getArgOperand(0), CI->getArgOperand(1),
                                      Builder.getInt8(Imm)});
     } else if (IsX86 && Name == "xop.vpcmov") {
-      Value *Arg0 = CI->getArgOperand(0);
-      Value *Arg1 = CI->getArgOperand(1);
       Value *Sel = CI->getArgOperand(2);
-      unsigned NumElts = CI->getType()->getVectorNumElements();
-      Constant *MinusOne = ConstantVector::getSplat(NumElts, Builder.getInt64(-1));
-      Value *NotSel = Builder.CreateXor(Sel, MinusOne);
-      Value *Sel0 = Builder.CreateAnd(Arg0, Sel);
-      Value *Sel1 = Builder.CreateAnd(Arg1, NotSel);
+      Value *NotSel = Builder.CreateNot(Sel);
+      Value *Sel0 = Builder.CreateAnd(CI->getArgOperand(0), Sel);
+      Value *Sel1 = Builder.CreateAnd(CI->getArgOperand(1), NotSel);
       Rep = Builder.CreateOr(Sel0, Sel1);
     } else if (IsX86 && Name == "sse42.crc32.64.8") {
       Function *CRC32 = Intrinsic::getDeclaration(F->getParent(),