90 lines · plain
1; RUN: split-file %s %t2; RUN: cat %t/main.ll %t/probable-or.prof > %t/probable-or.ll3; RUN: cat %t/main.ll %t/probable-and.prof > %t/probable-and.ll4; RUN: opt -passes='loop(simple-loop-unswitch<nontrivial>)' -S %t/probable-or.ll -o -| FileCheck %t/probable-or.prof5; RUN: opt -passes='loop(simple-loop-unswitch<nontrivial>)' -S %t/probable-and.ll -o -| FileCheck %t/probable-and.prof6 7;--- main.ll8declare i32 @a()9declare i32 @b()10 11define i32 @or(ptr %ptr, i1 %cond) !prof !0 {12entry:13 br label %loop_begin14 15loop_begin:16 %v1 = load i1, ptr %ptr17 %cond_or = or i1 %v1, %cond18 br i1 %cond_or, label %loop_a, label %loop_b, !prof !119 20loop_a:21 call i32 @a()22 br label %latch23 24loop_b:25 call i32 @b()26 br label %latch27 28latch:29 %v2 = load i1, ptr %ptr30 br i1 %v2, label %loop_begin, label %loop_exit, !prof !231 32loop_exit:33 ret i32 034}35 36define i32 @and(ptr %ptr, i1 %cond) !prof !0 {37entry:38 br label %loop_begin39 40loop_begin:41 %v1 = load i1, ptr %ptr42 %cond_and = and i1 %v1, %cond43 br i1 %cond_and, label %loop_a, label %loop_b, !prof !144 45loop_a:46 call i32 @a()47 br label %latch48 49loop_b:50 call i32 @b()51 br label %latch52 53latch:54 %v2 = load i1, ptr %ptr55 br i1 %v2, label %loop_begin, label %loop_exit, !prof !256 57loop_exit:58 ret i32 059}60 61;--- probable-or.prof62!0 = !{!"function_entry_count", i32 10}63!1 = !{!"branch_weights", i32 1, i32 1000}64!2 = !{!"branch_weights", i32 5, i32 7}65; CHECK-LABEL: @or66; CHECK-LABEL: entry:67; CHECK-NEXT: %cond.fr = freeze i1 %cond68; CHECK-NEXT: br i1 %cond.fr, label %entry.split.us, label %entry.split, !prof !169; CHECK-LABEL: @and70; CHECK-LABEL: entry:71; CHECK-NEXT: %cond.fr = freeze i1 %cond72; CHECK-NEXT: br i1 %cond.fr, label %entry.split, label %entry.split.us, !prof !373; CHECK: !1 = !{!"branch_weights", i32 1, i32 1000}74; CHECK: !3 = !{!"unknown", !"simple-loop-unswitch"}75 76;--- probable-and.prof77!0 = !{!"function_entry_count", i32 10}78!1 = !{!"branch_weights", i32 1000, i32 1}79!2 = !{!"branch_weights", i32 5, i32 7}80; CHECK-LABEL: @or81; CHECK-LABEL: entry:82; CHECK-NEXT: %cond.fr = freeze i1 %cond83; CHECK-NEXT: br i1 %cond.fr, label %entry.split.us, label %entry.split, !prof !184; CHECK-LABEL: @and85; CHECK-LABEL: entry:86; CHECK-NEXT: %cond.fr = freeze i1 %cond87; CHECK-NEXT: br i1 %cond.fr, label %entry.split, label %entry.split.us, !prof !388; CHECK: !1 = !{!"unknown", !"simple-loop-unswitch"}89; CHECK: !3 = !{!"branch_weights", i32 1000, i32 1}90