Skip to content

Commit 48379f2

Browse files
committed
[NFC][SimplifyCFG] Add more negative tests for profmd-induced speculation avoidance
1 parent e7a7ad1 commit 48379f2

File tree

4 files changed

+196
-37
lines changed

4 files changed

+196
-37
lines changed

llvm/test/Transforms/SimplifyCFG/fold-two-entry-phi-node-with-one-block-profmd.ll

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -79,20 +79,45 @@ end:
7979
ret i32 %res
8080
}
8181

82+
define i32 @almost_predictably_nontaken(i32 %a, i32 %b, i32 %c, i32 %d) {
83+
; CHECK-LABEL: @almost_predictably_nontaken(
84+
; CHECK-NEXT: entry:
85+
; CHECK-NEXT: call void @sideeffect0()
86+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]
87+
; CHECK-NEXT: [[V0:%.*]] = add i32 [[C:%.*]], [[D:%.*]]
88+
; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i32 0, i32 [[V0]], !prof [[PROF1:![0-9]+]]
89+
; CHECK-NEXT: call void @sideeffect1()
90+
; CHECK-NEXT: ret i32 [[RES]]
91+
;
92+
entry:
93+
call void @sideeffect0()
94+
%cmp = icmp eq i32 %a, %b
95+
br i1 %cmp, label %end, label %cond.true, !prof !1 ; probably likely branches to %end
96+
97+
cond.true:
98+
%v0 = add i32 %c, %d
99+
br label %end
100+
101+
end:
102+
%res = phi i32 [ %v0, %cond.true ], [ 0, %entry ]
103+
call void @sideeffect1()
104+
ret i32 %res
105+
}
106+
82107
define i32 @unpredictable(i32 %a, i32 %b, i32 %c, i32 %d) {
83108
; CHECK-LABEL: @unpredictable(
84109
; CHECK-NEXT: entry:
85110
; CHECK-NEXT: call void @sideeffect0()
86111
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]
87112
; CHECK-NEXT: [[V0:%.*]] = add i32 [[C:%.*]], [[D:%.*]]
88-
; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i32 [[V0]], i32 0, !unpredictable !1
113+
; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i32 [[V0]], i32 0, !unpredictable !2
89114
; CHECK-NEXT: call void @sideeffect1()
90115
; CHECK-NEXT: ret i32 [[RES]]
91116
;
92117
entry:
93118
call void @sideeffect0()
94119
%cmp = icmp eq i32 %a, %b
95-
br i1 %cmp, label %cond.true, label %end, !unpredictable !1 ; unpredictable
120+
br i1 %cmp, label %cond.true, label %end, !unpredictable !2 ; unpredictable
96121

97122
cond.true:
98123
%v0 = add i32 %c, %d
@@ -110,14 +135,14 @@ define i32 @unpredictable_yet_taken(i32 %a, i32 %b, i32 %c, i32 %d) {
110135
; CHECK-NEXT: call void @sideeffect0()
111136
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]
112137
; CHECK-NEXT: [[V0:%.*]] = add i32 [[C:%.*]], [[D:%.*]]
113-
; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i32 [[V0]], i32 0, !prof [[PROF0]], !unpredictable !1
138+
; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i32 [[V0]], i32 0, !prof [[PROF0]], !unpredictable !2
114139
; CHECK-NEXT: call void @sideeffect1()
115140
; CHECK-NEXT: ret i32 [[RES]]
116141
;
117142
entry:
118143
call void @sideeffect0()
119144
%cmp = icmp eq i32 %a, %b
120-
br i1 %cmp, label %cond.true, label %end, !prof !0, !unpredictable !1 ; likely branches to %cond.true, yet unpredictable
145+
br i1 %cmp, label %cond.true, label %end, !prof !0, !unpredictable !2 ; likely branches to %cond.true, yet unpredictable
121146

122147
cond.true:
123148
%v0 = add i32 %c, %d
@@ -135,14 +160,14 @@ define i32 @unpredictable_yet_nontaken(i32 %a, i32 %b, i32 %c, i32 %d) {
135160
; CHECK-NEXT: call void @sideeffect0()
136161
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]
137162
; CHECK-NEXT: [[V0:%.*]] = add i32 [[C:%.*]], [[D:%.*]]
138-
; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i32 0, i32 [[V0]], !prof [[PROF0]], !unpredictable !1
163+
; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i32 0, i32 [[V0]], !prof [[PROF0]], !unpredictable !2
139164
; CHECK-NEXT: call void @sideeffect1()
140165
; CHECK-NEXT: ret i32 [[RES]]
141166
;
142167
entry:
143168
call void @sideeffect0()
144169
%cmp = icmp eq i32 %a, %b
145-
br i1 %cmp, label %end, label %cond.true, !prof !0, !unpredictable !1 ; likely branches to %end, yet unpredictable
170+
br i1 %cmp, label %end, label %cond.true, !prof !0, !unpredictable !2 ; likely branches to %end, yet unpredictable
146171

147172
cond.true:
148173
%v0 = add i32 %c, %d
@@ -155,7 +180,9 @@ end:
155180
}
156181

