1- ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
1+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all -- version 5
22; RUN: opt -p loop-unroll -scev-cheap-expansion-budget=2 -S %s | FileCheck --check-prefix=BUDGET2 %s
33; RUN: opt -p loop-unroll -scev-cheap-expansion-budget=3 -S %s | FileCheck --check-prefix=BUDGET3 %s
44
5- define i32 @test_expansion_cost_2 (i32 %start , i32 %end ) {
5+ ; Note that BUDGET3 will expose a conditional branch going to the same label.
6+ ; This is expected, and the profile information associated will be dropped when
7+ ; the branch is simplified to unconditional.
8+
9+ define i32 @test_expansion_cost_2 (i32 %start , i32 %end ) !prof !0 {
610; BUDGET2-LABEL: define i32 @test_expansion_cost_2(
7- ; BUDGET2-SAME: i32 [[START:%.*]], i32 [[END:%.*]]) {
11+ ; BUDGET2-SAME: i32 [[START:%.*]], i32 [[END:%.*]]) !prof [[PROF0:![0-9]+]] {
812; BUDGET2-NEXT: [[ENTRY:.*]]:
913; BUDGET2-NEXT: [[SUB:%.*]] = add i32 [[END]], -1
1014; BUDGET2-NEXT: br label %[[LOOP_HEADER:.*]]
1115; BUDGET2: [[LOOP_HEADER]]:
1216; BUDGET2-NEXT: [[IV:%.*]] = phi i32 [ [[START]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ]
1317; BUDGET2-NEXT: [[C:%.*]] = icmp eq i32 [[IV]], [[SUB]]
14- ; BUDGET2-NEXT: br i1 [[C]], label %[[THEN:.*]], label %[[LOOP_LATCH]]
18+ ; BUDGET2-NEXT: br i1 [[C]], label %[[THEN:.*]], label %[[LOOP_LATCH]], !prof [[PROF1:![0-9]+]]
1519; BUDGET2: [[THEN]]:
1620; BUDGET2-NEXT: br label %[[LOOP_LATCH]]
1721; BUDGET2: [[LOOP_LATCH]]:
1822; BUDGET2-NEXT: [[IV_NEXT]] = add nsw i32 [[IV]], 1
1923; BUDGET2-NEXT: [[EC:%.*]] = icmp eq i32 [[IV_NEXT]], [[END]]
20- ; BUDGET2-NEXT: br i1 [[EC]], label %[[EXIT:.*]], label %[[LOOP_HEADER]]
24+ ; BUDGET2-NEXT: br i1 [[EC]], label %[[EXIT:.*]], label %[[LOOP_HEADER]], !prof [[PROF2:![0-9]+]], !llvm.loop [[LOOP3:![0-9]+]]
2125; BUDGET2: [[EXIT]]:
2226; BUDGET2-NEXT: ret i32 0
2327;
2428; BUDGET3-LABEL: define i32 @test_expansion_cost_2(
25- ; BUDGET3-SAME: i32 [[START:%.*]], i32 [[END:%.*]]) {
29+ ; BUDGET3-SAME: i32 [[START:%.*]], i32 [[END:%.*]]) !prof [[PROF0:![0-9]+]] {
2630; BUDGET3-NEXT: [[ENTRY:.*]]:
2731; BUDGET3-NEXT: [[SUB:%.*]] = add i32 [[END]], -1
2832; BUDGET3-NEXT: [[TMP0:%.*]] = sub i32 [[SUB]], [[START]]
2933; BUDGET3-NEXT: [[TMP1:%.*]] = icmp ne i32 [[TMP0]], 0
30- ; BUDGET3-NEXT: br i1 [[TMP1]], label %[[ENTRY_SPLIT:.*]], label %[[EXIT_PEEL_BEGIN:.*]]
34+ ; BUDGET3-NEXT: br i1 [[TMP1]], label %[[ENTRY_SPLIT:.*]], label %[[EXIT_PEEL_BEGIN:.*]], !prof [[PROF1:![0-9]+]]
3135; BUDGET3: [[ENTRY_SPLIT]]:
3236; BUDGET3-NEXT: br label %[[LOOP_HEADER:.*]]
3337; BUDGET3: [[LOOP_HEADER]]:
3438; BUDGET3-NEXT: [[IV:%.*]] = phi i32 [ [[START]], %[[ENTRY_SPLIT]] ], [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ]
3539; BUDGET3-NEXT: [[C:%.*]] = icmp eq i32 [[IV]], [[SUB]]
36- ; BUDGET3-NEXT: br i1 [[C]], label %[[THEN:.*]], label %[[LOOP_LATCH]]
40+ ; BUDGET3-NEXT: br i1 [[C]], label %[[THEN:.*]], label %[[LOOP_LATCH]], !prof [[PROF2:![0-9]+]]
3741; BUDGET3: [[THEN]]:
3842; BUDGET3-NEXT: br label %[[LOOP_LATCH]]
3943; BUDGET3: [[LOOP_LATCH]]:
4044; BUDGET3-NEXT: [[IV_NEXT]] = add nsw i32 [[IV]], 1
4145; BUDGET3-NEXT: [[TMP2:%.*]] = sub i32 [[END]], 1
4246; BUDGET3-NEXT: [[EC:%.*]] = icmp eq i32 [[IV_NEXT]], [[TMP2]]
43- ; BUDGET3-NEXT: br i1 [[EC]], label %[[EXIT_PEEL_BEGIN_LOOPEXIT:.*]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP0 :![0-9]+]]
47+ ; BUDGET3-NEXT: br i1 [[EC]], label %[[EXIT_PEEL_BEGIN_LOOPEXIT:.*]], label %[[LOOP_HEADER]], !prof [[PROF3:![0-9]+]], ! llvm.loop [[LOOP4 :![0-9]+]]
4448; BUDGET3: [[EXIT_PEEL_BEGIN_LOOPEXIT]]:
4549; BUDGET3-NEXT: [[DOTPH:%.*]] = phi i32 [ [[IV_NEXT]], %[[LOOP_LATCH]] ]
4650; BUDGET3-NEXT: br label %[[EXIT_PEEL_BEGIN]]
@@ -49,13 +53,13 @@ define i32 @test_expansion_cost_2(i32 %start, i32 %end) {
4953; BUDGET3-NEXT: br label %[[LOOP_HEADER_PEEL:.*]]
5054; BUDGET3: [[LOOP_HEADER_PEEL]]:
5155; BUDGET3-NEXT: [[C_PEEL:%.*]] = icmp eq i32 [[TMP3]], [[SUB]]
52- ; BUDGET3-NEXT: br i1 [[C_PEEL]], label %[[THEN_PEEL:.*]], label %[[LOOP_LATCH_PEEL:.*]]
56+ ; BUDGET3-NEXT: br i1 [[C_PEEL]], label %[[THEN_PEEL:.*]], label %[[LOOP_LATCH_PEEL:.*]], !prof [[PROF2]]
5357; BUDGET3: [[THEN_PEEL]]:
5458; BUDGET3-NEXT: br label %[[LOOP_LATCH_PEEL]]
5559; BUDGET3: [[LOOP_LATCH_PEEL]]:
5660; BUDGET3-NEXT: [[IV_NEXT_PEEL:%.*]] = add nsw i32 [[TMP3]], 1
5761; BUDGET3-NEXT: [[EC_PEEL:%.*]] = icmp eq i32 [[IV_NEXT_PEEL]], [[END]]
58- ; BUDGET3-NEXT: br i1 [[EC_PEEL]], label %[[EXIT_PEEL_NEXT:.*]], label %[[EXIT_PEEL_NEXT]]
62+ ; BUDGET3-NEXT: br i1 [[EC_PEEL]], label %[[EXIT_PEEL_NEXT:.*]], label %[[EXIT_PEEL_NEXT]], !prof [[PROF3]]
5963; BUDGET3: [[EXIT_PEEL_NEXT]]:
6064; BUDGET3-NEXT: br label %[[LOOP_HEADER_PEEL_NEXT:.*]]
6165; BUDGET3: [[LOOP_HEADER_PEEL_NEXT]]:
@@ -70,20 +74,37 @@ entry:
7074loop.header:
7175 %iv = phi i32 [ %start , %entry ], [ %iv.next , %loop.latch ]
7276 %c = icmp eq i32 %iv , %sub
73- br i1 %c , label %then , label %loop.latch
77+ br i1 %c , label %then , label %loop.latch , !prof !1
7478
7579then:
7680 br label %loop.latch
7781
7882loop.latch:
7983 %iv.next = add nsw i32 %iv , 1
8084 %ec = icmp eq i32 %iv.next , %end
81- br i1 %ec , label %exit , label %loop.header
85+ br i1 %ec , label %exit , label %loop.header , !prof !2 , !llvm.loop !3
8286
8387exit:
8488 ret i32 0
8589}
90+
91+ !0 = !{!"function_entry_count" , i32 10 }
92+ !1 = !{!"branch_weights" , i32 2 , i32 3 }
93+ !2 = !{!"branch_weights" , i32 1 , i32 10 }
94+ !3 = distinct !{!3 , !4 }
95+ !4 = !{!"llvm.loop.estimated_trip_count" , i32 42 }
96+ ;.
97+ ; BUDGET2: [[PROF0]] = !{!"function_entry_count", i32 10}
98+ ; BUDGET2: [[PROF1]] = !{!"branch_weights", i32 2, i32 3}
99+ ; BUDGET2: [[PROF2]] = !{!"branch_weights", i32 1, i32 10}
100+ ; BUDGET2: [[LOOP3]] = distinct !{[[LOOP3]], [[META4:![0-9]+]]}
101+ ; BUDGET2: [[META4]] = !{!"llvm.loop.estimated_trip_count", i32 42}
86102;.
87- ; BUDGET3: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]]}
88- ; BUDGET3: [[META1]] = !{!"llvm.loop.peeled.count", i32 1}
103+ ; BUDGET3: [[PROF0]] = !{!"function_entry_count", i32 10}
104+ ; BUDGET3: [[PROF1]] = !{!"branch_weights", i32 10, i32 1}
105+ ; BUDGET3: [[PROF2]] = !{!"branch_weights", i32 2, i32 3}
106+ ; BUDGET3: [[PROF3]] = !{!"branch_weights", i32 1, i32 10}
107+ ; BUDGET3: [[LOOP4]] = distinct !{[[LOOP4]], [[META5:![0-9]+]], [[META6:![0-9]+]]}
108+ ; BUDGET3: [[META5]] = !{!"llvm.loop.peeled.count", i32 1}
109+ ; BUDGET3: [[META6]] = !{!"llvm.loop.estimated_trip_count", i32 41}
89110;.
0 commit comments