1 //===- LoopDeletion.cpp - Dead Loop Deletion Pass ---------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file implements the Dead Loop Deletion Pass. This pass is responsible
10 // for eliminating loops with non-infinite computable trip counts that have no
11 // side effects or volatile instructions, and do not contribute to the
12 // computation of the function's return value.
14 //===----------------------------------------------------------------------===//
16 #include "llvm/Transforms/Scalar/LoopDeletion.h"
17 #include "llvm/ADT/SmallVector.h"
18 #include "llvm/ADT/Statistic.h"
19 #include "llvm/Analysis/CFG.h"
20 #include "llvm/Analysis/GlobalsModRef.h"
21 #include "llvm/Analysis/InstructionSimplify.h"
22 #include "llvm/Analysis/LoopIterator.h"
23 #include "llvm/Analysis/LoopPass.h"
24 #include "llvm/Analysis/MemorySSA.h"
25 #include "llvm/Analysis/OptimizationRemarkEmitter.h"
26 #include "llvm/IR/Dominators.h"
28 #include "llvm/IR/PatternMatch.h"
29 #include "llvm/InitializePasses.h"
30 #include "llvm/Transforms/Scalar.h"
31 #include "llvm/Transforms/Scalar/LoopPassManager.h"
32 #include "llvm/Transforms/Utils/LoopUtils.h"
36 #define DEBUG_TYPE "loop-delete"
38 STATISTIC(NumDeleted
, "Number of loops deleted");
40 static cl::opt
<bool> EnableSymbolicExecution(
41 "loop-deletion-enable-symbolic-execution", cl::Hidden
, cl::init(true),
42 cl::desc("Break backedge through symbolic execution of 1st iteration "
43 "attempting to prove that the backedge is never taken"));
45 enum class LoopDeletionResult
{
51 static LoopDeletionResult
merge(LoopDeletionResult A
, LoopDeletionResult B
) {
52 if (A
== LoopDeletionResult::Deleted
|| B
== LoopDeletionResult::Deleted
)
53 return LoopDeletionResult::Deleted
;
54 if (A
== LoopDeletionResult::Modified
|| B
== LoopDeletionResult::Modified
)
55 return LoopDeletionResult::Modified
;
56 return LoopDeletionResult::Unmodified
;
59 /// Determines if a loop is dead.
61 /// This assumes that we've already checked for unique exit and exiting blocks,
62 /// and that the code is in LCSSA form.
63 static bool isLoopDead(Loop
*L
, ScalarEvolution
&SE
,
64 SmallVectorImpl
<BasicBlock
*> &ExitingBlocks
,
65 BasicBlock
*ExitBlock
, bool &Changed
,
66 BasicBlock
*Preheader
, LoopInfo
&LI
) {
67 // Make sure that all PHI entries coming from the loop are loop invariant.
68 // Because the code is in LCSSA form, any values used outside of the loop
69 // must pass through a PHI in the exit block, meaning that this check is
70 // sufficient to guarantee that no loop-variant values are used outside
72 bool AllEntriesInvariant
= true;
73 bool AllOutgoingValuesSame
= true;
74 if (!L
->hasNoExitBlocks()) {
75 for (PHINode
&P
: ExitBlock
->phis()) {
76 Value
*incoming
= P
.getIncomingValueForBlock(ExitingBlocks
[0]);
78 // Make sure all exiting blocks produce the same incoming value for the
79 // block. If there are different incoming values for different exiting
80 // blocks, then it is impossible to statically determine which value
82 AllOutgoingValuesSame
=
83 all_of(makeArrayRef(ExitingBlocks
).slice(1), [&](BasicBlock
*BB
) {
84 return incoming
== P
.getIncomingValueForBlock(BB
);
87 if (!AllOutgoingValuesSame
)
90 if (Instruction
*I
= dyn_cast
<Instruction
>(incoming
))
91 if (!L
->makeLoopInvariant(I
, Changed
, Preheader
->getTerminator())) {
92 AllEntriesInvariant
= false;
99 SE
.forgetLoopDispositions(L
);
101 if (!AllEntriesInvariant
|| !AllOutgoingValuesSame
)
104 // Make sure that no instructions in the block have potential side-effects.
105 // This includes instructions that could write to memory, and loads that are
107 for (auto &I
: L
->blocks())
108 if (any_of(*I
, [](Instruction
&I
) {
109 return I
.mayHaveSideEffects() && !I
.isDroppable();
113 // The loop or any of its sub-loops looping infinitely is legal. The loop can
114 // only be considered dead if either
115 // a. the function is mustprogress.
116 // b. all (sub-)loops are mustprogress or have a known trip-count.
117 if (L
->getHeader()->getParent()->mustProgress())
120 LoopBlocksRPO
RPOT(L
);
122 // If the loop contains an irreducible cycle, it may loop infinitely.
123 if (containsIrreducibleCFG
<const BasicBlock
*>(RPOT
, LI
))
126 SmallVector
<Loop
*, 8> WorkList
;
127 WorkList
.push_back(L
);
128 while (!WorkList
.empty()) {
129 Loop
*Current
= WorkList
.pop_back_val();
130 if (hasMustProgress(Current
))
133 const SCEV
*S
= SE
.getConstantMaxBackedgeTakenCount(Current
);
134 if (isa
<SCEVCouldNotCompute
>(S
)) {
136 dbgs() << "Could not compute SCEV MaxBackedgeTakenCount and was "
137 "not required to make progress.\n");
140 WorkList
.append(Current
->begin(), Current
->end());
145 /// This function returns true if there is no viable path from the
146 /// entry block to the header of \p L. Right now, it only does
147 /// a local search to save compile time.
148 static bool isLoopNeverExecuted(Loop
*L
) {
149 using namespace PatternMatch
;
151 auto *Preheader
= L
->getLoopPreheader();
152 // TODO: We can relax this constraint, since we just need a loop
154 assert(Preheader
&& "Needs preheader!");
156 if (Preheader
->isEntryBlock())
158 // All predecessors of the preheader should have a constant conditional
159 // branch, with the loop's preheader as not-taken.
160 for (auto *Pred
: predecessors(Preheader
)) {
161 BasicBlock
*Taken
, *NotTaken
;
163 if (!match(Pred
->getTerminator(),
164 m_Br(m_ConstantInt(Cond
), Taken
, NotTaken
)))
166 if (!Cond
->getZExtValue())
167 std::swap(Taken
, NotTaken
);
168 if (Taken
== Preheader
)
171 assert(!pred_empty(Preheader
) &&
172 "Preheader should have predecessors at this point!");
173 // All the predecessors have the loop preheader as not-taken target.
178 getValueOnFirstIteration(Value
*V
, DenseMap
<Value
*, Value
*> &FirstIterValue
,
179 const SimplifyQuery
&SQ
) {
180 // Quick hack: do not flood cache with non-instruction values.
181 if (!isa
<Instruction
>(V
))
183 // Do we already know cached result?
184 auto Existing
= FirstIterValue
.find(V
);
185 if (Existing
!= FirstIterValue
.end())
186 return Existing
->second
;
187 Value
*FirstIterV
= nullptr;
188 if (auto *BO
= dyn_cast
<BinaryOperator
>(V
)) {
190 getValueOnFirstIteration(BO
->getOperand(0), FirstIterValue
, SQ
);
192 getValueOnFirstIteration(BO
->getOperand(1), FirstIterValue
, SQ
);
193 FirstIterV
= SimplifyBinOp(BO
->getOpcode(), LHS
, RHS
, SQ
);
197 FirstIterValue
[V
] = FirstIterV
;
201 // Try to prove that one of conditions that dominates the latch must exit on 1st
203 static bool canProveExitOnFirstIteration(Loop
*L
, DominatorTree
&DT
,
205 // Disabled by option.
206 if (!EnableSymbolicExecution
)
209 BasicBlock
*Predecessor
= L
->getLoopPredecessor();
210 BasicBlock
*Latch
= L
->getLoopLatch();
212 if (!Predecessor
|| !Latch
)
215 LoopBlocksRPO
RPOT(L
);
218 // For the optimization to be correct, we need RPOT to have a property that
219 // each block is processed after all its predecessors, which may only be
220 // violated for headers of the current loop and all nested loops. Irreducible
221 // CFG provides multiple ways to break this assumption, so we do not want to
223 if (containsIrreducibleCFG
<const BasicBlock
*>(RPOT
, LI
))
226 BasicBlock
*Header
= L
->getHeader();
227 // Blocks that are reachable on the 1st iteration.
228 SmallPtrSet
<BasicBlock
*, 4> LiveBlocks
;
229 // Edges that are reachable on the 1st iteration.
230 DenseSet
<BasicBlockEdge
> LiveEdges
;
231 LiveBlocks
.insert(Header
);
233 SmallPtrSet
<BasicBlock
*, 4> Visited
;
234 auto MarkLiveEdge
= [&](BasicBlock
*From
, BasicBlock
*To
) {
235 assert(LiveBlocks
.count(From
) && "Must be live!");
236 assert((LI
.isLoopHeader(To
) || !Visited
.count(To
)) &&
237 "Only canonical backedges are allowed. Irreducible CFG?");
238 assert((LiveBlocks
.count(To
) || !Visited
.count(To
)) &&
239 "We already discarded this block as dead!");
240 LiveBlocks
.insert(To
);
241 LiveEdges
.insert({ From
, To
});
244 auto MarkAllSuccessorsLive
= [&](BasicBlock
*BB
) {
245 for (auto *Succ
: successors(BB
))
246 MarkLiveEdge(BB
, Succ
);
249 // Check if there is only one value coming from all live predecessor blocks.
250 // Note that because we iterate in RPOT, we have already visited all its
251 // (non-latch) predecessors.
252 auto GetSoleInputOnFirstIteration
= [&](PHINode
& PN
)->Value
* {
253 BasicBlock
*BB
= PN
.getParent();
254 bool HasLivePreds
= false;
257 return PN
.getIncomingValueForBlock(Predecessor
);
258 Value
*OnlyInput
= nullptr;
259 for (auto *Pred
: predecessors(BB
))
260 if (LiveEdges
.count({ Pred
, BB
})) {
262 Value
*Incoming
= PN
.getIncomingValueForBlock(Pred
);
263 // Skip undefs. If they are present, we can assume they are equal to
264 // the non-undef input.
265 if (isa
<UndefValue
>(Incoming
))
268 if (OnlyInput
&& OnlyInput
!= Incoming
)
270 OnlyInput
= Incoming
;
273 assert(HasLivePreds
&& "No live predecessors?");
274 // If all incoming live value were undefs, return undef.
275 return OnlyInput
? OnlyInput
: UndefValue::get(PN
.getType());
277 DenseMap
<Value
*, Value
*> FirstIterValue
;
279 // Use the following algorithm to prove we never take the latch on the 1st
281 // 1. Traverse in topological order, so that whenever we visit a block, all
282 // its predecessors are already visited.
283 // 2. If we can prove that the block may have only 1 predecessor on the 1st
284 // iteration, map all its phis onto input from this predecessor.
285 // 3a. If we can prove which successor of out block is taken on the 1st
286 // iteration, mark this successor live.
287 // 3b. If we cannot prove it, conservatively assume that all successors are
289 auto &DL
= Header
->getModule()->getDataLayout();
290 const SimplifyQuery
SQ(DL
);
291 for (auto *BB
: RPOT
) {
294 // This block is not reachable on the 1st iterations.
295 if (!LiveBlocks
.count(BB
))
299 if (LI
.getLoopFor(BB
) != L
) {
300 MarkAllSuccessorsLive(BB
);
304 // If Phi has only one input from all live input blocks, use it.
305 for (auto &PN
: BB
->phis()) {
306 if (!PN
.getType()->isIntegerTy())
308 auto *Incoming
= GetSoleInputOnFirstIteration(PN
);
309 if (Incoming
&& DT
.dominates(Incoming
, BB
->getTerminator())) {
311 getValueOnFirstIteration(Incoming
, FirstIterValue
, SQ
);
312 FirstIterValue
[&PN
] = FirstIterV
;
316 using namespace PatternMatch
;
317 ICmpInst::Predicate Pred
;
319 BasicBlock
*IfTrue
, *IfFalse
;
320 auto *Term
= BB
->getTerminator();
321 if (match(Term
, m_Br(m_ICmp(Pred
, m_Value(LHS
), m_Value(RHS
)),
322 m_BasicBlock(IfTrue
), m_BasicBlock(IfFalse
)))) {
323 if (!LHS
->getType()->isIntegerTy()) {
324 MarkAllSuccessorsLive(BB
);
328 // Can we prove constant true or false for this condition?
329 LHS
= getValueOnFirstIteration(LHS
, FirstIterValue
, SQ
);
330 RHS
= getValueOnFirstIteration(RHS
, FirstIterValue
, SQ
);
331 auto *KnownCondition
= SimplifyICmpInst(Pred
, LHS
, RHS
, SQ
);
332 if (!KnownCondition
) {
333 // Failed to simplify.
334 MarkAllSuccessorsLive(BB
);
337 if (isa
<UndefValue
>(KnownCondition
)) {
338 // TODO: According to langref, branching by undef is undefined behavior.
339 // It means that, theoretically, we should be able to just continue
340 // without marking any successors as live. However, we are not certain
341 // how correct our compiler is at handling such cases. So we are being
342 // very conservative here.
344 // If there is a non-loop successor, always assume this branch leaves the
345 // loop. Otherwise, arbitrarily take IfTrue.
347 // Once we are certain that branching by undef is handled correctly by
348 // other transforms, we should not mark any successors live here.
349 if (L
->contains(IfTrue
) && L
->contains(IfFalse
))
350 MarkLiveEdge(BB
, IfTrue
);
353 auto *ConstCondition
= dyn_cast
<ConstantInt
>(KnownCondition
);
354 if (!ConstCondition
) {
355 // Non-constant condition, cannot analyze any further.
356 MarkAllSuccessorsLive(BB
);
359 if (ConstCondition
->isAllOnesValue())
360 MarkLiveEdge(BB
, IfTrue
);
362 MarkLiveEdge(BB
, IfFalse
);
363 } else if (SwitchInst
*SI
= dyn_cast
<SwitchInst
>(Term
)) {
364 auto *SwitchValue
= SI
->getCondition();
365 auto *SwitchValueOnFirstIter
=
366 getValueOnFirstIteration(SwitchValue
, FirstIterValue
, SQ
);
367 auto *ConstSwitchValue
= dyn_cast
<ConstantInt
>(SwitchValueOnFirstIter
);
368 if (!ConstSwitchValue
) {
369 MarkAllSuccessorsLive(BB
);
372 auto CaseIterator
= SI
->findCaseValue(ConstSwitchValue
);
373 MarkLiveEdge(BB
, CaseIterator
->getCaseSuccessor());
375 MarkAllSuccessorsLive(BB
);
380 // We can break the latch if it wasn't live.
381 return !LiveEdges
.count({ Latch
, Header
});
384 /// If we can prove the backedge is untaken, remove it. This destroys the
385 /// loop, but leaves the (now trivially loop invariant) control flow and
386 /// side effects (if any) in place.
387 static LoopDeletionResult
388 breakBackedgeIfNotTaken(Loop
*L
, DominatorTree
&DT
, ScalarEvolution
&SE
,
389 LoopInfo
&LI
, MemorySSA
*MSSA
,
390 OptimizationRemarkEmitter
&ORE
) {
391 assert(L
->isLCSSAForm(DT
) && "Expected LCSSA!");
393 if (!L
->getLoopLatch())
394 return LoopDeletionResult::Unmodified
;
396 auto *BTC
= SE
.getBackedgeTakenCount(L
);
397 if (!isa
<SCEVCouldNotCompute
>(BTC
) && SE
.isKnownNonZero(BTC
))
398 return LoopDeletionResult::Unmodified
;
399 if (!BTC
->isZero() && !canProveExitOnFirstIteration(L
, DT
, LI
))
400 return LoopDeletionResult::Unmodified
;
402 breakLoopBackedge(L
, DT
, SE
, LI
, MSSA
);
403 return LoopDeletionResult::Deleted
;
406 /// Remove a loop if it is dead.
408 /// A loop is considered dead either if it does not impact the observable
409 /// behavior of the program other than finite running time, or if it is
410 /// required to make progress by an attribute such as 'mustprogress' or
411 /// 'llvm.loop.mustprogress' and does not make any. This may remove
412 /// infinite loops that have been required to make progress.
414 /// This entire process relies pretty heavily on LoopSimplify form and LCSSA in
415 /// order to make various safety checks work.
417 /// \returns true if any changes were made. This may mutate the loop even if it
418 /// is unable to delete it due to hoisting trivially loop invariant
419 /// instructions out of the loop.
420 static LoopDeletionResult
deleteLoopIfDead(Loop
*L
, DominatorTree
&DT
,
421 ScalarEvolution
&SE
, LoopInfo
&LI
,
423 OptimizationRemarkEmitter
&ORE
) {
424 assert(L
->isLCSSAForm(DT
) && "Expected LCSSA!");
426 // We can only remove the loop if there is a preheader that we can branch from
427 // after removing it. Also, if LoopSimplify form is not available, stay out
429 BasicBlock
*Preheader
= L
->getLoopPreheader();
430 if (!Preheader
|| !L
->hasDedicatedExits()) {
433 << "Deletion requires Loop with preheader and dedicated exits.\n");
434 return LoopDeletionResult::Unmodified
;
437 BasicBlock
*ExitBlock
= L
->getUniqueExitBlock();
439 if (ExitBlock
&& isLoopNeverExecuted(L
)) {
440 LLVM_DEBUG(dbgs() << "Loop is proven to never execute, delete it!");
441 // We need to forget the loop before setting the incoming values of the exit
442 // phis to undef, so we properly invalidate the SCEV expressions for those
445 // Set incoming value to undef for phi nodes in the exit block.
446 for (PHINode
&P
: ExitBlock
->phis()) {
447 std::fill(P
.incoming_values().begin(), P
.incoming_values().end(),
448 UndefValue::get(P
.getType()));
451 return OptimizationRemark(DEBUG_TYPE
, "NeverExecutes", L
->getStartLoc(),
453 << "Loop deleted because it never executes";
455 deleteDeadLoop(L
, &DT
, &SE
, &LI
, MSSA
);
457 return LoopDeletionResult::Deleted
;
460 // The remaining checks below are for a loop being dead because all statements
461 // in the loop are invariant.
462 SmallVector
<BasicBlock
*, 4> ExitingBlocks
;
463 L
->getExitingBlocks(ExitingBlocks
);
465 // We require that the loop has at most one exit block. Otherwise, we'd be in
466 // the situation of needing to be able to solve statically which exit block
467 // will be branched to, or trying to preserve the branching logic in a loop
469 if (!ExitBlock
&& !L
->hasNoExitBlocks()) {
470 LLVM_DEBUG(dbgs() << "Deletion requires at most one exit block.\n");
471 return LoopDeletionResult::Unmodified
;
473 // Finally, we have to check that the loop really is dead.
474 bool Changed
= false;
475 if (!isLoopDead(L
, SE
, ExitingBlocks
, ExitBlock
, Changed
, Preheader
, LI
)) {
476 LLVM_DEBUG(dbgs() << "Loop is not invariant, cannot delete.\n");
477 return Changed
? LoopDeletionResult::Modified
478 : LoopDeletionResult::Unmodified
;
481 LLVM_DEBUG(dbgs() << "Loop is invariant, delete it!");
483 return OptimizationRemark(DEBUG_TYPE
, "Invariant", L
->getStartLoc(),
485 << "Loop deleted because it is invariant";
487 deleteDeadLoop(L
, &DT
, &SE
, &LI
, MSSA
);
490 return LoopDeletionResult::Deleted
;
493 PreservedAnalyses
LoopDeletionPass::run(Loop
&L
, LoopAnalysisManager
&AM
,
494 LoopStandardAnalysisResults
&AR
,
495 LPMUpdater
&Updater
) {
497 LLVM_DEBUG(dbgs() << "Analyzing Loop for deletion: ");
498 LLVM_DEBUG(L
.dump());
499 std::string LoopName
= std::string(L
.getName());
500 // For the new PM, we can't use OptimizationRemarkEmitter as an analysis
501 // pass. Function analyses need to be preserved across loop transformations
502 // but ORE cannot be preserved (see comment before the pass definition).
503 OptimizationRemarkEmitter
ORE(L
.getHeader()->getParent());
504 auto Result
= deleteLoopIfDead(&L
, AR
.DT
, AR
.SE
, AR
.LI
, AR
.MSSA
, ORE
);
506 // If we can prove the backedge isn't taken, just break it and be done. This
507 // leaves the loop structure in place which means it can handle dispatching
508 // to the right exit based on whatever loop invariant structure remains.
509 if (Result
!= LoopDeletionResult::Deleted
)
510 Result
= merge(Result
, breakBackedgeIfNotTaken(&L
, AR
.DT
, AR
.SE
, AR
.LI
,
513 if (Result
== LoopDeletionResult::Unmodified
)
514 return PreservedAnalyses::all();
516 if (Result
== LoopDeletionResult::Deleted
)
517 Updater
.markLoopAsDeleted(L
, LoopName
);
519 auto PA
= getLoopPassPreservedAnalyses();
521 PA
.preserve
<MemorySSAAnalysis
>();
526 class LoopDeletionLegacyPass
: public LoopPass
{
528 static char ID
; // Pass ID, replacement for typeid
529 LoopDeletionLegacyPass() : LoopPass(ID
) {
530 initializeLoopDeletionLegacyPassPass(*PassRegistry::getPassRegistry());
533 // Possibly eliminate loop L if it is dead.
534 bool runOnLoop(Loop
*L
, LPPassManager
&) override
;
536 void getAnalysisUsage(AnalysisUsage
&AU
) const override
{
537 AU
.addPreserved
<MemorySSAWrapperPass
>();
538 getLoopAnalysisUsage(AU
);
543 char LoopDeletionLegacyPass::ID
= 0;
544 INITIALIZE_PASS_BEGIN(LoopDeletionLegacyPass
, "loop-deletion",
545 "Delete dead loops", false, false)
546 INITIALIZE_PASS_DEPENDENCY(LoopPass
)
547 INITIALIZE_PASS_END(LoopDeletionLegacyPass
, "loop-deletion",
548 "Delete dead loops", false, false)
550 Pass
*llvm::createLoopDeletionPass() { return new LoopDeletionLegacyPass(); }
552 bool LoopDeletionLegacyPass::runOnLoop(Loop
*L
, LPPassManager
&LPM
) {
555 DominatorTree
&DT
= getAnalysis
<DominatorTreeWrapperPass
>().getDomTree();
556 ScalarEvolution
&SE
= getAnalysis
<ScalarEvolutionWrapperPass
>().getSE();
557 LoopInfo
&LI
= getAnalysis
<LoopInfoWrapperPass
>().getLoopInfo();
558 auto *MSSAAnalysis
= getAnalysisIfAvailable
<MemorySSAWrapperPass
>();
559 MemorySSA
*MSSA
= nullptr;
561 MSSA
= &MSSAAnalysis
->getMSSA();
562 // For the old PM, we can't use OptimizationRemarkEmitter as an analysis
563 // pass. Function analyses need to be preserved across loop transformations
564 // but ORE cannot be preserved (see comment before the pass definition).
565 OptimizationRemarkEmitter
ORE(L
->getHeader()->getParent());
567 LLVM_DEBUG(dbgs() << "Analyzing Loop for deletion: ");
568 LLVM_DEBUG(L
->dump());
570 LoopDeletionResult Result
= deleteLoopIfDead(L
, DT
, SE
, LI
, MSSA
, ORE
);
572 // If we can prove the backedge isn't taken, just break it and be done. This
573 // leaves the loop structure in place which means it can handle dispatching
574 // to the right exit based on whatever loop invariant structure remains.
575 if (Result
!= LoopDeletionResult::Deleted
)
576 Result
= merge(Result
, breakBackedgeIfNotTaken(L
, DT
, SE
, LI
, MSSA
, ORE
));
578 if (Result
== LoopDeletionResult::Deleted
)
579 LPM
.markLoopAsDeleted(*L
);
581 return Result
!= LoopDeletionResult::Unmodified
;