157182
!0 = !{!"branch_weights", i32 99, i32 1}
158-
!1 = !{}
183+
!1 = !{!"branch_weights", i32 70, i32 1}
184+
!2 = !{}
159185

160186
; CHECK: !0 = !{!"branch_weights", i32 99, i32 1}
161-
; CHECK: !1 = !{}
187+
; CHECK: !1 = !{!"branch_weights", i32 70, i32 1}
188+
; CHECK: !2 = !{}

llvm/test/Transforms/SimplifyCFG/fold-two-entry-phi-node-with-two-blocks-profmd.ll

Lines changed: 70 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,36 @@ end:
6464
ret i32 %res
6565
}
6666

67+
define i32 @almost_predictably_taken(i32 %a, i32 %b, i32 %c, i32 %d) {
68+
; CHECK-LABEL: @almost_predictably_taken(
69+
; CHECK-NEXT: entry:
70+
; CHECK-NEXT: call void @sideeffect0()
71+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]
72+
; CHECK-NEXT: [[V0:%.*]] = add i32 [[C:%.*]], [[D:%.*]]
73+
; CHECK-NEXT: [[V1:%.*]] = sub i32 [[C]], [[D]]
74+
; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i32 [[V0]], i32 [[V1]], !prof [[PROF1:![0-9]+]]
75+
; CHECK-NEXT: call void @sideeffect1()
76+
; CHECK-NEXT: ret i32 [[RES]]
77+
;
78+
entry:
79+
call void @sideeffect0()
80+
%cmp = icmp eq i32 %a, %b
81+
br i1 %cmp, label %cond.true, label %cond.false, !prof !1 ; almost likely branches to %cond.true
82+
83+
cond.true:
84+
%v0 = add i32 %c, %d
85+
br label %end
86+
87+
cond.false:
88+
%v1 = sub i32 %c, %d
89+
br label %end
90+
91+
end:
92+
%res = phi i32 [ %v0, %cond.true ], [ %v1, %cond.false ]
93+
call void @sideeffect1()
94+
ret i32 %res
95+
}
96+
6797
define i32 @predictably_nontaken(i32 %a, i32 %b, i32 %c, i32 %d) {
6898
; CHECK-LABEL: @predictably_nontaken(
6999
; CHECK-NEXT: entry:
@@ -94,21 +124,51 @@ end:
94124
ret i32 %res
95125
}
96126

127+
define i32 @almost_predictably_nontaken(i32 %a, i32 %b, i32 %c, i32 %d) {
128+
; CHECK-LABEL: @almost_predictably_nontaken(
129+
; CHECK-NEXT: entry:
130+
; CHECK-NEXT: call void @sideeffect0()
131+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]
132+
; CHECK-NEXT: [[V0:%.*]] = add i32 [[C:%.*]], [[D:%.*]]
133+
; CHECK-NEXT: [[V1:%.*]] = sub i32 [[C]], [[D]]
134+
; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i32 [[V1]], i32 [[V0]], !prof [[PROF1]]
135+
; CHECK-NEXT: call void @sideeffect1()
136+
; CHECK-NEXT: ret i32 [[RES]]
137+
;
138+
entry:
139+
call void @sideeffect0()
140+
%cmp = icmp eq i32 %a, %b
141+
br i1 %cmp, label %cond.false, label %cond.true, !prof !1 ; probably likely branches to %cond.false
142+
143+
cond.true:
144+
%v0 = add i32 %c, %d
145+
br label %end
146+
147+
cond.false:
148+
%v1 = sub i32 %c, %d
149+
br label %end
150+
151+
end:
152+
%res = phi i32 [ %v0, %cond.true ], [ %v1, %cond.false ]
153+
call void @sideeffect1()
154+
ret i32 %res
155+
}
156+
97157
define i32 @unpredictable(i32 %a, i32 %b, i32 %c, i32 %d) {
98158
; CHECK-LABEL: @unpredictable(
99159
; CHECK-NEXT: entry:
100160
; CHECK-NEXT: call void @sideeffect0()
101161
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]
102162
; CHECK-NEXT: [[V0:%.*]] = add i32 [[C:%.*]], [[D:%.*]]
103163
; CHECK-NEXT: [[V1:%.*]] = sub i32 [[C]], [[D]]
104-
; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i32 [[V0]], i32 [[V1]], !unpredictable !1
164+
; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i32 [[V0]], i32 [[V1]], !unpredictable !2
105165
; CHECK-NEXT: call void @sideeffect1()
106166
; CHECK-NEXT: ret i32 [[RES]]
107167
;
108168
entry:
109169
call void @sideeffect0()
110170
%cmp = icmp eq i32 %a, %b
111-
br i1 %cmp, label %cond.true, label %cond.false, !unpredictable !1 ; unpredictable
171+
br i1 %cmp, label %cond.true, label %cond.false, !unpredictable !2 ; unpredictable
112172

113173
cond.true:
114174
%v0 = add i32 %c, %d
@@ -131,14 +191,14 @@ define i32 @unpredictable_yet_taken(i32 %a, i32 %b, i32 %c, i32 %d) {
131191
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]
132192
; CHECK-NEXT: [[V0:%.*]] = add i32 [[C:%.*]], [[D:%.*]]
133193
; CHECK-NEXT: [[V1:%.*]] = sub i32 [[C]], [[D]]
134-
; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i32 [[V0]], i32 [[V1]], !prof [[PROF0]], !unpredictable !1
194+
; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i32 [[V0]], i32 [[V1]], !prof [[PROF0]], !unpredictable !2
135195
; CHECK-NEXT: call void @sideeffect1()
136196
; CHECK-NEXT: ret i32 [[RES]]
137197
;
138198
entry:
139199
call void @sideeffect0()
140200
%cmp = icmp eq i32 %a, %b
141-
br i1 %cmp, label %cond.true, label %cond.false, !prof !0, !unpredictable !1 ; likely branches to %cond.true, yet unpredictable
201+
br i1 %cmp, label %cond.true, label %cond.false, !prof !0, !unpredictable !2 ; likely branches to %cond.true, yet unpredictable
142202

143203
cond.true:
144204
%v0 = add i32 %c, %d
@@ -161,14 +221,14 @@ define i32 @unpredictable_yet_nontaken(i32 %a, i32 %b, i32 %c, i32 %d) {
161221
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]
162222
; CHECK-NEXT: [[V0:%.*]] = add i32 [[C:%.*]], [[D:%.*]]
163223
; CHECK-NEXT: [[V1:%.*]] = sub i32 [[C]], [[D]]
164-
; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i32 [[V1]], i32 [[V0]], !prof [[PROF0]], !unpredictable !1
224+
; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i32 [[V1]], i32 [[V0]], !prof [[PROF0]], !unpredictable !2
165225
; CHECK-NEXT: call void @sideeffect1()
166226
; CHECK-NEXT: ret i32 [[RES]]
167227
;
168228
entry:
169229
call void @sideeffect0()
170230
%cmp = icmp eq i32 %a, %b
171-
br i1 %cmp, label %cond.false, label %cond.true, !prof !0, !unpredictable !1 ; likely branches to %cond.false, yet unpredictable
231+
br i1 %cmp, label %cond.false, label %cond.true, !prof !0, !unpredictable !2 ; likely branches to %cond.false, yet unpredictable
172232

173233
cond.true:
174234
%v0 = add i32 %c, %d
@@ -185,7 +245,9 @@ end:
185245
}
186246

187247
!0 = !{!"branch_weights", i32 99, i32 1}
188-
!1 = !{}
248+
!1 = !{!"branch_weights", i32 70, i32 1}
249+
!2 = !{}
189250

190251
; CHECK: !0 = !{!"branch_weights", i32 99, i32 1}
191-
; CHECK: !1 = !{}
252+
; CHECK: !1 = !{!"branch_weights", i32 70, i32 1}
253+
; CHECK: !2 = !{}

llvm/test/Transforms/SimplifyCFG/preserve-branchweights.ll

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,37 @@ exit:
728728
ret void
729729
}
730730

