[AVX512] Remove maksed pshufd, pshuflw, and phufhw intrinsics and autoupgrade them to selects and shufflevector.
llvm-svn: 272527
diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp
index 7b72261..c0b4fd7 100644
--- a/llvm/lib/IR/AutoUpgrade.cpp
+++ b/llvm/lib/IR/AutoUpgrade.cpp
@@ -178,6 +178,9 @@
Name.startswith("x86.avx2.pbroadcast") ||
Name.startswith("x86.avx.vpermil.") ||
Name.startswith("x86.sse2.pshuf") ||
+ Name.startswith("x86.avx512.mask.pshuf.d.") ||
+ Name.startswith("x86.avx512.mask.pshufl.w.") ||
+ Name.startswith("x86.avx512.mask.pshufh.w.") ||
Name.startswith("x86.sse41.pmovsx") ||
Name.startswith("x86.sse41.pmovzx") ||
Name.startswith("x86.avx2.pmovsx") ||
@@ -877,7 +880,8 @@
} else if (Name == "llvm.stackprotectorcheck") {
Rep = nullptr;
} else if (Name.startswith("llvm.x86.avx.vpermil.") ||
- Name == "llvm.x86.sse2.pshuf.d") {
+ Name == "llvm.x86.sse2.pshuf.d" ||
+ Name.startswith("llvm.x86.avx512.mask.pshuf.d.")) {
Value *Op0 = CI->getArgOperand(0);
unsigned Imm = cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue();
VectorType *VecTy = cast<VectorType>(CI->getType());
@@ -894,7 +898,12 @@
Idxs[i] = ((Imm >> ((i * IdxSize) % 8)) & IdxMask) | (i & ~IdxMask);
Rep = Builder.CreateShuffleVector(Op0, Op0, Idxs);
- } else if (Name == "llvm.x86.sse2.pshufl.w") {
+
+ if (CI->getNumArgOperands() == 4)
+ Rep = EmitX86Select(Builder, CI->getArgOperand(3), Rep,
+ CI->getArgOperand(2));
+ } else if (Name == "llvm.x86.sse2.pshufl.w" ||
+ Name.startswith("llvm.x86.avx512.mask.pshufl.w.")) {
Value *Op0 = CI->getArgOperand(0);
unsigned Imm = cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue();
unsigned NumElts = CI->getType()->getVectorNumElements();
@@ -908,7 +917,12 @@
}
Rep = Builder.CreateShuffleVector(Op0, Op0, Idxs);
- } else if (Name == "llvm.x86.sse2.pshufh.w") {
+
+ if (CI->getNumArgOperands() == 4)
+ Rep = EmitX86Select(Builder, CI->getArgOperand(3), Rep,
+ CI->getArgOperand(2));
+ } else if (Name == "llvm.x86.sse2.pshufh.w" ||
+ Name.startswith("llvm.x86.avx512.mask.pshufh.w.")) {
Value *Op0 = CI->getArgOperand(0);
unsigned Imm = cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue();
unsigned NumElts = CI->getType()->getVectorNumElements();
@@ -922,6 +936,10 @@
}
Rep = Builder.CreateShuffleVector(Op0, Op0, Idxs);
+
+ if (CI->getNumArgOperands() == 4)
+ Rep = EmitX86Select(Builder, CI->getArgOperand(3), Rep,
+ CI->getArgOperand(2));
} else {
llvm_unreachable("Unknown function for CallInst upgrade.");
}