38
38
ret void
39
39
}
40
40
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
-
74
41
define void @test2 (i1 %a , i1 %b ) {
75
42
; CHECK-LABEL: @test2(
76
43
; CHECK-NEXT: entry:
77
44
; CHECK-NEXT: [[C:%.*]] = or i1 [[B:%.*]], false
78
45
; 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]+]]
80
47
; CHECK: common.ret:
81
48
; CHECK-NEXT: ret void
82
49
; CHECK: Y:
@@ -107,7 +74,7 @@ define void @test3(i1 %a, i1 %b) {
107
74
; CHECK-NEXT: entry:
108
75
; CHECK-NEXT: [[C:%.*]] = or i1 [[B:%.*]], false
109
76
; 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]+ ]]
111
78
; CHECK: common.ret:
112
79
; CHECK-NEXT: ret void
113
80
; CHECK: Y:
@@ -138,7 +105,7 @@ define void @test4(i1 %a, i1 %b) {
138
105
; CHECK-NEXT: entry:
139
106
; CHECK-NEXT: [[C:%.*]] = or i1 [[B:%.*]], false
140
107
; 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 ]]
142
109
; CHECK: common.ret:
143
110
; CHECK-NEXT: ret void
144
111
; CHECK: Y:
@@ -1120,7 +1087,6 @@ exit:
1120
1087
!9 = !{!"branch_weights" , i32 7 , i32 6 }
1121
1088
!10 = !{!"branch_weights" , i32 672646 , i32 21604207 }
1122
1089
!11 = !{!"branch_weights" , i32 6960 , i32 21597248 }
1123
- !12 = !{!"these_are_not_the_branch_weights_you_are_looking_for" , i32 3 , i32 5 }
1124
1090
!13 = !{!"branch_weights" , i32 2 , i32 3 }
1125
1091
!14 = !{!"branch_weights" , i32 4 , i32 7 }
1126
1092
!15 = !{!"branch_weights" , i32 99 , i32 1 }
@@ -1136,8 +1102,8 @@ exit:
1136
1102
; CHECK: attributes #[[ATTR2:[0-9]+]] = { noredzone nounwind ssp memory(none) }
1137
1103
;.
1138
1104
; 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 }
1141
1107
; CHECK: [[PROF3]] = !{!"branch_weights", i32 7, i32 1, i32 2}
1142
1108
; CHECK: [[PROF4]] = !{!"branch_weights", i32 49, i32 12, i32 24, i32 35}
1143
1109
; CHECK: [[PROF5]] = !{!"branch_weights", i32 11, i32 5}
0 commit comments