Skip to content

Commit e5fa7eb

Browse files
committed
[SCEV] Add printout of symbolic max backedge-taken and block exit count
We do compute it and use in optimizations, but never print it out. We need to do it in order to be able to track improvements in its computation.
1 parent fc986e3 commit e5fa7eb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+884
-157
lines changed

llvm/lib/Analysis/ScalarEvolution.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13382,6 +13382,27 @@ static void PrintLoopInfo(raw_ostream &OS, ScalarEvolution *SE,
1338213382
L->getHeader()->printAsOperand(OS, /*PrintType=*/false);
1338313383
OS << ": ";
1338413384

13385+
auto *SymbolicBTC = SE->getSymbolicMaxBackedgeTakenCount(L);
13386+
if (!isa<SCEVCouldNotCompute>(SymbolicBTC)) {
13387+
OS << "symbolic max backedge-taken count is " << *SymbolicBTC;
13388+
if (SE->isBackedgeTakenCountMaxOrZero(L))
13389+
OS << ", actual taken count either this or zero.";
13390+
} else {
13391+
OS << "Unpredictable symbolic max backedge-taken count. ";
13392+
}
13393+
13394+
if (ExitingBlocks.size() > 1)
13395+
for (BasicBlock *ExitingBlock : ExitingBlocks) {
13396+
OS << " symbolic max exit count for " << ExitingBlock->getName() << ": "
13397+
<< *SE->getExitCount(L, ExitingBlock, ScalarEvolution::SymbolicMaximum)
13398+
<< "\n";
13399+
}
13400+
13401+
OS << "\n"
13402+
"Loop ";
13403+
L->getHeader()->printAsOperand(OS, /*PrintType=*/false);
13404+
OS << ": ";
13405+
1338513406
SmallVector<const SCEVPredicate *, 4> Preds;
1338613407
auto PBT = SE->getPredicatedBackedgeTakenCount(L, Preds);
1338713408
if (!isa<SCEVCouldNotCompute>(PBT)) {

llvm/test/Analysis/ScalarEvolution/add-expr-pointer-operand-sorting.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ define i32 @d(i32 %base) {
4848
; CHECK-NEXT: Determining loop execution counts for: @d
4949
; CHECK-NEXT: Loop %for.cond: <multiple exits> Unpredictable backedge-taken count.
5050
; CHECK-NEXT: Loop %for.cond: Unpredictable constant max backedge-taken count.
51+
; CHECK-NEXT: Loop %for.cond: Unpredictable symbolic max backedge-taken count.
5152
; CHECK-NEXT: Loop %for.cond: Unpredictable predicated backedge-taken count.
5253
;
5354
entry:

llvm/test/Analysis/ScalarEvolution/addrec-computed-during-addrec-calculation.ll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,17 @@ define void @test(i32* %p) {
2828
; CHECK-NEXT: Determining loop execution counts for: @test
2929
; CHECK-NEXT: Loop %loop2: Unpredictable backedge-taken count.
3030
; CHECK-NEXT: Loop %loop2: constant max backedge-taken count is -1
31+
; CHECK-NEXT: Loop %loop2: Unpredictable symbolic max backedge-taken count.
3132
; CHECK-NEXT: Loop %loop2: Unpredictable predicated backedge-taken count.
3233
; CHECK-NEXT: Loop %loop3: backedge-taken count is false
3334
; CHECK-NEXT: Loop %loop3: constant max backedge-taken count is false
35+
; CHECK-NEXT: Loop %loop3: symbolic max backedge-taken count is false
3436
; CHECK-NEXT: Loop %loop3: Predicated backedge-taken count is false
3537
; CHECK-NEXT: Predicates:
3638
; CHECK: Loop %loop3: Trip multiple is 1
3739
; CHECK-NEXT: Loop %loop.header: <multiple exits> Unpredictable backedge-taken count.
3840
; CHECK-NEXT: Loop %loop.header: Unpredictable constant max backedge-taken count.
41+
; CHECK-NEXT: Loop %loop.header: Unpredictable symbolic max backedge-taken count.
3942
; CHECK-NEXT: Loop %loop.header: Unpredictable predicated backedge-taken count.
4043
;
4144
entry:

llvm/test/Analysis/ScalarEvolution/becount-invalidation.ll

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,12 @@ define void @test(i64* %arg) {
3131
; CHECK-NEXT: exit count for loop2.header: ***COULDNOTCOMPUTE***
3232
; CHECK-NEXT: exit count for loop2.latch: false
3333
; CHECK-NEXT: Loop %loop2.header: constant max backedge-taken count is false
34-
; CHECK-NEXT: Loop %loop2.header: Unpredictable predicated backedge-taken count.
34+
; CHECK-NEXT: Loop %loop2.header: symbolic max backedge-taken count is false symbolic max exit count for loop2.header: ***COULDNOTCOMPUTE***
35+
; CHECK-NEXT: symbolic max exit count for loop2.latch: false
36+
; CHECK: Loop %loop2.header: Unpredictable predicated backedge-taken count.
3537
; CHECK-NEXT: Loop %loop.header: Unpredictable backedge-taken count.
3638
; CHECK-NEXT: Loop %loop.header: Unpredictable constant max backedge-taken count.
39+
; CHECK-NEXT: Loop %loop.header: Unpredictable symbolic max backedge-taken count.
3740
; CHECK-NEXT: Loop %loop.header: Unpredictable predicated backedge-taken count.
3841
;
3942
entry:

llvm/test/Analysis/ScalarEvolution/cycled_phis.ll

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ define void @test_01() {
1616
; CHECK-NEXT: Determining loop execution counts for: @test_01
1717
; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
1818
; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.
19+
; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.
1920
; CHECK-NEXT: Loop %loop: Unpredictable predicated backedge-taken count.
2021
;
2122
entry:
@@ -52,9 +53,11 @@ define void @test_02(i32* %p, i32* %q) {
5253
; CHECK-NEXT: Determining loop execution counts for: @test_02
5354
; CHECK-NEXT: Loop %inner_loop: Unpredictable backedge-taken count.
5455
; CHECK-NEXT: Loop %inner_loop: Unpredictable constant max backedge-taken count.
56+
; CHECK-NEXT: Loop %inner_loop: Unpredictable symbolic max backedge-taken count.
5557
; CHECK-NEXT: Loop %inner_loop: Unpredictable predicated backedge-taken count.
5658
; CHECK-NEXT: Loop %outer_loop: Unpredictable backedge-taken count.
5759
; CHECK-NEXT: Loop %outer_loop: Unpredictable constant max backedge-taken count.
60+
; CHECK-NEXT: Loop %outer_loop: Unpredictable symbolic max backedge-taken count.
5861
; CHECK-NEXT: Loop %outer_loop: Unpredictable predicated backedge-taken count.
5962
;
6063
entry:
@@ -103,9 +106,11 @@ define void @test_03(i32* %p, i32* %q) {
103106
; CHECK-NEXT: Determining loop execution counts for: @test_03
104107
; CHECK-NEXT: Loop %inner_loop: Unpredictable backedge-taken count.
105108
; CHECK-NEXT: Loop %inner_loop: Unpredictable constant max backedge-taken count.
109+
; CHECK-NEXT: Loop %inner_loop: Unpredictable symbolic max backedge-taken count.
106110
; CHECK-NEXT: Loop %inner_loop: Unpredictable predicated backedge-taken count.
107111
; CHECK-NEXT: Loop %outer_loop: Unpredictable backedge-taken count.
108112
; CHECK-NEXT: Loop %outer_loop: Unpredictable constant max backedge-taken count.
113+
; CHECK-NEXT: Loop %outer_loop: Unpredictable symbolic max backedge-taken count.
109114
; CHECK-NEXT: Loop %outer_loop: Unpredictable predicated backedge-taken count.
110115
;
111116
entry:

llvm/test/Analysis/ScalarEvolution/exact-exit-count-more-precise.ll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@ define void @test_and(i16 %in) {
1515
; CHECK-NEXT: Determining loop execution counts for: @test_and
1616
; CHECK-NEXT: Loop %bb1.i: backedge-taken count is (1 + (-1 * %in))
1717
; CHECK-NEXT: Loop %bb1.i: constant max backedge-taken count is -1
18+
; CHECK-NEXT: Loop %bb1.i: symbolic max backedge-taken count is (1 + (-1 * %in))
1819
; CHECK-NEXT: Loop %bb1.i: Predicated backedge-taken count is (1 + (-1 * %in))
1920
; CHECK-NEXT: Predicates:
2021
; CHECK: Loop %bb1.i: Trip multiple is 1
2122
; CHECK-NEXT: Loop %bb2: <multiple exits> Unpredictable backedge-taken count.
2223
; CHECK-NEXT: Loop %bb2: Unpredictable constant max backedge-taken count.
24+
; CHECK-NEXT: Loop %bb2: Unpredictable symbolic max backedge-taken count.
2325
; CHECK-NEXT: Loop %bb2: Unpredictable predicated backedge-taken count.
2426
;
2527
br label %bb2
@@ -55,6 +57,7 @@ define void @test_or() {
5557
; CHECK-NEXT: Determining loop execution counts for: @test_or
5658
; CHECK-NEXT: Loop %BB: backedge-taken count is undef
5759
; CHECK-NEXT: Loop %BB: constant max backedge-taken count is -1
60+
; CHECK-NEXT: Loop %BB: symbolic max backedge-taken count is undef
5861
; CHECK-NEXT: Loop %BB: Predicated backedge-taken count is undef
5962
; CHECK-NEXT: Predicates:
6063
; CHECK: Loop %BB: Trip multiple is 1

0 commit comments

Comments
 (0)