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