Skip to content

Commit 98cab7b

Browse files
committed
Clarify recent comments some
1 parent 5719779 commit 98cab7b

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

llvm/lib/Transforms/Utils/LoopUtils.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -875,16 +875,21 @@ llvm::getLoopEstimatedTripCount(Loop *L,
875875
// mistaking LLVMLoopEstimatedTripCount metadata to be for an outer loop when
876876
// it was created for an inner loop. The problem is that loop metadata is
877877
// attached to the branch instruction in the loop latch block, but that can be
878-
// shared by the loops. The solution is to attach loop metadata to loop
879-
// headers instead, but that would be a large change to LLVM.
878+
// shared by the loops. A solution is to attach loop metadata to loop headers
879+
// instead, but that would be a large change to LLVM.
880880
//
881881
// Until that happens, we work around the problem as follows.
882882
// getExpectedExitLoopLatchBranch (which also guards
883-
// setLoopEstimatedTripCount) will not recognize the same latch for both loops
884-
// unless the latch exits both loops and has only two successors. However, to
885-
// exit both loops, the latch must have at least three successors: the inner
886-
// loop header, the outer loop header (exit for the inner loop), and an exit
887-
// for the outer loop.
883+
// setLoopEstimatedTripCount) returns nullptr for a loop unless the loop has
884+
// one latch and that latch has exactly two successors one of which is an exit
885+
// from the loop. If the latch is shared by nested loops, then that condition
886+
// might hold for the inner loop but cannot hold for the outer loop:
887+
// - Because the latch is shared, it must have at least two successors: the
888+
// inner loop header and the outer loop header, which is also an exit for
889+
// the inner loop. That satisifies the condition for the inner loop.
890+
// - To satsify the condition for the outer loop, the latch must have a third
891+
// successor that is an exit for the outer loop. But that violates the
892+
// condition for both loops.
888893
BranchInst *ExitingBranch = getExpectedExitLoopLatchBranch(L);
889894
if (!ExitingBranch)
890895
return std::nullopt;

0 commit comments

Comments
 (0)