[llvm] [AArch64] Report icmp as free if it can be folded into ands (PR #143286)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Jun 7 14:11:15 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-aarch64
Author: AZero13 (AZero13)
<details>
<summary>Changes</summary>
Since changing the backend to fold x >= 1 / x < 1 -> x > 0 / x <= 0 and x <= -1 / x > -1 -> x > 0 / x <= 0, this should be reflected in the cost.
---
Full diff: https://github.com/llvm/llvm-project/pull/143286.diff
1 Files Affected:
- (modified) llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp (+15-6)
``````````diff
diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
index 68aec80f07e1d..72b60eaa45b78 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
@@ -4346,14 +4346,23 @@ InstructionCost AArch64TTIImpl::getCmpSelInstrCost(
}
// Treat the icmp in icmp(and, 0) as free, as we can make use of ands.
- // FIXME: This can apply to more conditions and add/sub if it can be shown to
- // be profitable.
if (ValTy->isIntegerTy() && ISD == ISD::SETCC && I &&
- ICmpInst::isEquality(VecPred) &&
+ !CmpInst::isUnsigned(VecPred) &&
TLI->isTypeLegal(TLI->getValueType(DL, ValTy)) &&
- match(I->getOperand(1), m_Zero()) &&
- match(I->getOperand(0), m_And(m_Value(), m_Value())))
- return 0;
+ match(I->getOperand(0), m_And(m_Value(), m_Value()))) {
+ if (match(I->getOperand(1), m_Zero()))
+ return 0;
+
+ // x >= 1 / x < 1 -> x > 0 / x <= 0
+ if (match(I->getOperand(1), m_One()) &&
+ (VecPred == CmpInst::ICMP_SLT || VecPred == CmpInst::ICMP_SGE))
+ return 0;
+
+ // x <= -1 / x > -1 -> x > 0 / x <= 0
+ if (match(I->getOperand(1), m_AllOnes()) &&
+ (VecPred == CmpInst::ICMP_SLE || VecPred == CmpInst::ICMP_SGT))
+ return 0;
+ }
// The base case handles scalable vectors fine for now, since it treats the
// cost as 1 * legalization cost.
``````````
</details>
https://github.com/llvm/llvm-project/pull/143286
More information about the llvm-commits
mailing list