diff options
Diffstat (limited to 'llvm/lib/IR/AutoUpgrade.cpp')
-rw-r--r-- | llvm/lib/IR/AutoUpgrade.cpp | 54 |
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.")) { |