summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/IR/AutoUpgrade.cpp54
-rw-r--r--llvm/lib/Target/X86/X86IntrinsicsInfo.h8
2 files changed, 42 insertions, 20 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.")) {
diff --git a/llvm/lib/Target/X86/X86IntrinsicsInfo.h b/llvm/lib/Target/X86/X86IntrinsicsInfo.h
index 9ac179f18d6..95f17f76298 100644
--- a/llvm/lib/Target/X86/X86IntrinsicsInfo.h
+++ b/llvm/lib/Target/X86/X86IntrinsicsInfo.h
@@ -673,11 +673,7 @@ static const IntrinsicData IntrinsicsWithoutChain[] = {
X86ISD::FMULS_RND, 0),
X86_INTRINSIC_DATA(avx512_mask_mul_ss_round, INTR_TYPE_SCALAR_MASK_RM,
X86ISD::FMULS_RND, 0),
- X86_INTRINSIC_DATA(avx512_mask_padds_b_128, INTR_TYPE_2OP_MASK, X86ISD::ADDS, 0),
- X86_INTRINSIC_DATA(avx512_mask_padds_b_256, INTR_TYPE_2OP_MASK, X86ISD::ADDS, 0),
X86_INTRINSIC_DATA(avx512_mask_padds_b_512, INTR_TYPE_2OP_MASK, X86ISD::ADDS, 0),
- X86_INTRINSIC_DATA(avx512_mask_padds_w_128, INTR_TYPE_2OP_MASK, X86ISD::ADDS, 0),
- X86_INTRINSIC_DATA(avx512_mask_padds_w_256, INTR_TYPE_2OP_MASK, X86ISD::ADDS, 0),
X86_INTRINSIC_DATA(avx512_mask_padds_w_512, INTR_TYPE_2OP_MASK, X86ISD::ADDS, 0),
X86_INTRINSIC_DATA(avx512_mask_pmov_db_128, INTR_TYPE_1OP_MASK,
X86ISD::VTRUNC, 0),
@@ -793,11 +789,7 @@ static const IntrinsicData IntrinsicsWithoutChain[] = {
X86ISD::MULTISHIFT, 0),
X86_INTRINSIC_DATA(avx512_mask_pmultishift_qb_512, INTR_TYPE_2OP_MASK,
X86ISD::MULTISHIFT, 0),
- X86_INTRINSIC_DATA(avx512_mask_psubs_b_128, INTR_TYPE_2OP_MASK, X86ISD::SUBS, 0),
- X86_INTRINSIC_DATA(avx512_mask_psubs_b_256, INTR_TYPE_2OP_MASK, X86ISD::SUBS, 0),
X86_INTRINSIC_DATA(avx512_mask_psubs_b_512, INTR_TYPE_2OP_MASK, X86ISD::SUBS, 0),
- X86_INTRINSIC_DATA(avx512_mask_psubs_w_128, INTR_TYPE_2OP_MASK, X86ISD::SUBS, 0),
- X86_INTRINSIC_DATA(avx512_mask_psubs_w_256, INTR_TYPE_2OP_MASK, X86ISD::SUBS, 0),
X86_INTRINSIC_DATA(avx512_mask_psubs_w_512, INTR_TYPE_2OP_MASK, X86ISD::SUBS, 0),
X86_INTRINSIC_DATA(avx512_mask_range_pd_128, INTR_TYPE_3OP_MASK, X86ISD::VRANGE, 0),
X86_INTRINSIC_DATA(avx512_mask_range_pd_256, INTR_TYPE_3OP_MASK, X86ISD::VRANGE, 0),
OpenPOWER on IntegriCloud