[llvm] [AArch64] Consider negated powers of 2 when calculating throughput cost (PR #143013)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 5 10:45:55 PDT 2025
https://github.com/AZero13 updated https://github.com/llvm/llvm-project/pull/143013
>From 4e96dc63ee0a9c55298e27f122b52edf7a932d02 Mon Sep 17 00:00:00 2001
From: Rose <gfunni234 at gmail.com>
Date: Thu, 5 Jun 2025 13:43:52 -0400
Subject: [PATCH] [AArch64] Consider negated powers of 2 when calculating
throughput cost
Negated powers of 2 have similar or (exact in the case of remainder) codegen with lowering sdiv. In the case of sdiv, it just negates the result in the end anyway, so nothing dissimilar at all.
---
llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
index 68aec80f07e1d..16f5f76dd0482 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
@@ -4005,7 +4005,7 @@ InstructionCost AArch64TTIImpl::getArithmeticInstrCost(
// have similar cost.
auto VT = TLI->getValueType(DL, Ty);
if (VT.isScalarInteger() && VT.getSizeInBits() <= 64) {
- if (Op2Info.isPowerOf2()) {
+ if (Op2Info.isPowerOf2() || Op2Info.isNegatedPowerOf2()) {
return ISD == ISD::SDIV ? (3 * AddCost + AsrCost)
: (3 * AsrCost + AddCost);
} else {
@@ -4013,7 +4013,7 @@ InstructionCost AArch64TTIImpl::getArithmeticInstrCost(
}
} else if (VT.isVector()) {
InstructionCost UsraCost = 2 * AsrCost;
- if (Op2Info.isPowerOf2()) {
+ if (Op2Info.isPowerOf2() || Op2Info.isNegatedPowerOf2()) {
// Division with scalable types corresponds to native 'asrd'
// instruction when SVE is available.
// e.g. %1 = sdiv <vscale x 4 x i32> %a, splat (i32 8)
More information about the llvm-commits
mailing list