[llvm] [RISCV] Account for ADDI immediate range in select of two constants w/ zicond (PR #155471)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 26 12:18:54 PDT 2025
================
@@ -9280,11 +9280,21 @@ SDValue RISCVTargetLowering::lowerSELECT(SDValue Op, SelectionDAG &DAG) const {
}
}
- const int TrueValCost = RISCVMatInt::getIntMatCost(
- TrueVal, Subtarget.getXLen(), Subtarget, /*CompressionCost=*/true);
- const int FalseValCost = RISCVMatInt::getIntMatCost(
- FalseVal, Subtarget.getXLen(), Subtarget, /*CompressionCost=*/true);
- bool IsCZERO_NEZ = TrueValCost <= FalseValCost;
+ auto getCost = [&](APInt Delta, APInt Addend) {
+ const int DeltaCost = RISCVMatInt::getIntMatCost(
+ Delta, Subtarget.getXLen(), Subtarget, /*CompressionCost=*/true);
+ // Dos the addend folds into an ADDI
+ if (Addend.isSignedIntN(12))
+ return DeltaCost;
+ const int AddendCost = RISCVMatInt::getIntMatCost(
+ Addend, Subtarget.getXLen(), Subtarget, /*CompressionCost=*/true);
+ // Panalize the ADD slightly so that we prefer to end with an ADDI
----------------
topperc wrote:
```suggestion
// Penalize the ADD slightly so that we prefer to end with an ADDI
```
https://github.com/llvm/llvm-project/pull/155471
More information about the llvm-commits
mailing list