1- ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
1+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals
22; RUN: opt -S -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s
33
44; SimplifyCFG should eliminate redundant indirectbr edges.
@@ -8,15 +8,19 @@ declare void @A()
88declare void @B (i32 )
99declare void @C ()
1010
11- define void @indbrtest0 (ptr %P , ptr %Q ) {
11+ ;.
12+ ; CHECK: @anchor = constant [13 x ptr] [ptr blockaddress(@indbrtest3, %L1), ptr blockaddress(@indbrtest3, %L2), ptr inttoptr (i32 1 to ptr), ptr blockaddress(@indbrtest4, %L1), ptr inttoptr (i32 1 to ptr), ptr inttoptr (i32 1 to ptr), ptr inttoptr (i32 1 to ptr), ptr inttoptr (i32 1 to ptr), ptr inttoptr (i32 1 to ptr), ptr inttoptr (i32 1 to ptr), ptr inttoptr (i32 1 to ptr), ptr inttoptr (i32 1 to ptr), ptr inttoptr (i32 1 to ptr)]
13+ ; CHECK: @xblkx.bbs = internal unnamed_addr constant [9 x ptr] [ptr blockaddress(@indbrtest7, %xlab4x), ptr blockaddress(@indbrtest7, %xlab4x), ptr blockaddress(@indbrtest7, %v2j), ptr blockaddress(@indbrtest7, %xlab4x), ptr blockaddress(@indbrtest7, %xlab4x), ptr blockaddress(@indbrtest7, %xlab4x), ptr blockaddress(@indbrtest7, %xlab4x), ptr blockaddress(@indbrtest7, %xlab4x), ptr blockaddress(@indbrtest7, %v2j)]
14+ ;.
15+ define void @indbrtest0 (ptr %P , ptr %Q ) !prof !0 {
1216; CHECK-LABEL: @indbrtest0(
1317; CHECK-NEXT: entry:
1418; CHECK-NEXT: store ptr blockaddress(@indbrtest0, [[BB0:%.*]]), ptr [[P:%.*]], align 8
1519; CHECK-NEXT: store ptr blockaddress(@indbrtest0, [[BB1:%.*]]), ptr [[P]], align 8
1620; CHECK-NEXT: store ptr blockaddress(@indbrtest0, [[BB2:%.*]]), ptr [[P]], align 8
1721; CHECK-NEXT: call void @foo()
1822; CHECK-NEXT: [[T:%.*]] = load ptr, ptr [[Q:%.*]], align 8
19- ; CHECK-NEXT: indirectbr ptr [[T]], [label [[BB0]], label [[BB1]], label %BB2]
23+ ; CHECK-NEXT: indirectbr ptr [[T]], [label [[BB0]], label [[BB1]], label %BB2], !prof [[PROF1:![0-9]+]]
2024; CHECK: BB0:
2125; CHECK-NEXT: call void @A()
2226; CHECK-NEXT: br label [[BB1]]
3640 store ptr blockaddress (@indbrtest0 , %BB2 ), ptr %P
3741 call void @foo ()
3842 %t = load ptr , ptr %Q
39- indirectbr ptr %t , [label %BB0 , label %BB1 , label %BB2 , label %BB0 , label %BB1 , label %BB2 ]
43+ indirectbr ptr %t , [label %BB0 , label %BB1 , label %BB2 , label %BB0 , label %BB1 , label %BB2 ], !prof !1
4044BB0:
4145 call void @A ()
4246 br label %BB1
@@ -103,10 +107,10 @@ BB0:
103107; SimplifyCFG should turn the indirectbr into a conditional branch on the
104108; condition of the select.
105109
106- define void @indbrtest3 (i1 %cond , ptr %address ) nounwind {
110+ define void @indbrtest3 (i1 %cond , ptr %address ) nounwind !prof !0 {
107111; CHECK-LABEL: @indbrtest3(
108112; CHECK-NEXT: entry:
109- ; CHECK-NEXT: br i1 [[COND:%.*]], label [[L1:%.*]], label [[L2:%.*]]
113+ ; CHECK-NEXT: br i1 [[COND:%.*]], label [[L1:%.*]], label [[L2:%.*]], !prof [[PROF2:![0-9]+]]
110114; CHECK: common.ret:
111115; CHECK-NEXT: ret void
112116; CHECK: L1:
@@ -117,8 +121,8 @@ define void @indbrtest3(i1 %cond, ptr %address) nounwind {
117121; CHECK-NEXT: br label [[COMMON_RET]]
118122;
119123entry:
120- %indirect.goto.dest = select i1 %cond , ptr blockaddress (@indbrtest3 , %L1 ), ptr blockaddress (@indbrtest3 , %L2 )
121- indirectbr ptr %indirect.goto.dest , [label %L1 , label %L2 , label %L3 ]
124+ %indirect.goto.dest = select i1 %cond , ptr blockaddress (@indbrtest3 , %L1 ), ptr blockaddress (@indbrtest3 , %L2 ), !prof !2
125+ indirectbr ptr %indirect.goto.dest , [label %L1 , label %L2 , label %L3 ], !prof !3
122126
123127L1:
124128 call void @A ()
@@ -385,3 +389,15 @@ declare i32 @xfunc5x()
385389declare i8 @xfunc7x ()
386390declare i32 @xselectorx ()
387391declare i32 @xactionx ()
392+
393+ !0 = !{!"function_entry_count" , i32 10 }
394+ !1 = !{!"branch_weights" , i32 3 , i32 5 , i32 7 , i32 11 , i32 13 , i32 17 }
395+ !2 = !{!"branch_weights" , i32 3 , i32 5 }
396+ !3 = !{!"branch_weights" , i32 3 , i32 5 , i32 7 }
397+ ;.
398+ ; CHECK: attributes #[[ATTR0:[0-9]+]] = { nounwind }
399+ ;.
400+ ; CHECK: [[META0:![0-9]+]] = !{!"function_entry_count", i32 10}
401+ ; CHECK: [[PROF1]] = !{!"branch_weights", i32 14, i32 18, i32 24}
402+ ; CHECK: [[PROF2]] = !{!"branch_weights", i32 3, i32 5}
403+ ;.
0 commit comments