1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2 ; RUN: opt < %s -passes='function(lower-allow-check)' -S | FileCheck %s --check-prefixes=NOPROFILE
3 ; RUN: opt < %s -passes='function(lower-allow-check)' -lower-allow-check-random-rate=0 -S | FileCheck %s --check-prefixes=NONE
4 ; RUN: opt < %s -passes='function(lower-allow-check)' -lower-allow-check-random-rate=1 -S | FileCheck %s --check-prefixes=ALL
6 ; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check<cutoffs[22]=990000>)' -S | FileCheck %s --check-prefixes=HOT99
7 ; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check<cutoffs[22]=700000>)' -S | FileCheck %s --check-prefixes=HOT70
8 ; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check<cutoffs[22]=990000>)' -lower-allow-check-random-rate=0 -S | FileCheck %s --check-prefixes=NONE99
9 ; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check<cutoffs[22]=700000>)' -lower-allow-check-random-rate=1 -S | FileCheck %s --check-prefixes=ALL70
11 ; -lower-allow-check-percentile-cutoff is deprecated and will be removed in the future;
12 ; use the cutoffs parameter to the lower-allow-check pass, as shown above.
13 ; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check)' -lower-allow-check-percentile-cutoff-hot=990000 -S | FileCheck %s --check-prefixes=HOT99
14 ; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check)' -lower-allow-check-percentile-cutoff-hot=700000 -S | FileCheck %s --check-prefixes=HOT70
15 ; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check)' -lower-allow-check-random-rate=0 -lower-allow-check-percentile-cutoff-hot=990000 -S | FileCheck %s --check-prefixes=NONE99
16 ; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check)' -lower-allow-check-random-rate=1 -lower-allow-check-percentile-cutoff-hot=700000 -S | FileCheck %s --check-prefixes=ALL70
18 target triple = "x86_64-pc-linux-gnu"
20 declare void @llvm.ubsantrap(i8 immarg)
21 declare i1 @llvm.allow.ubsan.check(i8 immarg)
23 define dso_local noundef i32 @simple(ptr noundef readonly %0) {
24 ; NOPROFILE-LABEL: define dso_local noundef i32 @simple(
25 ; NOPROFILE-SAME: ptr noundef readonly [[TMP0:%.*]]) {
26 ; NOPROFILE-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null
27 ; NOPROFILE-NEXT: [[HOT:%.*]] = xor i1 true, true
28 ; NOPROFILE-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]
29 ; NOPROFILE-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]
31 ; NOPROFILE-NEXT: tail call void @llvm.ubsantrap(i8 22)
32 ; NOPROFILE-NEXT: unreachable
34 ; NOPROFILE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
35 ; NOPROFILE-NEXT: ret i32 [[TMP5]]
37 ; NONE-LABEL: define dso_local noundef i32 @simple(
38 ; NONE-SAME: ptr noundef readonly [[TMP0:%.*]]) {
39 ; NONE-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null
40 ; NONE-NEXT: [[HOT:%.*]] = xor i1 false, true
41 ; NONE-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]
42 ; NONE-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]
44 ; NONE-NEXT: tail call void @llvm.ubsantrap(i8 22)
45 ; NONE-NEXT: unreachable
47 ; NONE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
48 ; NONE-NEXT: ret i32 [[TMP5]]
50 ; ALL-LABEL: define dso_local noundef i32 @simple(
51 ; ALL-SAME: ptr noundef readonly [[TMP0:%.*]]) {
52 ; ALL-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null
53 ; ALL-NEXT: [[HOT:%.*]] = xor i1 true, true
54 ; ALL-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]
55 ; ALL-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
57 ; ALL-NEXT: tail call void @llvm.ubsantrap(i8 22)
58 ; ALL-NEXT: unreachable
60 ; ALL-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
61 ; ALL-NEXT: ret i32 [[TMP5]]
63 ; HOT99-LABEL: define dso_local noundef i32 @simple(
64 ; HOT99-SAME: ptr noundef readonly [[TMP0:%.*]]) {
65 ; HOT99-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null
66 ; HOT99-NEXT: [[HOT:%.*]] = xor i1 true, true
67 ; HOT99-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]
68 ; HOT99-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]
70 ; HOT99-NEXT: tail call void @llvm.ubsantrap(i8 22)
71 ; HOT99-NEXT: unreachable
73 ; HOT99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
74 ; HOT99-NEXT: ret i32 [[TMP5]]
76 ; HOT70-LABEL: define dso_local noundef i32 @simple(
77 ; HOT70-SAME: ptr noundef readonly [[TMP0:%.*]]) {
78 ; HOT70-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null
79 ; HOT70-NEXT: [[HOT:%.*]] = xor i1 true, true
80 ; HOT70-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]
81 ; HOT70-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]
83 ; HOT70-NEXT: tail call void @llvm.ubsantrap(i8 22)
84 ; HOT70-NEXT: unreachable
86 ; HOT70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
87 ; HOT70-NEXT: ret i32 [[TMP5]]
89 ; NONE99-LABEL: define dso_local noundef i32 @simple(
90 ; NONE99-SAME: ptr noundef readonly [[TMP0:%.*]]) {
91 ; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null
92 ; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true
93 ; NONE99-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]
94 ; NONE99-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
96 ; NONE99-NEXT: tail call void @llvm.ubsantrap(i8 22)
97 ; NONE99-NEXT: unreachable
99 ; NONE99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
100 ; NONE99-NEXT: ret i32 [[TMP5]]
102 ; ALL70-LABEL: define dso_local noundef i32 @simple(
103 ; ALL70-SAME: ptr noundef readonly [[TMP0:%.*]]) {
104 ; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null
105 ; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true
106 ; ALL70-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]
107 ; ALL70-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
109 ; ALL70-NEXT: tail call void @llvm.ubsantrap(i8 22)
110 ; ALL70-NEXT: unreachable
112 ; ALL70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
113 ; ALL70-NEXT: ret i32 [[TMP5]]
115 %chk = icmp eq ptr %0, null
116 %allow = call i1 @llvm.allow.ubsan.check(i8 22)
117 %hot = xor i1 %allow, true
118 %2 = or i1 %chk, %hot
119 br i1 %2, label %3, label %4
122 tail call void @llvm.ubsantrap(i8 22)
126 %5 = load i32, ptr %0, align 4
131 define dso_local noundef i32 @hot(ptr noundef readonly %0) !prof !36 {
132 ; NOPROFILE-LABEL: define dso_local noundef i32 @hot(
133 ; NOPROFILE-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF16:![0-9]+]] {
134 ; NOPROFILE-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null
135 ; NOPROFILE-NEXT: [[HOT:%.*]] = xor i1 true, true
136 ; NOPROFILE-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]
137 ; NOPROFILE-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]
139 ; NOPROFILE-NEXT: tail call void @llvm.ubsantrap(i8 22)
140 ; NOPROFILE-NEXT: unreachable
142 ; NOPROFILE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
143 ; NOPROFILE-NEXT: ret i32 [[TMP5]]
145 ; NONE-LABEL: define dso_local noundef i32 @hot(
146 ; NONE-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF16:![0-9]+]] {
147 ; NONE-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null
148 ; NONE-NEXT: [[HOT:%.*]] = xor i1 false, true
149 ; NONE-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]
150 ; NONE-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]
152 ; NONE-NEXT: tail call void @llvm.ubsantrap(i8 22)
153 ; NONE-NEXT: unreachable
155 ; NONE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
156 ; NONE-NEXT: ret i32 [[TMP5]]
158 ; ALL-LABEL: define dso_local noundef i32 @hot(
159 ; ALL-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF16:![0-9]+]] {
160 ; ALL-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null
161 ; ALL-NEXT: [[HOT:%.*]] = xor i1 true, true
162 ; ALL-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]
163 ; ALL-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
165 ; ALL-NEXT: tail call void @llvm.ubsantrap(i8 22)
166 ; ALL-NEXT: unreachable
168 ; ALL-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
169 ; ALL-NEXT: ret i32 [[TMP5]]
171 ; HOT99-LABEL: define dso_local noundef i32 @hot(
172 ; HOT99-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF16:![0-9]+]] {
173 ; HOT99-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null
174 ; HOT99-NEXT: [[HOT:%.*]] = xor i1 false, true
175 ; HOT99-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]
176 ; HOT99-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]
178 ; HOT99-NEXT: tail call void @llvm.ubsantrap(i8 22)
179 ; HOT99-NEXT: unreachable
181 ; HOT99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
182 ; HOT99-NEXT: ret i32 [[TMP5]]
184 ; HOT70-LABEL: define dso_local noundef i32 @hot(
185 ; HOT70-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF16:![0-9]+]] {
186 ; HOT70-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null
187 ; HOT70-NEXT: [[HOT:%.*]] = xor i1 true, true
188 ; HOT70-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]
189 ; HOT70-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]
191 ; HOT70-NEXT: tail call void @llvm.ubsantrap(i8 22)
192 ; HOT70-NEXT: unreachable
194 ; HOT70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
195 ; HOT70-NEXT: ret i32 [[TMP5]]
197 ; NONE99-LABEL: define dso_local noundef i32 @hot(
198 ; NONE99-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF16:![0-9]+]] {
199 ; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null
200 ; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true
201 ; NONE99-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]
202 ; NONE99-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
204 ; NONE99-NEXT: tail call void @llvm.ubsantrap(i8 22)
205 ; NONE99-NEXT: unreachable
207 ; NONE99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
208 ; NONE99-NEXT: ret i32 [[TMP5]]
210 ; ALL70-LABEL: define dso_local noundef i32 @hot(
211 ; ALL70-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF16:![0-9]+]] {
212 ; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null
213 ; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true
214 ; ALL70-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]
215 ; ALL70-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
217 ; ALL70-NEXT: tail call void @llvm.ubsantrap(i8 22)
218 ; ALL70-NEXT: unreachable
220 ; ALL70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
221 ; ALL70-NEXT: ret i32 [[TMP5]]
223 %chk = icmp eq ptr %0, null
224 %allow = call i1 @llvm.allow.ubsan.check(i8 22)
225 %hot = xor i1 %allow, true
226 %2 = or i1 %chk, %hot
227 br i1 %2, label %3, label %4
230 tail call void @llvm.ubsantrap(i8 22)
234 %5 = load i32, ptr %0, align 4
238 define dso_local noundef i32 @veryHot(ptr noundef readonly %0) !prof !39 {
239 ; NOPROFILE-LABEL: define dso_local noundef i32 @veryHot(
240 ; NOPROFILE-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF17:![0-9]+]] {
241 ; NOPROFILE-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null
242 ; NOPROFILE-NEXT: [[HOT:%.*]] = xor i1 true, true
243 ; NOPROFILE-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]
244 ; NOPROFILE-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]
246 ; NOPROFILE-NEXT: tail call void @llvm.ubsantrap(i8 22)
247 ; NOPROFILE-NEXT: unreachable
249 ; NOPROFILE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
250 ; NOPROFILE-NEXT: ret i32 [[TMP5]]
252 ; NONE-LABEL: define dso_local noundef i32 @veryHot(
253 ; NONE-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF17:![0-9]+]] {
254 ; NONE-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null
255 ; NONE-NEXT: [[HOT:%.*]] = xor i1 false, true
256 ; NONE-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]
257 ; NONE-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]
259 ; NONE-NEXT: tail call void @llvm.ubsantrap(i8 22)
260 ; NONE-NEXT: unreachable
262 ; NONE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
263 ; NONE-NEXT: ret i32 [[TMP5]]
265 ; ALL-LABEL: define dso_local noundef i32 @veryHot(
266 ; ALL-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF17:![0-9]+]] {
267 ; ALL-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null
268 ; ALL-NEXT: [[HOT:%.*]] = xor i1 true, true
269 ; ALL-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]
270 ; ALL-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
272 ; ALL-NEXT: tail call void @llvm.ubsantrap(i8 22)
273 ; ALL-NEXT: unreachable
275 ; ALL-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
276 ; ALL-NEXT: ret i32 [[TMP5]]
278 ; HOT99-LABEL: define dso_local noundef i32 @veryHot(
279 ; HOT99-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF17:![0-9]+]] {
280 ; HOT99-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null
281 ; HOT99-NEXT: [[HOT:%.*]] = xor i1 false, true
282 ; HOT99-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]
283 ; HOT99-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]
285 ; HOT99-NEXT: tail call void @llvm.ubsantrap(i8 22)
286 ; HOT99-NEXT: unreachable
288 ; HOT99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
289 ; HOT99-NEXT: ret i32 [[TMP5]]
291 ; HOT70-LABEL: define dso_local noundef i32 @veryHot(
292 ; HOT70-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF17:![0-9]+]] {
293 ; HOT70-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null
294 ; HOT70-NEXT: [[HOT:%.*]] = xor i1 false, true
295 ; HOT70-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]
296 ; HOT70-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]
298 ; HOT70-NEXT: tail call void @llvm.ubsantrap(i8 22)
299 ; HOT70-NEXT: unreachable
301 ; HOT70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
302 ; HOT70-NEXT: ret i32 [[TMP5]]
304 ; NONE99-LABEL: define dso_local noundef i32 @veryHot(
305 ; NONE99-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF17:![0-9]+]] {
306 ; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null
307 ; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true
308 ; NONE99-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]
309 ; NONE99-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
311 ; NONE99-NEXT: tail call void @llvm.ubsantrap(i8 22)
312 ; NONE99-NEXT: unreachable
314 ; NONE99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
315 ; NONE99-NEXT: ret i32 [[TMP5]]
317 ; ALL70-LABEL: define dso_local noundef i32 @veryHot(
318 ; ALL70-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF17:![0-9]+]] {
319 ; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null
320 ; ALL70-NEXT: [[HOT:%.*]] = xor i1 false, true
321 ; ALL70-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]
322 ; ALL70-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
324 ; ALL70-NEXT: tail call void @llvm.ubsantrap(i8 22)
325 ; ALL70-NEXT: unreachable
327 ; ALL70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
328 ; ALL70-NEXT: ret i32 [[TMP5]]
330 %chk = icmp eq ptr %0, null
331 %allow = call i1 @llvm.allow.ubsan.check(i8 22)
332 %hot = xor i1 %allow, true
333 %2 = or i1 %chk, %hot
334 br i1 %2, label %3, label %4
337 tail call void @llvm.ubsantrap(i8 22)
341 %5 = load i32, ptr %0, align 4
346 define dso_local noundef i32 @branchColdFnHot(i32 noundef %0, ptr noundef readonly %1) !prof !39 {
347 ; NOPROFILE-LABEL: define dso_local noundef i32 @branchColdFnHot(
348 ; NOPROFILE-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF17]] {
349 ; NOPROFILE-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
350 ; NOPROFILE-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]]
352 ; NOPROFILE-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null
353 ; NOPROFILE-NEXT: [[HOT:%.*]] = xor i1 true, true
354 ; NOPROFILE-NEXT: [[TMP11:%.*]] = or i1 [[TMP5]], [[HOT]]
355 ; NOPROFILE-NEXT: br i1 [[TMP11]], label [[TMP6:%.*]], label [[TMP7:%.*]]
357 ; NOPROFILE-NEXT: tail call void @llvm.ubsantrap(i8 22)
358 ; NOPROFILE-NEXT: unreachable
360 ; NOPROFILE-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
361 ; NOPROFILE-NEXT: br label [[TMP9]]
363 ; NOPROFILE-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
364 ; NOPROFILE-NEXT: ret i32 [[TMP10]]
366 ; NONE-LABEL: define dso_local noundef i32 @branchColdFnHot(
367 ; NONE-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF17]] {
368 ; NONE-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
369 ; NONE-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]]
371 ; NONE-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null
372 ; NONE-NEXT: [[HOT:%.*]] = xor i1 false, true
373 ; NONE-NEXT: [[TMP11:%.*]] = or i1 [[TMP5]], [[HOT]]
374 ; NONE-NEXT: br i1 [[TMP11]], label [[TMP6:%.*]], label [[TMP7:%.*]]
376 ; NONE-NEXT: tail call void @llvm.ubsantrap(i8 22)
377 ; NONE-NEXT: unreachable
379 ; NONE-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
380 ; NONE-NEXT: br label [[TMP9]]
382 ; NONE-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
383 ; NONE-NEXT: ret i32 [[TMP10]]
385 ; ALL-LABEL: define dso_local noundef i32 @branchColdFnHot(
386 ; ALL-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF17]] {
387 ; ALL-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
388 ; ALL-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]]
390 ; ALL-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null
391 ; ALL-NEXT: [[HOT:%.*]] = xor i1 true, true
392 ; ALL-NEXT: [[TMP5:%.*]] = or i1 [[CHK]], [[HOT]]
393 ; ALL-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]
395 ; ALL-NEXT: tail call void @llvm.ubsantrap(i8 22)
396 ; ALL-NEXT: unreachable
398 ; ALL-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
399 ; ALL-NEXT: br label [[TMP9]]
401 ; ALL-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
402 ; ALL-NEXT: ret i32 [[TMP10]]
404 ; HOT99-LABEL: define dso_local noundef i32 @branchColdFnHot(
405 ; HOT99-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF17]] {
406 ; HOT99-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
407 ; HOT99-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]]
409 ; HOT99-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null
410 ; HOT99-NEXT: [[HOT:%.*]] = xor i1 true, true
411 ; HOT99-NEXT: [[TMP11:%.*]] = or i1 [[TMP5]], [[HOT]]
412 ; HOT99-NEXT: br i1 [[TMP11]], label [[TMP6:%.*]], label [[TMP7:%.*]]
414 ; HOT99-NEXT: tail call void @llvm.ubsantrap(i8 22)
415 ; HOT99-NEXT: unreachable
417 ; HOT99-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
418 ; HOT99-NEXT: br label [[TMP9]]
420 ; HOT99-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
421 ; HOT99-NEXT: ret i32 [[TMP10]]
423 ; HOT70-LABEL: define dso_local noundef i32 @branchColdFnHot(
424 ; HOT70-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF17]] {
425 ; HOT70-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
426 ; HOT70-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]]
428 ; HOT70-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null
429 ; HOT70-NEXT: [[HOT:%.*]] = xor i1 true, true
430 ; HOT70-NEXT: [[TMP11:%.*]] = or i1 [[TMP5]], [[HOT]]
431 ; HOT70-NEXT: br i1 [[TMP11]], label [[TMP6:%.*]], label [[TMP7:%.*]]
433 ; HOT70-NEXT: tail call void @llvm.ubsantrap(i8 22)
434 ; HOT70-NEXT: unreachable
436 ; HOT70-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
437 ; HOT70-NEXT: br label [[TMP9]]
439 ; HOT70-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
440 ; HOT70-NEXT: ret i32 [[TMP10]]
442 ; NONE99-LABEL: define dso_local noundef i32 @branchColdFnHot(
443 ; NONE99-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF17]] {
444 ; NONE99-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
445 ; NONE99-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]]
447 ; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null
448 ; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true
449 ; NONE99-NEXT: [[TMP5:%.*]] = or i1 [[CHK]], [[HOT]]
450 ; NONE99-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]
452 ; NONE99-NEXT: tail call void @llvm.ubsantrap(i8 22)
453 ; NONE99-NEXT: unreachable
455 ; NONE99-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
456 ; NONE99-NEXT: br label [[TMP9]]
458 ; NONE99-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
459 ; NONE99-NEXT: ret i32 [[TMP10]]
461 ; ALL70-LABEL: define dso_local noundef i32 @branchColdFnHot(
462 ; ALL70-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF17]] {
463 ; ALL70-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
464 ; ALL70-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]]
466 ; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null
467 ; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true
468 ; ALL70-NEXT: [[TMP5:%.*]] = or i1 [[CHK]], [[HOT]]
469 ; ALL70-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]
471 ; ALL70-NEXT: tail call void @llvm.ubsantrap(i8 22)
472 ; ALL70-NEXT: unreachable
474 ; ALL70-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
475 ; ALL70-NEXT: br label [[TMP9]]
477 ; ALL70-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
478 ; ALL70-NEXT: ret i32 [[TMP10]]
480 %3 = icmp eq i32 %0, 0
481 br i1 %3, label %9, label %4, !prof !38
484 %chk = icmp eq ptr %1, null
485 %allow = call i1 @llvm.allow.ubsan.check(i8 22)
486 %hot = xor i1 %allow, true
487 %5 = or i1 %chk, %hot
488 br i1 %5, label %6, label %7
491 tail call void @llvm.ubsantrap(i8 22) #2
495 %8 = load i32, ptr %1, align 4
499 %10 = phi i32 [ %8, %7 ], [ 0, %2 ]
503 define dso_local noundef i32 @branchHotFnCold(i32 noundef %0, ptr noundef readonly %1) !prof !36 {
504 ; NOPROFILE-LABEL: define dso_local noundef i32 @branchHotFnCold(
505 ; NOPROFILE-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF16]] {
506 ; NOPROFILE-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
507 ; NOPROFILE-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]]
509 ; NOPROFILE-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null
510 ; NOPROFILE-NEXT: [[HOT:%.*]] = xor i1 true, true
511 ; NOPROFILE-NEXT: [[TMP11:%.*]] = or i1 [[TMP5]], [[HOT]]
512 ; NOPROFILE-NEXT: br i1 [[TMP11]], label [[TMP6:%.*]], label [[TMP7:%.*]]
514 ; NOPROFILE-NEXT: tail call void @llvm.ubsantrap(i8 22)
515 ; NOPROFILE-NEXT: unreachable
517 ; NOPROFILE-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
518 ; NOPROFILE-NEXT: br label [[TMP9]]
520 ; NOPROFILE-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
521 ; NOPROFILE-NEXT: ret i32 [[TMP10]]
523 ; NONE-LABEL: define dso_local noundef i32 @branchHotFnCold(
524 ; NONE-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF16]] {
525 ; NONE-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
526 ; NONE-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]]
528 ; NONE-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null
529 ; NONE-NEXT: [[HOT:%.*]] = xor i1 false, true
530 ; NONE-NEXT: [[TMP11:%.*]] = or i1 [[TMP5]], [[HOT]]
531 ; NONE-NEXT: br i1 [[TMP11]], label [[TMP6:%.*]], label [[TMP7:%.*]]
533 ; NONE-NEXT: tail call void @llvm.ubsantrap(i8 22)
534 ; NONE-NEXT: unreachable
536 ; NONE-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
537 ; NONE-NEXT: br label [[TMP9]]
539 ; NONE-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
540 ; NONE-NEXT: ret i32 [[TMP10]]
542 ; ALL-LABEL: define dso_local noundef i32 @branchHotFnCold(
543 ; ALL-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF16]] {
544 ; ALL-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
545 ; ALL-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]]
547 ; ALL-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null
548 ; ALL-NEXT: [[HOT:%.*]] = xor i1 true, true
549 ; ALL-NEXT: [[TMP5:%.*]] = or i1 [[CHK]], [[HOT]]
550 ; ALL-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]
552 ; ALL-NEXT: tail call void @llvm.ubsantrap(i8 22)
553 ; ALL-NEXT: unreachable
555 ; ALL-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
556 ; ALL-NEXT: br label [[TMP9]]
558 ; ALL-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
559 ; ALL-NEXT: ret i32 [[TMP10]]
561 ; HOT99-LABEL: define dso_local noundef i32 @branchHotFnCold(
562 ; HOT99-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF16]] {
563 ; HOT99-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
564 ; HOT99-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]]
566 ; HOT99-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null
567 ; HOT99-NEXT: [[HOT:%.*]] = xor i1 false, true
568 ; HOT99-NEXT: [[TMP11:%.*]] = or i1 [[TMP5]], [[HOT]]
569 ; HOT99-NEXT: br i1 [[TMP11]], label [[TMP6:%.*]], label [[TMP7:%.*]]
571 ; HOT99-NEXT: tail call void @llvm.ubsantrap(i8 22)
572 ; HOT99-NEXT: unreachable
574 ; HOT99-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
575 ; HOT99-NEXT: br label [[TMP9]]
577 ; HOT99-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
578 ; HOT99-NEXT: ret i32 [[TMP10]]
580 ; HOT70-LABEL: define dso_local noundef i32 @branchHotFnCold(
581 ; HOT70-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF16]] {
582 ; HOT70-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
583 ; HOT70-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]]
585 ; HOT70-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null
586 ; HOT70-NEXT: [[HOT:%.*]] = xor i1 true, true
587 ; HOT70-NEXT: [[TMP11:%.*]] = or i1 [[TMP5]], [[HOT]]
588 ; HOT70-NEXT: br i1 [[TMP11]], label [[TMP6:%.*]], label [[TMP7:%.*]]
590 ; HOT70-NEXT: tail call void @llvm.ubsantrap(i8 22)
591 ; HOT70-NEXT: unreachable
593 ; HOT70-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
594 ; HOT70-NEXT: br label [[TMP9]]
596 ; HOT70-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
597 ; HOT70-NEXT: ret i32 [[TMP10]]
599 ; NONE99-LABEL: define dso_local noundef i32 @branchHotFnCold(
600 ; NONE99-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF16]] {
601 ; NONE99-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
602 ; NONE99-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]]
604 ; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null
605 ; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true
606 ; NONE99-NEXT: [[TMP5:%.*]] = or i1 [[CHK]], [[HOT]]
607 ; NONE99-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]
609 ; NONE99-NEXT: tail call void @llvm.ubsantrap(i8 22)
610 ; NONE99-NEXT: unreachable
612 ; NONE99-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
613 ; NONE99-NEXT: br label [[TMP9]]
615 ; NONE99-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
616 ; NONE99-NEXT: ret i32 [[TMP10]]
618 ; ALL70-LABEL: define dso_local noundef i32 @branchHotFnCold(
619 ; ALL70-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF16]] {
620 ; ALL70-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
621 ; ALL70-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]]
623 ; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null
624 ; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true
625 ; ALL70-NEXT: [[TMP5:%.*]] = or i1 [[CHK]], [[HOT]]
626 ; ALL70-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]
628 ; ALL70-NEXT: tail call void @llvm.ubsantrap(i8 22)
629 ; ALL70-NEXT: unreachable
631 ; ALL70-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
632 ; ALL70-NEXT: br label [[TMP9]]
634 ; ALL70-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
635 ; ALL70-NEXT: ret i32 [[TMP10]]
637 %3 = icmp eq i32 %0, 0
638 br i1 %3, label %9, label %4, !prof !37
641 %chk = icmp eq ptr %1, null
642 %allow = call i1 @llvm.allow.ubsan.check(i8 22)
643 %hot = xor i1 %allow, true
644 %5 = or i1 %chk, %hot
645 br i1 %5, label %6, label %7
648 tail call void @llvm.ubsantrap(i8 22) #2
652 %8 = load i32, ptr %1, align 4
656 %10 = phi i32 [ %8, %7 ], [ 0, %2 ]
660 !llvm.module.flags = !{!6}
661 !6 = !{i32 1, !"ProfileSummary", !7}
662 !7 = !{!8, !9, !10, !11, !12, !13, !14, !17}
663 !8 = !{!"ProfileFormat", !"InstrProf"}
664 !9 = !{!"TotalCount", i64 30000}
665 !10 = !{!"MaxCount", i64 10000}
666 !11 = !{!"MaxInternalCount", i64 10000}
667 !12 = !{!"MaxFunctionCount", i64 10000}
668 !13 = !{!"NumCounts", i64 3}
669 !14 = !{!"NumFunctions", i64 5}
670 !17 = !{!"DetailedSummary", !18}
671 !18 = !{!19, !29, !30, !32, !34}
672 !19 = !{i32 10000, i64 10000, i32 3}
673 !29 = !{i32 950000, i64 5000, i32 3}
674 !30 = !{i32 990000, i64 500, i32 4}
675 !32 = !{i32 999900, i64 250, i32 4}
676 !34 = !{i32 999999, i64 1, i32 6}
678 !36 = !{!"function_entry_count", i64 1000}
679 !39 = !{!"function_entry_count", i64 7000}
681 !37 = !{!"branch_weights", i32 1, i32 1000}
682 !38 = !{!"branch_weights", i32 1000, i32 1}
685 ; NOPROFILE: [[PROF16]] = !{!"function_entry_count", i64 1000}
686 ; NOPROFILE: [[PROF17]] = !{!"function_entry_count", i64 7000}
687 ; NOPROFILE: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}
688 ; NOPROFILE: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}
690 ; NONE: [[PROF16]] = !{!"function_entry_count", i64 1000}
691 ; NONE: [[PROF17]] = !{!"function_entry_count", i64 7000}
692 ; NONE: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}
693 ; NONE: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}
695 ; ALL: [[PROF16]] = !{!"function_entry_count", i64 1000}
696 ; ALL: [[PROF17]] = !{!"function_entry_count", i64 7000}
697 ; ALL: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}
698 ; ALL: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}
700 ; HOT99: [[PROF16]] = !{!"function_entry_count", i64 1000}
701 ; HOT99: [[PROF17]] = !{!"function_entry_count", i64 7000}
702 ; HOT99: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}
703 ; HOT99: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}
705 ; HOT70: [[PROF16]] = !{!"function_entry_count", i64 1000}
706 ; HOT70: [[PROF17]] = !{!"function_entry_count", i64 7000}
707 ; HOT70: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}
708 ; HOT70: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}
710 ; NONE99: [[PROF16]] = !{!"function_entry_count", i64 1000}
711 ; NONE99: [[PROF17]] = !{!"function_entry_count", i64 7000}
712 ; NONE99: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}
713 ; NONE99: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}
715 ; ALL70: [[PROF16]] = !{!"function_entry_count", i64 1000}
716 ; ALL70: [[PROF17]] = !{!"function_entry_count", i64 7000}
717 ; ALL70: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}
718 ; ALL70: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}