xref: /llvm-project/llvm/test/Transforms/SampleProfile/profile-inference-rebalance-large.ll (revision bb6497ffa6a88d1b3a32101d9b6519094d75ef2a)
1f72b76cdSArthur Eubanks; RUN: opt < %s -passes=pseudo-probe,sample-profile -sample-profile-use-profi -sample-profile-file=%S/Inputs/profile-inference-rebalance-large.prof | opt -passes='print<branch-prob>' -disable-output 2>&1 | FileCheck %s
2f72b76cdSArthur Eubanks; RUN: opt < %s -passes=pseudo-probe,sample-profile -sample-profile-use-profi -sample-profile-file=%S/Inputs/profile-inference-rebalance-large.prof | opt -passes='print<block-freq>' -disable-output 2>&1 | FileCheck %s --check-prefix=CHECK2
313d1364aSspupyrev
413d1364aSspupyrev; The test verifies that counts can rebalanced in switch statements that contain
513d1364aSspupyrev; both 'known' and 'unknown' basic blocks.
613d1364aSspupyrev;
713d1364aSspupyrev;                      +---------+
813d1364aSspupyrev;   +----------------- | b15 [?] |
913d1364aSspupyrev;   |                  +---------+
1013d1364aSspupyrev;   |                    ^
1113d1364aSspupyrev;   |                    |
1213d1364aSspupyrev;   |                    |
1313d1364aSspupyrev;   |  +---------+     +--------------+     +---------+
1413d1364aSspupyrev;   |  | b13 [?] | <-- |  b11 [3300]  | --> | b14 [?] |
1513d1364aSspupyrev;   |  +---------+     +--------------+     +---------+
1613d1364aSspupyrev;   |    |               |          |         |
1713d1364aSspupyrev;   |    |               |          |         |
1813d1364aSspupyrev;   |    |               v          |         |
1913d1364aSspupyrev;   |    |             +---------+  |         |
2013d1364aSspupyrev;   |    |             | b12 [0] |  |         |
2113d1364aSspupyrev;   |    |             +---------+  |         |
2213d1364aSspupyrev;   |    |               |          |         |
2313d1364aSspupyrev;   |    |               |          |         |
2413d1364aSspupyrev;   |    |               v          v         |
2513d1364aSspupyrev;   |    |             +--------------+       |
2613d1364aSspupyrev;   |    +-----------> |              | <-----+
2713d1364aSspupyrev;   |                  |  b16 [3300]  |
2813d1364aSspupyrev;   +----------------> |              |
2913d1364aSspupyrev;                      +--------------+
3013d1364aSspupyrev
3113d1364aSspupyrev@yydebug = dso_local global i32 0, align 4
3213d1364aSspupyrev
3313d1364aSspupyrev; Function Attrs: nounwind uwtable
3413d1364aSspupyrevdefine dso_local i32 @foo1(i32 %0, i32 %1) #0 {
3513d1364aSspupyrevb11:
3613d1364aSspupyrev  call void @llvm.pseudoprobe(i64 7682762345278052905, i64 1, i32 0, i64 -1)
3713d1364aSspupyrev  %cmp = icmp ne i32 %0, 0
3813d1364aSspupyrev  switch i32 %1, label %b12 [
3913d1364aSspupyrev    i32 1, label %b13
4013d1364aSspupyrev    i32 2, label %b14
4113d1364aSspupyrev    i32 3, label %b15
4213d1364aSspupyrev    i32 4, label %b16
4313d1364aSspupyrev  ]
44*bb6497ffSMircea Trofin; CHECK:  edge %b11 -> %b12 probability is 0x00000000 / 0x80000000 = 0.00%
45*bb6497ffSMircea Trofin; CHECK:  edge %b11 -> %b13 probability is 0x20000000 / 0x80000000 = 25.00%
46*bb6497ffSMircea Trofin; CHECK:  edge %b11 -> %b14 probability is 0x20000000 / 0x80000000 = 25.00%
47*bb6497ffSMircea Trofin; CHECK:  edge %b11 -> %b15 probability is 0x20000000 / 0x80000000 = 25.00%
48*bb6497ffSMircea Trofin; CHECK:  edge %b11 -> %b16 probability is 0x20000000 / 0x80000000 = 25.00%
4913d1364aSspupyrev; CHECK2: - b11: float = {{.*}}, int = {{.*}}, count = 3300
5013d1364aSspupyrev
5113d1364aSspupyrevb12:
5213d1364aSspupyrev  call void @llvm.pseudoprobe(i64 7682762345278052905, i64 2, i32 0, i64 -1)
5313d1364aSspupyrev  br label %b16
5413d1364aSspupyrev; CHECK2: - b12: float = {{.*}}, int = {{.*}}, count = 0
5513d1364aSspupyrev
5613d1364aSspupyrevb13:
5713d1364aSspupyrev  call void @llvm.pseudoprobe(i64 7682762345278052905, i64 3, i32 0, i64 -1)
5813d1364aSspupyrev  br label %b16
5913d1364aSspupyrev; CHECK2: - b13: float = {{.*}}, int = {{.*}}, count = 825
6013d1364aSspupyrev
6113d1364aSspupyrevb14:
6213d1364aSspupyrev  call void @llvm.pseudoprobe(i64 7682762345278052905, i64 4, i32 0, i64 -1)
6313d1364aSspupyrev  br label %b16
6413d1364aSspupyrev; CHECK2: - b14: float = {{.*}}, int = {{.*}}, count = 825
6513d1364aSspupyrev
6613d1364aSspupyrevb15:
6713d1364aSspupyrev  call void @llvm.pseudoprobe(i64 7682762345278052905, i64 5, i32 0, i64 -1)
6813d1364aSspupyrev  br label %b16
6913d1364aSspupyrev; CHECK2: - b15: float = {{.*}}, int = {{.*}}, count = 825
7013d1364aSspupyrev
7113d1364aSspupyrevb16:
7213d1364aSspupyrev  call void @llvm.pseudoprobe(i64 7682762345278052905, i64 6, i32 0, i64 -1)
7313d1364aSspupyrev  ret i32 %1
7413d1364aSspupyrev; CHECK2: - b16: float = {{.*}}, int = {{.*}}, count = 3300
7513d1364aSspupyrev}
7613d1364aSspupyrev
7713d1364aSspupyrev
7813d1364aSspupyrev; The test verifies that counts can rebalanced even when control-flow ends at
7913d1364aSspupyrev; a basic block with an unknown count.
8013d1364aSspupyrev;
8113d1364aSspupyrev;                 +-----------+
8213d1364aSspupyrev;                 | b21 [128] | -+
8313d1364aSspupyrev;                 +-----------+  |
8413d1364aSspupyrev;                   |            |
8513d1364aSspupyrev;                   v            |
8613d1364aSspupyrev;                 +-----------+  |
8713d1364aSspupyrev;                 | b22 [128] |  |
8813d1364aSspupyrev;                 +-----------+  |
8913d1364aSspupyrev;                   |            |
9013d1364aSspupyrev;                   v            |
9113d1364aSspupyrev;                 +-----------+  |
9213d1364aSspupyrev;   +------------ | b23 [128] | <+
9313d1364aSspupyrev;   |             +-----------+
9413d1364aSspupyrev;   |               |
9513d1364aSspupyrev;   v               v
9613d1364aSspupyrev; +---------+     +-----------+
9713d1364aSspupyrev; | b26 [?] | <-- | b24 [128] |
9813d1364aSspupyrev; +---------+     +-----------+
9913d1364aSspupyrev;   |               |
10013d1364aSspupyrev;   |               v
10113d1364aSspupyrev;   |             +-----------+
10213d1364aSspupyrev;   |             |  b25 [?]  |
10313d1364aSspupyrev;   |             +-----------+
10413d1364aSspupyrev;   |               |
10513d1364aSspupyrev;   |               v
10613d1364aSspupyrev;   |             +-----------+
10713d1364aSspupyrev;   +-----------> |  b27 [?]  | -+
10813d1364aSspupyrev;                 +-----------+  |
10913d1364aSspupyrev;                   |            |
11013d1364aSspupyrev;                   v            |
11113d1364aSspupyrev;                 +-----------+  |
11213d1364aSspupyrev;                 |  b28 [?]  |  |
11313d1364aSspupyrev;                 +-----------+  |
11413d1364aSspupyrev;                   |            |
11513d1364aSspupyrev;                   v            |
11613d1364aSspupyrev;                 +-----------+  |
11713d1364aSspupyrev;                 |  b29 [?]  | <+
11813d1364aSspupyrev;                 +-----------+
11913d1364aSspupyrev
12013d1364aSspupyrevdefine dso_local i32 @foo2(i32 %0, i32 %1) #0 {
12113d1364aSspupyrevb21:
12213d1364aSspupyrev  call void @llvm.pseudoprobe(i64 2494702099028631698, i64 1, i32 0, i64 -1)
12313d1364aSspupyrev  %cmp = icmp ne i32 %0, 0
12413d1364aSspupyrev  br i1 %cmp, label %b22, label %b23
125*bb6497ffSMircea Trofin; CHECK:  edge %b21 -> %b22 probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
126*bb6497ffSMircea Trofin; CHECK:  edge %b21 -> %b23 probability is 0x00000000 / 0x80000000 = 0.00%
12713d1364aSspupyrev; CHECK2: - b21: float = {{.*}}, int = {{.*}}, count = 128
12813d1364aSspupyrev
12913d1364aSspupyrevb22:
13013d1364aSspupyrev  call void @llvm.pseudoprobe(i64 2494702099028631698, i64 2, i32 0, i64 -1)
13113d1364aSspupyrev  br label %b23
13213d1364aSspupyrev
13313d1364aSspupyrevb23:
13413d1364aSspupyrev  call void @llvm.pseudoprobe(i64 2494702099028631698, i64 3, i32 0, i64 -1)
13513d1364aSspupyrev  br i1 %cmp, label %b24, label %b26
136*bb6497ffSMircea Trofin; CHECK:  edge %b23 -> %b24 probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
137*bb6497ffSMircea Trofin; CHECK:  edge %b23 -> %b26 probability is 0x00000000 / 0x80000000 = 0.00%
13813d1364aSspupyrev; CHECK2: - b23: float = {{.*}}, int = {{.*}}, count = 128
13913d1364aSspupyrev
14013d1364aSspupyrevb24:
14113d1364aSspupyrev  call void @llvm.pseudoprobe(i64 2494702099028631698, i64 4, i32 0, i64 -1)
14213d1364aSspupyrev  br i1 %cmp, label %b25, label %b26
143*bb6497ffSMircea Trofin; CHECK:  edge %b24 -> %b25 probability is 0x40000000 / 0x80000000 = 50.00%
144*bb6497ffSMircea Trofin; CHECK:  edge %b24 -> %b26 probability is 0x40000000 / 0x80000000 = 50.00%
14513d1364aSspupyrev
14613d1364aSspupyrevb25:
14713d1364aSspupyrev  call void @llvm.pseudoprobe(i64 2494702099028631698, i64 5, i32 0, i64 -1)
14813d1364aSspupyrev  br label %b27
14913d1364aSspupyrev; CHECK2: - b25: float = {{.*}}, int = {{.*}}, count = 64
15013d1364aSspupyrev
15113d1364aSspupyrevb26:
15213d1364aSspupyrev  call void @llvm.pseudoprobe(i64 2494702099028631698, i64 6, i32 0, i64 -1)
15313d1364aSspupyrev  br label %b27
15413d1364aSspupyrev; CHECK2: - b26: float = {{.*}}, int = {{.*}}, count = 64
15513d1364aSspupyrev
15613d1364aSspupyrevb27:
15713d1364aSspupyrev  call void @llvm.pseudoprobe(i64 2494702099028631698, i64 7, i32 0, i64 -1)
15813d1364aSspupyrev  br i1 %cmp, label %b28, label %b29
159*bb6497ffSMircea Trofin; CHECK:  edge %b27 -> %b28 probability is 0x40000000 / 0x80000000 = 50.00%
160*bb6497ffSMircea Trofin; CHECK:  edge %b27 -> %b29 probability is 0x40000000 / 0x80000000 = 50.00%
16113d1364aSspupyrev; CHECK2: - b27: float = {{.*}}, int = {{.*}}, count = 128
16213d1364aSspupyrev
16313d1364aSspupyrevb28:
16413d1364aSspupyrev  call void @llvm.pseudoprobe(i64 2494702099028631698, i64 8, i32 0, i64 -1)
16513d1364aSspupyrev  br label %b29
16613d1364aSspupyrev; CHECK2: - b28: float = {{.*}}, int = {{.*}}, count = 64
16713d1364aSspupyrev
16813d1364aSspupyrevb29:
16913d1364aSspupyrev  call void @llvm.pseudoprobe(i64 2494702099028631698, i64 9, i32 0, i64 -1)
17013d1364aSspupyrev  ret i32 %1
17113d1364aSspupyrev; CHECK2: - b29: float = {{.*}}, int = {{.*}}, count = 128
17213d1364aSspupyrev}
17313d1364aSspupyrev
17413d1364aSspupyrev
17513d1364aSspupyrev; The test verifies a flexible mode of rebalancing in which some jumps to known
17613d1364aSspupyrev; basic blocks are ignored.
17713d1364aSspupyrev;
17813d1364aSspupyrev;                 +------------+
17913d1364aSspupyrev;                 | b31 [500]  |
18013d1364aSspupyrev;                 +------------+
18113d1364aSspupyrev;                   |
18213d1364aSspupyrev;                   v
18313d1364aSspupyrev; +---------+     +------------+
18413d1364aSspupyrev; | b33 [?] | <-- | b32 [1500] | <-----+
18513d1364aSspupyrev; +---------+     +------------+       |
18613d1364aSspupyrev;   |               |                  |
18713d1364aSspupyrev;   |               v                  |
18813d1364aSspupyrev;   |             +------------+     +-----------+
18913d1364aSspupyrev;   |             | b34 [1200] | --> | b36 [900] |
19013d1364aSspupyrev;   |             +------------+     +-----------+
19113d1364aSspupyrev;   |               |
19213d1364aSspupyrev;   |               v
19313d1364aSspupyrev;   |             +------------+
19413d1364aSspupyrev;   |             |  b35 [?]   |
19513d1364aSspupyrev;   |             +------------+
19613d1364aSspupyrev;   |               |
19713d1364aSspupyrev;   |               v
19813d1364aSspupyrev;   |             +------------+
19913d1364aSspupyrev;   +-----------> |  b37 [?]   | -+
20013d1364aSspupyrev;                 +------------+  |
20113d1364aSspupyrev;                   |             |
20213d1364aSspupyrev;                   v             |
20313d1364aSspupyrev;                 +------------+  |
20413d1364aSspupyrev;                 |  b38 [?]   |  |
20513d1364aSspupyrev;                 +------------+  |
20613d1364aSspupyrev;                   |             |
20713d1364aSspupyrev;                   v             |
20813d1364aSspupyrev;                 +------------+  |
20913d1364aSspupyrev;                 | b39 [500]  | <+
21013d1364aSspupyrev;                 +------------+
21113d1364aSspupyrev;
21213d1364aSspupyrev
21313d1364aSspupyrevdefine dso_local i32 @foo3(i32 %0, i32 %1) #0 {
21413d1364aSspupyrevb31:
21513d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 1, i32 0, i64 -1)
21613d1364aSspupyrev  %cmp = icmp ne i32 %0, 0
21713d1364aSspupyrev  br label %b32
21813d1364aSspupyrev; CHECK2: - b31: float = {{.*}}, int = {{.*}}, count = 500
21913d1364aSspupyrev
22013d1364aSspupyrevb32:
22113d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 2, i32 0, i64 -1)
22213d1364aSspupyrev  br i1 %cmp, label %b33, label %b34
223*bb6497ffSMircea Trofin; CHECK:  edge %b32 -> %b33 probability is 0x1999999a / 0x80000000 = 20.00%
224*bb6497ffSMircea Trofin; CHECK:  edge %b32 -> %b34 probability is 0x66666666 / 0x80000000 = 80.00%
22513d1364aSspupyrev; CHECK2: - b32: float = {{.*}}, int = {{.*}}, count = 1500
22613d1364aSspupyrev
22713d1364aSspupyrevb33:
22813d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 3, i32 0, i64 -1)
22913d1364aSspupyrev  br label %b37
23013d1364aSspupyrev; CHECK2: - b33: float = {{.*}}, int = {{.*}}, count = 300
23113d1364aSspupyrev
23213d1364aSspupyrevb34:
23313d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 4, i32 0, i64 -1)
23413d1364aSspupyrev  br i1 %cmp, label %b35, label %b36
235*bb6497ffSMircea Trofin; CHECK:  edge %b34 -> %b35 probability is 0x15555555 / 0x80000000 = 16.67%
236*bb6497ffSMircea Trofin; CHECK:  edge %b34 -> %b36 probability is 0x6aaaaaab / 0x80000000 = 83.33% [HOT edge]
23713d1364aSspupyrev; CHECK2: - b34: float = {{.*}}, int = {{.*}}, count = 1200
23813d1364aSspupyrev
23913d1364aSspupyrevb35:
24013d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 5, i32 0, i64 -1)
24113d1364aSspupyrev  br label %b37
24213d1364aSspupyrev; CHECK2: - b35: float = {{.*}}, int = {{.*}}, count = 200
24313d1364aSspupyrev
24413d1364aSspupyrevb36:
24513d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 6, i32 0, i64 -1)
24613d1364aSspupyrev  br label %b32
24713d1364aSspupyrev; CHECK2: - b36: float = {{.*}}, int = {{.*}}, count = 1000
24813d1364aSspupyrev
24913d1364aSspupyrevb37:
25013d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 7, i32 0, i64 -1)
25113d1364aSspupyrev  br i1 %cmp, label %b38, label %b39
252*bb6497ffSMircea Trofin; CHECK:  edge %b37 -> %b38 probability is 0x40000000 / 0x80000000 = 50.00%
253*bb6497ffSMircea Trofin; CHECK:  edge %b37 -> %b39 probability is 0x40000000 / 0x80000000 = 50.00%
25413d1364aSspupyrev; CHECK2: - b37: float = {{.*}}, int = {{.*}}, count = 500
25513d1364aSspupyrev
25613d1364aSspupyrevb38:
25713d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 8, i32 0, i64 -1)
25813d1364aSspupyrev  br label %b39
25913d1364aSspupyrev; CHECK2: - b38: float = {{.*}}, int = {{.*}}, count = 250
26013d1364aSspupyrev
26113d1364aSspupyrevb39:
26213d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 9, i32 0, i64 -1)
26313d1364aSspupyrev  ret i32 %1
26413d1364aSspupyrev; CHECK2: - b39: float = {{.*}}, int = {{.*}}, count = 500
26513d1364aSspupyrev}
26613d1364aSspupyrev
26713d1364aSspupyrev
26813d1364aSspupyrev; The test verifies that flow rebalancer can ignore 'unlikely' jumps.
26913d1364aSspupyrev;
27013d1364aSspupyrev;                            +-----------+
27113d1364aSspupyrev;                            | b41 [400] | -+
27213d1364aSspupyrev;                            +-----------+  |
27313d1364aSspupyrev;                              |            |
27413d1364aSspupyrev;                              |            |
27513d1364aSspupyrev;                              v            |
27613d1364aSspupyrev;                            +-----------+  |
27713d1364aSspupyrev;                            |  b42 [?]  |  |
27813d1364aSspupyrev;                            +-----------+  |
27913d1364aSspupyrev;                              |            |
28013d1364aSspupyrev;                              |            |
28113d1364aSspupyrev;                              v            v
28213d1364aSspupyrev; +---------++---------+     +---------------------------+     +---------++---------+
28313d1364aSspupyrev; | b48 [?] || b46 [?] | <-- |                           | --> | b47 [?] || b49 [?] |
28413d1364aSspupyrev; +---------++---------+     |                           |     +---------++---------+
28513d1364aSspupyrev;   |  ^       |             |                           |       |          ^
28613d1364aSspupyrev;   |  |       |             |         b43 [400]         |       |          |
28713d1364aSspupyrev;   |  +-------+-------------|                           |       |          |
28813d1364aSspupyrev;   |          |             |                           |       |          |
28913d1364aSspupyrev;   |          |             |                           | ------+----------+
29013d1364aSspupyrev;   |          |             +---------------------------+       |
29113d1364aSspupyrev;   |          |               |                 |               |
29213d1364aSspupyrev;   |          |               |                 |               |
29313d1364aSspupyrev;   |          |               v                 v               |
29413d1364aSspupyrev;   |          |             +-----------+     +---------+       |
29513d1364aSspupyrev;   |          |             |  b44 [?]  |     | b45 [?] |       |
29613d1364aSspupyrev;   |          |             +-----------+     +---------+       |
29713d1364aSspupyrev;   |          |               |                 |               |
29813d1364aSspupyrev;   |          |               |                 |               |
29913d1364aSspupyrev;   |          |               v                 v               |
30013d1364aSspupyrev;   |          |             +---------------------------+       |
30113d1364aSspupyrev;   |          +-----------> |                           | <-----+
30213d1364aSspupyrev;   |                        |        b410 [400]         |
30313d1364aSspupyrev;   |                        |                           |
30413d1364aSspupyrev;   +----------------------> |                           |
30513d1364aSspupyrev;                            +---------------------------+
30613d1364aSspupyrev
30713d1364aSspupyrev
30813d1364aSspupyrevdefine dso_local void @foo4(i32 %0, i32 %1) #0 {
30913d1364aSspupyrevb41:
31013d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 1, i32 0, i64 -1)
31113d1364aSspupyrev  %cmp = icmp ne i32 %0, 0
31213d1364aSspupyrev  br i1 %cmp, label %b42, label %b43
313*bb6497ffSMircea Trofin; CHECK:  edge %b41 -> %b42 probability is 0x40000000 / 0x80000000 = 50.00%
314*bb6497ffSMircea Trofin; CHECK:  edge %b41 -> %b43 probability is 0x40000000 / 0x80000000 = 50.00%
31513d1364aSspupyrev; CHECK2: - b41: float = {{.*}}, int = {{.*}}, count = 400
31613d1364aSspupyrev
31713d1364aSspupyrevb42:
31813d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 2, i32 0, i64 -1)
31913d1364aSspupyrev  br label %b43
32013d1364aSspupyrev; CHECK2: - b42: float = {{.*}}, int = {{.*}}, count = 200
32113d1364aSspupyrev
32213d1364aSspupyrevb43:
32313d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 3, i32 0, i64 -1)
32413d1364aSspupyrev  switch i32 %1, label %b49 [
32513d1364aSspupyrev    i32 1, label %b44
32613d1364aSspupyrev    i32 2, label %b45
32713d1364aSspupyrev    i32 3, label %b46
32813d1364aSspupyrev    i32 4, label %b47
32913d1364aSspupyrev    i32 5, label %b48
33013d1364aSspupyrev  ]
331*bb6497ffSMircea Trofin; CHECK:  edge %b43 -> %b49 probability is 0x00000000 / 0x80000000 = 0.00%
332*bb6497ffSMircea Trofin; CHECK:  edge %b43 -> %b44 probability is 0x1999999a / 0x80000000 = 20.00%
333*bb6497ffSMircea Trofin; CHECK:  edge %b43 -> %b45 probability is 0x1999999a / 0x80000000 = 20.00%
334*bb6497ffSMircea Trofin; CHECK:  edge %b43 -> %b46 probability is 0x1999999a / 0x80000000 = 20.00%
335*bb6497ffSMircea Trofin; CHECK:  edge %b43 -> %b47 probability is 0x1999999a / 0x80000000 = 20.00%
336*bb6497ffSMircea Trofin; CHECK:  edge %b43 -> %b48 probability is 0x1999999a / 0x80000000 = 20.00%
33713d1364aSspupyrev; CHECK2: - b43: float = {{.*}}, int = {{.*}}, count = 400
33813d1364aSspupyrev
33913d1364aSspupyrevb44:
34013d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 4, i32 0, i64 -1)
34113d1364aSspupyrev  br label %b410
34213d1364aSspupyrev; CHECK2: - b44: float = {{.*}}, int = {{.*}}, count = 80
34313d1364aSspupyrev
34413d1364aSspupyrevb45:
34513d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 5, i32 0, i64 -1)
34613d1364aSspupyrev  br label %b410
34713d1364aSspupyrev; CHECK2: - b45: float = {{.*}}, int = {{.*}}, count = 80
34813d1364aSspupyrev
34913d1364aSspupyrevb46:
35013d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 6, i32 0, i64 -1)
35113d1364aSspupyrev  br label %b410
35213d1364aSspupyrev; CHECK2: - b46: float = {{.*}}, int = {{.*}}, count = 80
35313d1364aSspupyrev
35413d1364aSspupyrevb47:
35513d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 7, i32 0, i64 -1)
35613d1364aSspupyrev  br label %b410
35713d1364aSspupyrev; CHECK2: - b47: float = {{.*}}, int = {{.*}}, count = 80
35813d1364aSspupyrev
35913d1364aSspupyrevb48:
36013d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 8, i32 0, i64 -1)
36113d1364aSspupyrev  br label %b410
36213d1364aSspupyrev; CHECK2: - b48: float = {{.*}}, int = {{.*}}, count = 80
36313d1364aSspupyrev
36413d1364aSspupyrevb49:
36513d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 9, i32 0, i64 -1)
36613d1364aSspupyrev  unreachable
36713d1364aSspupyrev; CHECK2: - b49: float = {{.*}}, int = {{.*}}, count = 0
36813d1364aSspupyrev
36913d1364aSspupyrevb410:
37013d1364aSspupyrev  call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 10, i32 0, i64 -1)
37113d1364aSspupyrev  ret void
37213d1364aSspupyrev; CHECK2: - b410: float = {{.*}}, int = {{.*}}, count = 400
37313d1364aSspupyrev}
37413d1364aSspupyrev
37513d1364aSspupyrev
37613d1364aSspupyrev; Function Attrs: inaccessiblememonly nounwind willreturn
37713d1364aSspupyrevdeclare void @llvm.pseudoprobe(i64, i64, i32, i64) #4
37813d1364aSspupyrev
37913d1364aSspupyrevattributes #0 = { noinline nounwind uwtable "use-sample-profile" }
38013d1364aSspupyrevattributes #4 = { inaccessiblememonly nounwind willreturn }
38113d1364aSspupyrev
38213d1364aSspupyrev!llvm.pseudo_probe_desc = !{!7, !8, !9, !10}
38313d1364aSspupyrev
38413d1364aSspupyrev!7 = !{i64 7682762345278052905, i64 157181141624, !"foo1", null}
38513d1364aSspupyrev!8 = !{i64 2494702099028631698, i64 208782362068, !"foo2", null}
38613d1364aSspupyrev!9 = !{i64 -7908226060800700466, i64 189901498683, !"foo3", null}
38713d1364aSspupyrev!10 = !{i64 -6882312132165544686, i64 241030178952, !"foo4", null}
388