1
- ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2
- ; RUN: opt -S -passes=jump-threading < %s | FileCheck %s
1
+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals
2
+ ; RUN: opt -S -passes=jump-threading -debug-only=branch-prob < %s 2>&1 | FileCheck %s
3
+ ; REQUIRES: asserts
4
+
5
+ ; CHECK-LABEL: ---- Branch Probability Info : unfold1 ----
6
+ ; CHECK: set edge cond.false -> 0 successor probability to 0x20000000 / 0x80000000 = 25.00%
7
+ ; CHECK: set edge cond.false -> 1 successor probability to 0x60000000 / 0x80000000 = 75.00%
8
+ ; CHECK-LABEL: ---- Branch Probability Info : unfold2 ----
9
+ ; CHECK: set edge cond.false -> 0 successor probability to 0x20000000 / 0x80000000 = 25.00%
10
+ ; CHECK: set edge cond.false -> 1 successor probability to 0x60000000 / 0x80000000 = 75.00%
3
11
4
12
declare void @foo ()
5
13
declare void @bar ()
@@ -11,6 +19,9 @@ declare void @quux()
11
19
; Mostly theoretical since instruction combining simplifies all selects of
12
20
; booleans where at least one operand is true/false/undef.
13
21
22
+ ;.
23
+ ; CHECK: @[[ANCHOR:[a-zA-Z0-9_$"\\.-]+]] = constant [3 x ptr] [ptr blockaddress(@test_indirectbr, [[L1:%.*]]), ptr inttoptr (i32 1 to ptr), ptr blockaddress(@test_indirectbr, [[L3:%.*]])]
24
+ ;.
14
25
define void @test_br (i1 %cond , i1 %value ) nounwind {
15
26
; CHECK-LABEL: @test_br(
16
27
; CHECK-NEXT: entry:
265
276
ret void
266
277
}
267
278
268
- define void @unfold1 (double %x , double %y ) nounwind {
279
+ define void @unfold1 (double %x , double %y ) nounwind !prof !1 {
269
280
; CHECK-LABEL: @unfold1(
270
281
; CHECK-NEXT: entry:
271
282
; CHECK-NEXT: [[SUB:%.*]] = fsub double [[X:%.*]], [[Y:%.*]]
@@ -274,7 +285,7 @@ define void @unfold1(double %x, double %y) nounwind {
274
285
; CHECK: cond.false:
275
286
; CHECK-NEXT: [[ADD:%.*]] = fadd double [[X]], [[Y]]
276
287
; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double [[ADD]], 1.000000e+01
277
- ; CHECK-NEXT: br i1 [[CMP1]], label [[COND_END4]], label [[IF_THEN:%.*]]
288
+ ; CHECK-NEXT: br i1 [[CMP1]], label [[COND_END4]], label [[IF_THEN:%.*]], !prof [[PROF1:![0-9]+]]
278
289
; CHECK: cond.end4:
279
290
; CHECK-NEXT: [[COND5:%.*]] = phi double [ [[SUB]], [[ENTRY:%.*]] ], [ [[ADD]], [[COND_FALSE]] ]
280
291
; CHECK-NEXT: [[CMP6:%.*]] = fcmp oeq double [[COND5]], 0.000000e+00
@@ -293,7 +304,7 @@ entry:
293
304
cond.false: ; preds = %entry
294
305
%add = fadd double %x , %y
295
306
%cmp1 = fcmp ogt double %add , 1 .000000e+01
296
- %add. = select i1 %cmp1 , double %add , double 0 .000000e+00
307
+ %add. = select i1 %cmp1 , double %add , double 0 .000000e+00 , !prof !0
297
308
br label %cond.end4
298
309
299
310
cond.end4: ; preds = %entry, %cond.false
@@ -311,7 +322,7 @@ if.end: ; preds = %if.then, %cond.end4
311
322
}
312
323
313
324
314
- define void @unfold2 (i32 %x , i32 %y ) nounwind {
325
+ define void @unfold2 (i32 %x , i32 %y ) nounwind !prof !1 {
315
326
; CHECK-LABEL: @unfold2(
316
327
; CHECK-NEXT: entry:
317
328
; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 [[X:%.*]], [[Y:%.*]]
@@ -320,7 +331,7 @@ define void @unfold2(i32 %x, i32 %y) nounwind {
320
331
; CHECK: cond.false:
321
332
; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[X]], [[Y]]
322
333
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[ADD]], 10
323
- ; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[COND_END4:%.*]]
334
+ ; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[COND_END4:%.*]], !prof [[PROF1]]
324
335
; CHECK: cond.end4:
325
336
; CHECK-NEXT: [[COND5:%.*]] = phi i32 [ [[ADD]], [[COND_FALSE]] ]
326
337
; CHECK-NEXT: [[CMP6:%.*]] = icmp eq i32 [[COND5]], 0
@@ -339,7 +350,7 @@ entry:
339
350
cond.false: ; preds = %entry
340
351
%add = add nsw i32 %x , %y
341
352
%cmp1 = icmp sgt i32 %add , 10
342
- %add. = select i1 %cmp1 , i32 0 , i32 %add
353
+ %add. = select i1 %cmp1 , i32 0 , i32 %add , !prof !0
343
354
br label %cond.end4
344
355
345
356
cond.end4: ; preds = %entry, %cond.false
@@ -652,3 +663,13 @@ if.end:
652
663
%v1 = select i1 %v , i32 %s , i32 42
653
664
ret i32 %v1
654
665
}
666
+
667
+ ; branch_weights overflowing uint32_t
668
+ !0 = !{!"branch_weights" , i64 1073741824 , i64 3221225472 }
669
+ !1 = !{!"function_entry_count" , i64 1984 }
670
+ ;.
671
+ ; CHECK: attributes #[[ATTR0:[0-9]+]] = { nounwind }
672
+ ;.
673
+ ; CHECK: [[META0:![0-9]+]] = !{!"function_entry_count", i64 1984}
674
+ ; CHECK: [[PROF1]] = !{!"branch_weights", i64 1073741824, i64 3221225472}
675
+ ;.
0 commit comments