summaryrefslogtreecommitdiffstats
path: root/llvm/lib/IR/AutoUpgrade.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/IR/AutoUpgrade.cpp')
-rw-r--r--llvm/lib/IR/AutoUpgrade.cpp54
1 files changed, 42 insertions, 12 deletions
diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp
index 8fbf6f424ee..ae88a285a0e 100644
--- a/llvm/lib/IR/AutoUpgrade.cpp
+++ b/llvm/lib/IR/AutoUpgrade.cpp
@@ -71,12 +71,12 @@ static bool ShouldUpgradeX86Intrinsic(Function *F, StringRef Name) {
// like to use this information to remove upgrade code for some older
// intrinsics. It is currently undecided how we will determine that future
// point.
- if (Name.startswith("sse2.paddus") || // Added in 8.0
- Name.startswith("sse2.psubus") || // Added in 8.0
- Name.startswith("avx2.paddus") || // Added in 8.0
- Name.startswith("avx2.psubus") || // Added in 8.0
- Name.startswith("avx512.mask.paddus") || // Added in 8.0
- Name.startswith("avx512.mask.psubus") || // Added in 8.0
+ if (Name.startswith("sse2.paddus.") || // Added in 8.0
+ Name.startswith("sse2.psubus.") || // Added in 8.0
+ Name.startswith("avx2.paddus.") || // Added in 8.0
+ Name.startswith("avx2.psubus.") || // Added in 8.0
+ Name.startswith("avx512.mask.paddus.") || // Added in 8.0
+ Name.startswith("avx512.mask.psubus.") || // Added in 8.0
Name=="ssse3.pabs.b.128" || // Added in 6.0
Name=="ssse3.pabs.w.128" || // Added in 6.0
Name=="ssse3.pabs.d.128" || // Added in 6.0
@@ -282,6 +282,14 @@ static bool ShouldUpgradeX86Intrinsic(Function *F, StringRef Name) {
Name.startswith("avx512.mask.pror.") || // Added in 7.0
Name.startswith("avx512.mask.prolv.") || // Added in 7.0
Name.startswith("avx512.mask.prol.") || // Added in 7.0
+ Name == "avx512.mask.padds.b.128" || // Added in 8.0
+ Name == "avx512.mask.padds.b.256" || // Added in 8.0
+ Name == "avx512.mask.padds.w.128" || // Added in 8.0
+ Name == "avx512.mask.padds.w.256" || // Added in 8.0
+ Name == "avx512.mask.psubs.b.128" || // Added in 8.0
+ Name == "avx512.mask.psubs.b.256" || // Added in 8.0
+ Name == "avx512.mask.psubs.w.128" || // Added in 8.0
+ Name == "avx512.mask.psubs.w.256" || // Added in 8.0
Name == "sse.cvtsi2ss" || // Added in 7.0
Name == "sse.cvtsi642ss" || // Added in 7.0
Name == "sse2.cvtsi2sd" || // Added in 7.0
@@ -1404,6 +1412,28 @@ static bool upgradeAVX512MaskToSelect(StringRef Name, IRBuilder<> &Builder,
IID = Intrinsic::x86_avx512_prol_q_512;
else
llvm_unreachable("Unexpected intrinsic");
+ } else if (Name.startswith("padds.")) {
+ if (VecWidth == 128 && EltWidth == 8)
+ IID = Intrinsic::x86_sse2_padds_b;
+ else if (VecWidth == 256 && EltWidth == 8)
+ IID = Intrinsic::x86_avx2_padds_b;
+ else if (VecWidth == 128 && EltWidth == 16)
+ IID = Intrinsic::x86_sse2_padds_w;
+ else if (VecWidth == 256 && EltWidth == 16)
+ IID = Intrinsic::x86_avx2_padds_w;
+ else
+ llvm_unreachable("Unexpected intrinsic");
+ } else if (Name.startswith("psubs.")) {
+ if (VecWidth == 128 && EltWidth == 8)
+ IID = Intrinsic::x86_sse2_psubs_b;
+ else if (VecWidth == 256 && EltWidth == 8)
+ IID = Intrinsic::x86_avx2_psubs_b;
+ else if (VecWidth == 128 && EltWidth == 16)
+ IID = Intrinsic::x86_sse2_psubs_w;
+ else if (VecWidth == 256 && EltWidth == 16)
+ IID = Intrinsic::x86_avx2_psubs_w;
+ else
+ llvm_unreachable("Unexpected intrinsic");
} else
return false;
@@ -2080,12 +2110,12 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) {
if (CI->getNumArgOperands() == 3)
Rep = EmitX86Select(Builder, CI->getArgOperand(2), Rep,
CI->getArgOperand(1));
- } else if (IsX86 && (Name.startswith("sse2.paddus") ||
- Name.startswith("sse2.psubus") ||
- Name.startswith("avx2.paddus") ||
- Name.startswith("avx2.psubus") ||
- Name.startswith("avx512.mask.paddus") ||
- Name.startswith("avx512.mask.psubus"))) {
+ } else if (IsX86 && (Name.startswith("sse2.paddus.") ||
+ Name.startswith("sse2.psubus.") ||
+ Name.startswith("avx2.paddus.") ||
+ Name.startswith("avx2.psubus.") ||
+ Name.startswith("avx512.mask.paddus.") ||
+ Name.startswith("avx512.mask.psubus."))) {
bool IsAdd = Name.contains(".paddus");
Rep = UpgradeX86AddSubSatIntrinsics(Builder, *CI, IsAdd);
} else if (IsX86 && Name.startswith("avx512.mask.palignr.")) {
OpenPOWER on IntegriCloud