[llvm] [LoopUnroll] Remove `UseUpperBound` output parameter from `computeUnrollCount` (NFC) (PR #184526)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 4 12:02:58 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-openmp
Author: Justin Fargnoli (justinfargnoli)
<details>
<summary>Changes</summary>
`UseUpperBound` is only ever read by `UnrollAndJamPass.cpp`'s `computeUnrollAndJamCount()`. However, `computeUnrollAndJamCount()` also sets `MaxTripCount` to `0` which [disables](https://github.com/llvm/llvm-project/blob/928505c98345e0494f2d260788adb291efc9ee38/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp#L1017) the only case that could set `UseUpperBound`.
Since there are no callers that need the result of `UseUpperBound`, remove it.
---
Full diff: https://github.com/llvm/llvm-project/pull/184526.diff
4 Files Affected:
- (modified) llvm/include/llvm/Transforms/Utils/UnrollLoop.h (+9-8)
- (modified) llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp (+1-3)
- (modified) llvm/lib/Transforms/Scalar/LoopUnrollAndJamPass.cpp (+5-7)
- (modified) llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp (+14-15)
``````````diff
diff --git a/llvm/include/llvm/Transforms/Utils/UnrollLoop.h b/llvm/include/llvm/Transforms/Utils/UnrollLoop.h
index a3efc43c62dc3..c6c691e683b22 100644
--- a/llvm/include/llvm/Transforms/Utils/UnrollLoop.h
+++ b/llvm/include/llvm/Transforms/Utils/UnrollLoop.h
@@ -157,14 +157,15 @@ class UnrollCostEstimator {
unsigned CountOverwrite = 0) const;
};
-LLVM_ABI bool computeUnrollCount(
- Loop *L, const TargetTransformInfo &TTI, DominatorTree &DT, LoopInfo *LI,
- AssumptionCache *AC, ScalarEvolution &SE,
- const SmallPtrSetImpl<const Value *> &EphValues,
- OptimizationRemarkEmitter *ORE, unsigned TripCount, unsigned MaxTripCount,
- bool MaxOrZero, unsigned TripMultiple, const UnrollCostEstimator &UCE,
- TargetTransformInfo::UnrollingPreferences &UP,
- TargetTransformInfo::PeelingPreferences &PP, bool &UseUpperBound);
+LLVM_ABI bool
+computeUnrollCount(Loop *L, const TargetTransformInfo &TTI, DominatorTree &DT,
+ LoopInfo *LI, AssumptionCache *AC, ScalarEvolution &SE,
+ const SmallPtrSetImpl<const Value *> &EphValues,
+ OptimizationRemarkEmitter *ORE, unsigned TripCount,
+ unsigned MaxTripCount, bool MaxOrZero, unsigned TripMultiple,
+ const UnrollCostEstimator &UCE,
+ TargetTransformInfo::UnrollingPreferences &UP,
+ TargetTransformInfo::PeelingPreferences &PP);
LLVM_ABI std::optional<RecurrenceDescriptor>
canParallelizeReductionWhenUnrolling(PHINode &Phi, Loop *L,
diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
index 9035ae7796a2e..1d522e9b14c7a 100644
--- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -7110,10 +7110,8 @@ static int32_t computeHeuristicUnrollFactor(CanonicalLoopInfo *CLI) {
bool MaxOrZero = false;
unsigned TripMultiple = 0;
- bool UseUpperBound = false;
computeUnrollCount(L, TTI, DT, &LI, &AC, SE, EphValues, &ORE, TripCount,
- MaxTripCount, MaxOrZero, TripMultiple, UCE, UP, PP,
- UseUpperBound);
+ MaxTripCount, MaxOrZero, TripMultiple, UCE, UP, PP);
unsigned Factor = UP.Count;
LLVM_DEBUG(dbgs() << "Suggesting unroll factor of " << Factor << "\n");
diff --git a/llvm/lib/Transforms/Scalar/LoopUnrollAndJamPass.cpp b/llvm/lib/Transforms/Scalar/LoopUnrollAndJamPass.cpp
index 4fe74c7c3bbcd..1121690dbbb69 100644
--- a/llvm/lib/Transforms/Scalar/LoopUnrollAndJamPass.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopUnrollAndJamPass.cpp
@@ -162,13 +162,11 @@ static bool computeUnrollAndJamCount(
// unrolling we leave to the unroller. This uses UP.Threshold /
// UP.PartialThreshold / UP.MaxCount to come up with sensible loop values.
// We have already checked that the loop has no unroll.* pragmas.
- unsigned MaxTripCount = 0;
- bool UseUpperBound = false;
- bool ExplicitUnroll = computeUnrollCount(
- L, TTI, DT, LI, AC, SE, EphValues, ORE, OuterTripCount, MaxTripCount,
- /*MaxOrZero*/ false, OuterTripMultiple, OuterUCE, UP, PP,
- UseUpperBound);
- if (ExplicitUnroll || UseUpperBound) {
+ bool ExplicitUnroll =
+ computeUnrollCount(L, TTI, DT, LI, AC, SE, EphValues, ORE, OuterTripCount,
+ /*MaxTripCount*/ 0, /*MaxOrZero*/ false,
+ OuterTripMultiple, OuterUCE, UP, PP);
+ if (ExplicitUnroll) {
// If the user explicitly set the loop as unrolled, dont UnJ it. Leave it
// for the unroller instead.
LLVM_DEBUG(dbgs() << "Won't unroll-and-jam; explicit count set by "
diff --git a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp
index 4af57ff7697f7..3479115de8702 100644
--- a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp
@@ -932,15 +932,17 @@ shouldPartialUnroll(const unsigned LoopSize, const unsigned TripCount,
// FIXME: This function is used by LoopUnroll and LoopUnrollAndJam, but consumes
// many LoopUnroll-specific options. The shared functionality should be
// refactored into it own function.
-bool llvm::computeUnrollCount(
- Loop *L, const TargetTransformInfo &TTI, DominatorTree &DT, LoopInfo *LI,
- AssumptionCache *AC, ScalarEvolution &SE,
- const SmallPtrSetImpl<const Value *> &EphValues,
- OptimizationRemarkEmitter *ORE, const unsigned TripCount,
- const unsigned MaxTripCount, const bool MaxOrZero,
- const unsigned TripMultiple, const UnrollCostEstimator &UCE,
- TargetTransformInfo::UnrollingPreferences &UP,
- TargetTransformInfo::PeelingPreferences &PP, bool &UseUpperBound) {
+bool llvm::computeUnrollCount(Loop *L, const TargetTransformInfo &TTI,
+ DominatorTree &DT, LoopInfo *LI,
+ AssumptionCache *AC, ScalarEvolution &SE,
+ const SmallPtrSetImpl<const Value *> &EphValues,
+ OptimizationRemarkEmitter *ORE,
+ const unsigned TripCount,
+ const unsigned MaxTripCount, const bool MaxOrZero,
+ const unsigned TripMultiple,
+ const UnrollCostEstimator &UCE,
+ TargetTransformInfo::UnrollingPreferences &UP,
+ TargetTransformInfo::PeelingPreferences &PP) {
unsigned LoopSize = UCE.getRolledLoopSize();
@@ -997,7 +999,6 @@ bool llvm::computeUnrollCount(
if (auto UnrollFactor = shouldFullUnroll(L, TTI, DT, SE, EphValues,
TripCount, UCE, UP)) {
UP.Count = *UnrollFactor;
- UseUpperBound = false;
return ExplicitUnroll;
}
}
@@ -1020,7 +1021,6 @@ bool llvm::computeUnrollCount(
if (auto UnrollFactor = shouldFullUnroll(L, TTI, DT, SE, EphValues,
MaxTripCount, UCE, UP)) {
UP.Count = *UnrollFactor;
- UseUpperBound = true;
return ExplicitUnroll;
}
}
@@ -1304,10 +1304,9 @@ tryToUnrollLoop(Loop *L, DominatorTree &DT, LoopInfo *LI, ScalarEvolution &SE,
// computeUnrollCount() decides whether it is beneficial to use upper bound to
// fully unroll the loop.
- bool UseUpperBound = false;
- bool IsCountSetExplicitly = computeUnrollCount(
- L, TTI, DT, LI, &AC, SE, EphValues, &ORE, TripCount, MaxTripCount,
- MaxOrZero, TripMultiple, UCE, UP, PP, UseUpperBound);
+ bool IsCountSetExplicitly =
+ computeUnrollCount(L, TTI, DT, LI, &AC, SE, EphValues, &ORE, TripCount,
+ MaxTripCount, MaxOrZero, TripMultiple, UCE, UP, PP);
if (!UP.Count)
return LoopUnrollResult::Unmodified;
``````````
</details>
https://github.com/llvm/llvm-project/pull/184526
More information about the llvm-commits
mailing list