[LSR] Early exit for RateFormula when it is already losing. NFC
authoreopXD <eop.chen@sifive.com>
Thu, 2 Jun 2022 03:39:38 +0000 (20:39 -0700)
committereopXD <eop.chen@sifive.com>
Thu, 2 Jun 2022 04:02:40 +0000 (21:02 -0700)
This patch does not effect any behavior of the current code.

The codebase implicitly implies that `Cost::RateFormula` is only called
when the `Cost` is not in losing status, or else there may be possible
to trigger the assertion of `Cost::isValid`.

The intention here is to prevent mis-use where future development
allow `Cost` that is already loser to call `Cost::RateFormula` - Early
exit when `Cost` is already losing.

Reviewed By: Meinersbur, #loopoptwg

Differential Revision: https://reviews.llvm.org/D125670

llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp

index e53dea5..f0a5f94 100644 (file)
@@ -1355,6 +1355,8 @@ void Cost::RateFormula(const Formula &F,
                        const DenseSet<const SCEV *> &VisitedRegs,
                        const LSRUse &LU,
                        SmallPtrSetImpl<const SCEV *> *LoserRegs) {
+  if (isLoser())
+    return;
   assert(F.isCanonical(*L) && "Cost is accurate only for canonical formula");
   // Tally up the registers.
   unsigned PrevAddRecCost = C.AddRecCost;