3838 ret void
3939}
4040
41- ; Make sure the metadata name string is "branch_weights" before propagating it.
42-
43- define void @fake_weights (i1 %a , i1 %b ) {
44- ; CHECK-LABEL: @fake_weights(
45- ; CHECK-NEXT: entry:
46- ; CHECK-NEXT: [[A_NOT:%.*]] = xor i1 [[A:%.*]], true
47- ; CHECK-NEXT: [[C:%.*]] = or i1 [[B:%.*]], false
48- ; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[A_NOT]], i1 [[C]], i1 false
49- ; CHECK-NEXT: br i1 [[OR_COND]], label [[Z:%.*]], label [[Y:%.*]], !prof [[PROF1:![0-9]+]]
50- ; CHECK: common.ret:
51- ; CHECK-NEXT: ret void
52- ; CHECK: Y:
53- ; CHECK-NEXT: call void @helper(i32 0)
54- ; CHECK-NEXT: br label [[COMMON_RET:%.*]]
55- ; CHECK: Z:
56- ; CHECK-NEXT: call void @helper(i32 1)
57- ; CHECK-NEXT: br label [[COMMON_RET]]
58- ;
59- entry:
60- br i1 %a , label %Y , label %X , !prof !12
61- X:
62- %c = or i1 %b , false
63- br i1 %c , label %Z , label %Y , !prof !1
64-
65- Y:
66- call void @helper (i32 0 )
67- ret void
68-
69- Z:
70- call void @helper (i32 1 )
71- ret void
72- }
73-
7441define void @test2 (i1 %a , i1 %b ) {
7542; CHECK-LABEL: @test2(
7643; CHECK-NEXT: entry:
7744; CHECK-NEXT: [[C:%.*]] = or i1 [[B:%.*]], false
7845; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[A:%.*]], i1 [[C]], i1 false
79- ; CHECK-NEXT: br i1 [[OR_COND]], label [[Z:%.*]], label [[Y:%.*]], !prof [[PROF2 :![0-9]+]]
46+ ; CHECK-NEXT: br i1 [[OR_COND]], label [[Z:%.*]], label [[Y:%.*]], !prof [[PROF1 :![0-9]+]]
8047; CHECK: common.ret:
8148; CHECK-NEXT: ret void
8249; CHECK: Y:
@@ -107,7 +74,7 @@ define void @test3(i1 %a, i1 %b) {
10774; CHECK-NEXT: entry:
10875; CHECK-NEXT: [[C:%.*]] = or i1 [[B:%.*]], false
10976; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[A:%.*]], i1 [[C]], i1 false
110- ; CHECK-NEXT: br i1 [[OR_COND]], label [[Z:%.*]], label [[Y:%.*]], !prof [[PROF1 ]]
77+ ; CHECK-NEXT: br i1 [[OR_COND]], label [[Z:%.*]], label [[Y:%.*]], !prof [[PROF2:![0-9]+ ]]
11178; CHECK: common.ret:
11279; CHECK-NEXT: ret void
11380; CHECK: Y:
@@ -138,7 +105,7 @@ define void @test4(i1 %a, i1 %b) {
138105; CHECK-NEXT: entry:
139106; CHECK-NEXT: [[C:%.*]] = or i1 [[B:%.*]], false
140107; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[A:%.*]], i1 [[C]], i1 false
141- ; CHECK-NEXT: br i1 [[OR_COND]], label [[Z:%.*]], label [[Y:%.*]], !prof [[PROF1 ]]
108+ ; CHECK-NEXT: br i1 [[OR_COND]], label [[Z:%.*]], label [[Y:%.*]], !prof [[PROF2 ]]
142109; CHECK: common.ret:
143110; CHECK-NEXT: ret void
144111; CHECK: Y:
@@ -1120,7 +1087,6 @@ exit:
11201087!9 = !{!"branch_weights" , i32 7 , i32 6 }
11211088!10 = !{!"branch_weights" , i32 672646 , i32 21604207 }
11221089!11 = !{!"branch_weights" , i32 6960 , i32 21597248 }
1123- !12 = !{!"these_are_not_the_branch_weights_you_are_looking_for" , i32 3 , i32 5 }
11241090!13 = !{!"branch_weights" , i32 2 , i32 3 }
11251091!14 = !{!"branch_weights" , i32 4 , i32 7 }
11261092!15 = !{!"branch_weights" , i32 99 , i32 1 }
@@ -1136,8 +1102,8 @@ exit:
11361102; CHECK: attributes #[[ATTR2:[0-9]+]] = { noredzone nounwind ssp memory(none) }
11371103;.
11381104; CHECK: [[PROF0]] = !{!"branch_weights", i32 5, i32 11}
1139- ; CHECK: [[PROF1]] = !{!"branch_weights", i32 1, i32 3 }
1140- ; CHECK: [[PROF2]] = !{!"branch_weights", i32 1, i32 5 }
1105+ ; CHECK: [[PROF1]] = !{!"branch_weights", i32 1, i32 5 }
1106+ ; CHECK: [[PROF2]] = !{!"branch_weights", i32 1, i32 3 }
11411107; CHECK: [[PROF3]] = !{!"branch_weights", i32 7, i32 1, i32 2}
11421108; CHECK: [[PROF4]] = !{!"branch_weights", i32 49, i32 12, i32 24, i32 35}
11431109; CHECK: [[PROF5]] = !{!"branch_weights", i32 11, i32 5}
0 commit comments