[llvm] [IndVars] Split the NumElimCmp into three pieces (PR #170514)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 3 08:55:40 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-transforms
Author: Philip Reames (preames)
<details>
<summary>Changes</summary>
Only one of the three update paths actual eliminate the comparison.
While here, use early return to clarify the code structure.
---
Full diff: https://github.com/llvm/llvm-project/pull/170514.diff
1 Files Affected:
- (modified) llvm/lib/Transforms/Utils/SimplifyIndVar.cpp (+20-10)
``````````diff
diff --git a/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp b/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp
index f5b9cd78cb5d8..61acf3ab61a22 100644
--- a/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp
+++ b/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp
@@ -43,7 +43,9 @@ STATISTIC(
STATISTIC(
NumSimplifiedSRem,
"Number of IV signed remainder operations converted to unsigned remainder");
-STATISTIC(NumElimCmp , "Number of IV comparisons eliminated");
+STATISTIC(NumElimCmp, "Number of IV comparisons eliminated");
+STATISTIC(NumInvariantCmp, "Number of IV comparisons made loop invariant");
+STATISTIC(NumSameSign, "Number of IV comparisons with new samesign flags");
namespace {
/// This is a utility for simplifying induction variables
@@ -275,11 +277,20 @@ void SimplifyIndvar::eliminateIVComparison(ICmpInst *ICmp,
ICmp->replaceAllUsesWith(ConstantInt::getBool(ICmp->getContext(), *Ev));
DeadInsts.emplace_back(ICmp);
LLVM_DEBUG(dbgs() << "INDVARS: Eliminated comparison: " << *ICmp << '\n');
- } else if (makeIVComparisonInvariant(ICmp, IVOperand)) {
- // fallthrough to end of function
- } else if ((ICmpInst::isSigned(OriginalPred) ||
- (ICmpInst::isUnsigned(OriginalPred) && !ICmp->hasSameSign())) &&
- SE->haveSameSign(S, X)) {
+ ++NumElimCmp;
+ Changed = true;
+ return;
+ }
+
+ if (makeIVComparisonInvariant(ICmp, IVOperand)) {
+ ++NumInvariantCmp;
+ Changed = true;
+ return;
+ }
+
+ if ((ICmpInst::isSigned(OriginalPred) ||
+ (ICmpInst::isUnsigned(OriginalPred) && !ICmp->hasSameSign())) &&
+ SE->haveSameSign(S, X)) {
// Set the samesign flag on the compare if legal, and canonicalize to
// the unsigned variant (for signed compares) hoping that it will open
// the doors for other optimizations. Note that we cannot rely on Pred
@@ -289,11 +300,10 @@ void SimplifyIndvar::eliminateIVComparison(ICmpInst *ICmp,
<< '\n');
ICmp->setPredicate(ICmpInst::getUnsignedPredicate(OriginalPred));
ICmp->setSameSign();
- } else
+ NumSameSign++;
+ Changed = true;
return;
-
- ++NumElimCmp;
- Changed = true;
+ }
}
bool SimplifyIndvar::eliminateSDiv(BinaryOperator *SDiv) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/170514
More information about the llvm-commits
mailing list