summaryrefslogtreecommitdiffstats
path: root/llvm/lib/IR/AutoUpgrade.cpp
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2018-06-13 07:19:21 +0000
committerCraig Topper <craig.topper@intel.com>2018-06-13 07:19:21 +0000
commit3829d258ee1824dd9ad49b4b2b45cb72478bfa96 (patch)
tree76bef3cde5594e9e6876230b82bb6d1a435dcfe4 /llvm/lib/IR/AutoUpgrade.cpp
parent7252e2a8bd4e0f08d94d6ee26a08c4299b9f3fa6 (diff)
downloadbcm5719-llvm-3829d258ee1824dd9ad49b4b2b45cb72478bfa96.tar.gz
bcm5719-llvm-3829d258ee1824dd9ad49b4b2b45cb72478bfa96.zip
[X86] Remove masking from avx512vbmi2 concat and shift by immediate intrinsics. Use select in IR instead.
llvm-svn: 334576
Diffstat (limited to 'llvm/lib/IR/AutoUpgrade.cpp')
-rw-r--r--llvm/lib/IR/AutoUpgrade.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp
index 2bec93fc3c8..ee8a0c3b12b 100644
--- a/llvm/lib/IR/AutoUpgrade.cpp
+++ b/llvm/lib/IR/AutoUpgrade.cpp
@@ -263,6 +263,8 @@ static bool ShouldUpgradeX86Intrinsic(Function *F, StringRef Name) {
Name.startswith("avx512.mask.vpdpwssds.") || // Added in 7.0
Name.startswith("avx512.maskz.vpdpwssds.") || // Added in 7.0
Name.startswith("avx512.mask.dbpsadbw.") || // Added in 7.0
+ Name.startswith("avx512.mask.vpshld.") || // Added in 7.0
+ Name.startswith("avx512.mask.vpshrd.") || // Added in 7.0
Name.startswith("avx512.mask.add.p") || // Added in 7.0
Name.startswith("avx512.mask.sub.p") || // Added in 7.0
Name.startswith("avx512.mask.mul.p") || // Added in 7.0
@@ -1258,6 +1260,48 @@ static bool upgradeAVX512MaskToSelect(StringRef Name, IRBuilder<> &Builder,
IID = Intrinsic::x86_avx512_dbpsadbw_512;
else
llvm_unreachable("Unexpected intrinsic");
+ } else if (Name.startswith("vpshld.")) {
+ if (VecWidth == 128 && Name[7] == 'q')
+ IID = Intrinsic::x86_avx512_vpshld_q_128;
+ else if (VecWidth == 128 && Name[7] == 'd')
+ IID = Intrinsic::x86_avx512_vpshld_d_128;
+ else if (VecWidth == 128 && Name[7] == 'w')
+ IID = Intrinsic::x86_avx512_vpshld_w_128;
+ else if (VecWidth == 256 && Name[7] == 'q')
+ IID = Intrinsic::x86_avx512_vpshld_q_256;
+ else if (VecWidth == 256 && Name[7] == 'd')
+ IID = Intrinsic::x86_avx512_vpshld_d_256;
+ else if (VecWidth == 256 && Name[7] == 'w')
+ IID = Intrinsic::x86_avx512_vpshld_w_256;
+ else if (VecWidth == 512 && Name[7] == 'q')
+ IID = Intrinsic::x86_avx512_vpshld_q_512;
+ else if (VecWidth == 512 && Name[7] == 'd')
+ IID = Intrinsic::x86_avx512_vpshld_d_512;
+ else if (VecWidth == 512 && Name[7] == 'w')
+ IID = Intrinsic::x86_avx512_vpshld_w_512;
+ else
+ llvm_unreachable("Unexpected intrinsic");
+ } else if (Name.startswith("vpshrd.")) {
+ if (VecWidth == 128 && Name[7] == 'q')
+ IID = Intrinsic::x86_avx512_vpshrd_q_128;
+ else if (VecWidth == 128 && Name[7] == 'd')
+ IID = Intrinsic::x86_avx512_vpshrd_d_128;
+ else if (VecWidth == 128 && Name[7] == 'w')
+ IID = Intrinsic::x86_avx512_vpshrd_w_128;
+ else if (VecWidth == 256 && Name[7] == 'q')
+ IID = Intrinsic::x86_avx512_vpshrd_q_256;
+ else if (VecWidth == 256 && Name[7] == 'd')
+ IID = Intrinsic::x86_avx512_vpshrd_d_256;
+ else if (VecWidth == 256 && Name[7] == 'w')
+ IID = Intrinsic::x86_avx512_vpshrd_w_256;
+ else if (VecWidth == 512 && Name[7] == 'q')
+ IID = Intrinsic::x86_avx512_vpshrd_q_512;
+ else if (VecWidth == 512 && Name[7] == 'd')
+ IID = Intrinsic::x86_avx512_vpshrd_d_512;
+ else if (VecWidth == 512 && Name[7] == 'w')
+ IID = Intrinsic::x86_avx512_vpshrd_w_512;
+ else
+ llvm_unreachable("Unexpected intrinsic");
} else
return false;
OpenPOWER on IntegriCloud