731+
732+
define void @or_icmps_probably_not_harmful(i32 %x, i32 %y, i8* %p) {
733+
; CHECK-LABEL: @or_icmps_probably_not_harmful(
734+
; CHECK-NEXT: entry:
735+
; CHECK-NEXT: [[EXPECTED_TRUE:%.*]] = icmp sgt i32 [[X:%.*]], -1
736+
; CHECK-NEXT: br i1 [[EXPECTED_TRUE]], label [[EXIT:%.*]], label [[RARE:%.*]], !prof [[PROF19]], !unpredictable !21
737+
; CHECK: rare:
738+
; CHECK-NEXT: [[EXPENSIVE:%.*]] = icmp eq i32 [[Y:%.*]], 0
739+
; CHECK-NEXT: br i1 [[EXPENSIVE]], label [[EXIT]], label [[FALSE:%.*]]
740+
; CHECK: false:
741+
; CHECK-NEXT: store i8 42, i8* [[P:%.*]], align 1
742+
; CHECK-NEXT: br label [[EXIT]]
743+
; CHECK: exit:
744+
; CHECK-NEXT: ret void
745+
;
746+
entry:
747+
%expected_true = icmp sgt i32 %x, -1
748+
br i1 %expected_true, label %exit, label %rare, !prof !15, !unpredictable !20
749+
750+
rare:
751+
%expensive = icmp eq i32 %y, 0
752+
br i1 %expensive, label %exit, label %false
753+
754+
false:
755+
store i8 42, i8* %p, align 1
756+
br label %exit
757+
758+
exit:
759+
ret void
760+
}
761+
731762
; The probability threshold is determined by a TTI setting.
732763
; In this example, we are just short of strongly expected, so speculate.
733764

@@ -737,7 +768,7 @@ define void @or_icmps_not_that_harmful(i32 %x, i32 %y, i8* %p) {
737768
; CHECK-NEXT: [[EXPECTED_TRUE:%.*]] = icmp sgt i32 [[X:%.*]], -1
738769
; CHECK-NEXT: [[EXPENSIVE:%.*]] = icmp eq i32 [[Y:%.*]], 0
739770
; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[EXPECTED_TRUE]], i1 true, i1 [[EXPENSIVE]]
740-
; CHECK-NEXT: br i1 [[OR_COND]], label [[EXIT:%.*]], label [[FALSE:%.*]], !prof [[PROF21:![0-9]+]]
771+
; CHECK-NEXT: br i1 [[OR_COND]], label [[EXIT:%.*]], label [[FALSE:%.*]], !prof [[PROF22:![0-9]+]]
741772
; CHECK: false:
742773
; CHECK-NEXT: store i8 42, i8* [[P:%.*]], align 1
743774
; CHECK-NEXT: br label [[EXIT]]
@@ -769,7 +800,7 @@ define void @or_icmps_not_that_harmful_inverted(i32 %x, i32 %y, i8* %p) {
769800
; CHECK-NEXT: [[EXPECTED_TRUE:%.*]] = icmp sgt i32 [[X:%.*]], -1
770801
; CHECK-NEXT: [[EXPENSIVE:%.*]] = icmp eq i32 [[Y:%.*]], 0
771802
; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[EXPECTED_TRUE]], i1 true, i1 [[EXPENSIVE]]
772-
; CHECK-NEXT: br i1 [[OR_COND]], label [[EXIT:%.*]], label [[FALSE:%.*]], !prof [[PROF22:![0-9]+]]
803+
; CHECK-NEXT: br i1 [[OR_COND]], label [[EXIT:%.*]], label [[FALSE:%.*]], !prof [[PROF23:![0-9]+]]
773804
; CHECK: false:
774805
; CHECK-NEXT: store i8 42, i8* [[P:%.*]], align 1
775806
; CHECK-NEXT: br label [[EXIT]]
@@ -800,7 +831,7 @@ define void @or_icmps_useful(i32 %x, i32 %y, i8* %p) {
800831
; CHECK-NEXT: [[EXPECTED_TRUE:%.*]] = icmp sle i32 [[X:%.*]], -1
801832
; CHECK-NEXT: [[EXPENSIVE:%.*]] = icmp eq i32 [[Y:%.*]], 0
802833
; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[EXPECTED_TRUE]], i1 true, i1 [[EXPENSIVE]]
803-
; CHECK-NEXT: br i1 [[OR_COND]], label [[EXIT:%.*]], label [[FALSE:%.*]], !prof [[PROF23:![0-9]+]]
834+
; CHECK-NEXT: br i1 [[OR_COND]], label [[EXIT:%.*]], label [[FALSE:%.*]], !prof [[PROF24:![0-9]+]]
804835
; CHECK: false:
805836
; CHECK-NEXT: store i8 42, i8* [[P:%.*]], align 1
806837
; CHECK-NEXT: br label [[EXIT]]
@@ -831,7 +862,7 @@ define void @or_icmps_useful_inverted(i32 %x, i32 %y, i8* %p) {
831862
; CHECK-NEXT: [[EXPECTED_FALSE:%.*]] = icmp sgt i32 [[X:%.*]], -1
832863
; CHECK-NEXT: [[EXPENSIVE:%.*]] = icmp eq i32 [[Y:%.*]], 0
833864
; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[EXPECTED_FALSE]], i1 true, i1 [[EXPENSIVE]]
834-
; CHECK-NEXT: br i1 [[OR_COND]], label [[EXIT:%.*]], label [[FALSE:%.*]], !prof [[PROF23]]
865+
; CHECK-NEXT: br i1 [[OR_COND]], label [[EXIT:%.*]], label [[FALSE:%.*]], !prof [[PROF24]]
835866
; CHECK: false:
836867
; CHECK-NEXT: store i8 42, i8* [[P:%.*]], align 1
837868
; CHECK-NEXT: br label [[EXIT]]
@@ -960,7 +991,7 @@ define void @and_icmps_not_that_harmful(i32 %x, i32 %y, i8* %p) {
960991
; CHECK-NEXT: [[EXPECTED_FALSE:%.*]] = icmp sgt i32 [[X:%.*]], -1
961992
; CHECK-NEXT: [[EXPENSIVE:%.*]] = icmp eq i32 [[Y:%.*]], 0
962993
; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[EXPECTED_FALSE]], i1 [[EXPENSIVE]], i1 false
963-
; CHECK-NEXT: br i1 [[OR_COND]], label [[FALSE:%.*]], label [[EXIT:%.*]], !prof [[PROF24:![0-9]+]]
994+
; CHECK-NEXT: br i1 [[OR_COND]], label [[FALSE:%.*]], label [[EXIT:%.*]], !prof [[PROF25:![0-9]+]]
964995
; CHECK: false:
965996
; CHECK-NEXT: store i8 42, i8* [[P:%.*]], align 1
966997
; CHECK-NEXT: br label [[EXIT]]
@@ -992,7 +1023,7 @@ define void @and_icmps_not_that_harmful_inverted(i32 %x, i32 %y, i8* %p) {
9921023
; CHECK-NEXT: [[EXPECTED_TRUE:%.*]] = icmp sle i32 [[X:%.*]], -1
9931024
; CHECK-NEXT: [[EXPENSIVE:%.*]] = icmp eq i32 [[Y:%.*]], 0
9941025
; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[EXPECTED_TRUE]], i1 [[EXPENSIVE]], i1 false
995-
; CHECK-NEXT: br i1 [[OR_COND]], label [[FALSE:%.*]], label [[EXIT:%.*]], !prof [[PROF24]]
1026+
; CHECK-NEXT: br i1 [[OR_COND]], label [[FALSE:%.*]], label [[EXIT:%.*]], !prof [[PROF25]]
9961027
; CHECK: false:
9971028
; CHECK-NEXT: store i8 42, i8* [[P:%.*]], align 1
9981029
; CHECK-NEXT: br label [[EXIT]]
@@ -1023,7 +1054,7 @@ define void @and_icmps_useful(i32 %x, i32 %y, i8* %p) {
10231054
; CHECK-NEXT: [[EXPECTED_TRUE:%.*]] = icmp sgt i32 [[X:%.*]], -1
10241055
; CHECK-NEXT: [[EXPENSIVE:%.*]] = icmp eq i32 [[Y:%.*]], 0
10251056
; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[EXPECTED_TRUE]], i1 [[EXPENSIVE]], i1 false
1026-
; CHECK-NEXT: br i1 [[OR_COND]], label [[FALSE:%.*]], label [[EXIT:%.*]], !prof [[PROF25:![0-9]+]]
1057+
; CHECK-NEXT: br i1 [[OR_COND]], label [[FALSE:%.*]], label [[EXIT:%.*]], !prof [[PROF26:![0-9]+]]
10271058
; CHECK: false:
10281059
; CHECK-NEXT: store i8 42, i8* [[P:%.*]], align 1
10291060
; CHECK-NEXT: br label [[EXIT]]
@@ -1054,7 +1085,7 @@ define void @and_icmps_useful_inverted(i32 %x, i32 %y, i8* %p) {
10541085
; CHECK-NEXT: [[EXPECTED_FALSE:%.*]] = icmp sle i32 [[X:%.*]], -1
10551086
; CHECK-NEXT: [[EXPENSIVE:%.*]] = icmp eq i32 [[Y:%.*]], 0
10561087
; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[EXPECTED_FALSE]], i1 [[EXPENSIVE]], i1 false
1057-
; CHECK-NEXT: br i1 [[OR_COND]], label [[FALSE:%.*]], label [[EXIT:%.*]], !prof [[PROF25]]
1088+
; CHECK-NEXT: br i1 [[OR_COND]], label [[FALSE:%.*]], label [[EXIT:%.*]], !prof [[PROF26]]
10581089
; CHECK: false:
10591090
; CHECK-NEXT: store i8 42, i8* [[P:%.*]], align 1
10601091
; CHECK-NEXT: br label [[EXIT]]
@@ -1098,6 +1129,7 @@ exit:
10981129
!17 = !{!"branch_weights", i32 98, i32 1}
10991130
!18 = !{!"branch_weights", i32 1, i32 98}
11001131
!19 = !{!"branch_weights", i32 0, i32 0}
1132+
!20 = !{}
11011133

11021134
;.
11031135
; CHECK: attributes #[[ATTR0:[0-9]+]] = { nounwind uwtable }
@@ -1125,9 +1157,10 @@ exit:
11251157
; CHECK: [[PROF18]] = !{!"branch_weights", i32 8, i32 2}
11261158
; CHECK: [[PROF19]] = !{!"branch_weights", i32 99, i32 1}
11271159
; CHECK: [[PROF20]] = !{!"branch_weights", i32 1, i32 99}
1128-
; CHECK: [[PROF21]] = !{!"branch_weights", i32 197, i32 1}
1129-
; CHECK: [[PROF22]] = !{!"branch_weights", i32 100, i32 98}
1130-
; CHECK: [[PROF23]] = !{!"branch_weights", i32 101, i32 99}
1131-
; CHECK: [[PROF24]] = !{!"branch_weights", i32 1, i32 197}
1132-
; CHECK: [[PROF25]] = !{!"branch_weights", i32 99, i32 101}
1160+
; CHECK: [[META21:![0-9]+]] = !{}
1161+
; CHECK: [[PROF22]] = !{!"branch_weights", i32 197, i32 1}
1162+
; CHECK: [[PROF23]] = !{!"branch_weights", i32 100, i32 98}
1163+
; CHECK: [[PROF24]] = !{!"branch_weights", i32 101, i32 99}
1164+
; CHECK: [[PROF25]] = !{!"branch_weights", i32 1, i32 197}
1165+
; CHECK: [[PROF26]] = !{!"branch_weights", i32 99, i32 101}
11331166
;.

0 commit comments

Comments
 (0)