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
2
2
; RUN: opt -S -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s
3
3
4
4
; SimplifyCFG should eliminate redundant indirectbr edges.
@@ -8,15 +8,19 @@ declare void @A()
8
8
declare void @B (i32 )
9
9
declare void @C ()
10
10
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 {
12
16
; CHECK-LABEL: @indbrtest0(
13
17
; CHECK-NEXT: entry:
14
18
; CHECK-NEXT: store ptr blockaddress(@indbrtest0, [[BB0:%.*]]), ptr [[P:%.*]], align 8
15
19
; CHECK-NEXT: store ptr blockaddress(@indbrtest0, [[BB1:%.*]]), ptr [[P]], align 8
16
20
; CHECK-NEXT: store ptr blockaddress(@indbrtest0, [[BB2:%.*]]), ptr [[P]], align 8
17
21
; CHECK-NEXT: call void @foo()
18
22
; 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]+]]
20
24
; CHECK: BB0:
21
25
; CHECK-NEXT: call void @A()
22
26
; CHECK-NEXT: br label [[BB1]]
36
40
store ptr blockaddress (@indbrtest0 , %BB2 ), ptr %P
37
41
call void @foo ()
38
42
%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
40
44
BB0:
41
45
call void @A ()
42
46
br label %BB1
@@ -103,10 +107,10 @@ BB0:
103
107
; SimplifyCFG should turn the indirectbr into a conditional branch on the
104
108
; condition of the select.
105
109
106
- define void @indbrtest3 (i1 %cond , ptr %address ) nounwind {
110
+ define void @indbrtest3 (i1 %cond , ptr %address ) nounwind !prof !0 {
107
111
; CHECK-LABEL: @indbrtest3(
108
112
; 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]+]]
110
114
; CHECK: common.ret:
111
115
; CHECK-NEXT: ret void
112
116
; CHECK: L1:
@@ -117,8 +121,8 @@ define void @indbrtest3(i1 %cond, ptr %address) nounwind {
117
121
; CHECK-NEXT: br label [[COMMON_RET]]
118
122
;
119
123
entry:
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
122
126
123
127
L1:
124
128
call void @A ()
@@ -385,3 +389,15 @@ declare i32 @xfunc5x()
385
389
declare i8 @xfunc7x ()
386
390
declare i32 @xselectorx ()
387
391
declare 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 3, i32 5, i32 7}
402
+ ; CHECK: [[PROF2]] = !{!"branch_weights", i32 3, i32 5}
403
+ ;.
0 commit comments