summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/JumpThreading/static-profile.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Transforms/JumpThreading/static-profile.ll')
-rw-r--r--llvm/test/Transforms/JumpThreading/static-profile.ll128
1 files changed, 0 insertions, 128 deletions
diff --git a/llvm/test/Transforms/JumpThreading/static-profile.ll b/llvm/test/Transforms/JumpThreading/static-profile.ll
deleted file mode 100644
index 2b2e1cb89cc..00000000000
--- a/llvm/test/Transforms/JumpThreading/static-profile.ll
+++ /dev/null
@@ -1,128 +0,0 @@
-; RUN: opt -S -jump-threading < %s | FileCheck %s
-
-; Check that based solely on static profile estimation we don't update the
-; branch-weight metadata. Even if the function has an entry frequency, a
-; completely cold part of the CFG may be statically estimated.
-
-; For example in the loop below, jump threading would update the weight of the
-; loop-exiting branch to 0, drastically inflating the frequency of the loop
-; (in the range of billions).
-;
-; This is the CFG of the loop. There is no run-time profile info for edges
-; inside the loop, so branch and block frequencies are estimated as shown:
-;
-; check_1 (16)
-; (8) / |
-; eq_1 | (8)
-; \ |
-; check_2 (16)
-; (8) / |
-; eq_2 | (8)
-; \ |
-; check_3 (16)
-; (1) / |
-; (loop exit) | (15)
-; |
-; latch
-; |
-; (back edge)
-;
-; First we thread eq_1->check_2 to check_3. Frequencies are updated to remove
-; the frequency of eq_1 from check_2 and then the false edge leaving check_2
-; (changed frequencies are highlighted with * *):
-;
-; check_1 (16)
-; (8) / |
-; eq_1~ | (8)
-; / |
-; / check_2 (*8*)
-; / (8) / |
-; \ eq_2 | (*0*)
-; \ \ |
-; ` --- check_3 (16)
-; (1) / |
-; (loop exit) | (15)
-; |
-; latch
-; |
-; (back edge)
-;
-; Next we thread eq_1->check_3 and eq_2->check_3 to check_1 as new edges to
-; the loop latch. Frequencies are updated to remove the frequency of eq_1
-; and eq_3 from check_3 and then the false edge leaving check_3 (changed
-; frequencies are highlighted with * *):
-;
-; check_1 (16)
-; (8) / |
-; eq_1~ | (8)
-; / |
-; / check_2 (*8*)
-; / (8) / |
-; /-- eq_2~ | (*0*)
-; / |
-; / check_3 (*0*)
-; / (*0*) / |
-; | (loop exit) | (*0*)
-; \ |
-; `--------- latch
-; |
-; (back edge)
-;
-; As a result, the loop exit edge ends up with 0 frequency which in turn makes
-; the loop header to have maximum frequency.
-
-declare void @bar()
-
-define void @foo(i32 *%p, i32 %n) !prof !0 {
-entry:
- %enter_loop = icmp eq i32 %n, 0
- br i1 %enter_loop, label %exit, label %check_1, !prof !1
-; CHECK: br i1 %enter_loop, label %exit, label %check_1, !prof !1
-
-check_1:
- %v = load i32, i32* %p
- %cond1 = icmp eq i32 %v, 1
- br i1 %cond1, label %eq_1, label %check_2
-; No metadata:
-; CHECK: br i1 %cond1, label %check_2.thread, label %check_2{{$}}
-
-eq_1:
- call void @bar()
- br label %check_2
-; Verify the new edge:
-; CHECK: check_2.thread:
-; CHECK-NEXT: call void @bar()
-; CHECK-NEXT: br label %latch
-
-check_2:
- %cond2 = icmp eq i32 %v, 2
- br i1 %cond2, label %eq_2, label %check_3
-; No metadata:
-; CHECK: br i1 %cond2, label %eq_2, label %check_3{{$}}
-
-eq_2:
- call void @bar()
- br label %check_3
-; Verify the new edge:
-; CHECK: eq_2:
-; CHECK-NEXT: call void @bar()
-; CHECK-NEXT: br label %latch
-
-check_3:
- %condE = icmp eq i32 %v, 3
- br i1 %condE, label %exit, label %latch
-; No metadata:
-; CHECK: br i1 %condE, label %exit, label %latch{{$}}
-
-latch:
- br label %check_1
-
-exit:
- ret void
-}
-
-!0 = !{!"function_entry_count", i64 120}
-; CHECK-NOT: branch_weights
-!1 = !{!"branch_weights", i32 119, i32 1}
-; CHECK: !1 = !{!"branch_weights", i32 119, i32 1}
-; CHECK-NOT: branch_weights
OpenPOWER on IntegriCloud