[AArch64] Update addo and subo costs
Similar to D116732, this adds basic scalar sadd_with_overflow,
uadd_with_overflow, ssub_with_overflow and usub_with_overflow costs for
aarch64, which are usually quite efficiently lowered.
Differential Revision: https://reviews.llvm.org/D116734
diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
index d6b51f1..8fd8751 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
@@ -331,9 +331,29 @@
}
break;
}
+ case Intrinsic::sadd_with_overflow:
+ case Intrinsic::uadd_with_overflow:
+ case Intrinsic::ssub_with_overflow:
+ case Intrinsic::usub_with_overflow:
case Intrinsic::smul_with_overflow:
case Intrinsic::umul_with_overflow: {
static const CostTblEntry WithOverflowCostTbl[] = {
+ {Intrinsic::sadd_with_overflow, MVT::i8, 3},
+ {Intrinsic::uadd_with_overflow, MVT::i8, 3},
+ {Intrinsic::sadd_with_overflow, MVT::i16, 3},
+ {Intrinsic::uadd_with_overflow, MVT::i16, 3},
+ {Intrinsic::sadd_with_overflow, MVT::i32, 1},
+ {Intrinsic::uadd_with_overflow, MVT::i32, 1},
+ {Intrinsic::sadd_with_overflow, MVT::i64, 1},
+ {Intrinsic::uadd_with_overflow, MVT::i64, 1},
+ {Intrinsic::ssub_with_overflow, MVT::i8, 3},
+ {Intrinsic::usub_with_overflow, MVT::i8, 3},
+ {Intrinsic::ssub_with_overflow, MVT::i16, 3},
+ {Intrinsic::usub_with_overflow, MVT::i16, 3},
+ {Intrinsic::ssub_with_overflow, MVT::i32, 1},
+ {Intrinsic::usub_with_overflow, MVT::i32, 1},
+ {Intrinsic::ssub_with_overflow, MVT::i64, 1},
+ {Intrinsic::usub_with_overflow, MVT::i64, 1},
{Intrinsic::smul_with_overflow, MVT::i8, 5},
{Intrinsic::umul_with_overflow, MVT::i8, 4},
{Intrinsic::smul_with_overflow, MVT::i16, 5},