brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.1 KiB · a1858b5 Raw
213 lines · plain
1; RUN: opt < %s -passes=pseudo-probe,sample-profile -sample-profile-use-profi -sample-profile-file=%S/Inputs/profile-inference-islands.prof -S -o %t2; RUN: FileCheck %s < %t -check-prefix=CHECK-ENTRY-COUNT3; RUN: opt < %t -passes='print<block-freq>' -disable-output 2>&1 | FileCheck %s4 5 6; The test contains an isolated flow component ("island") that needs to be7; reconnected to the entry point via edges with a positive flow.8; The corresponding CFG is shown below:9;10; +--------+     +--------+     +----------+11; | b6 [1] | <-- | b4 [1] | <-- |  b1 [1]  |12; +--------+     +--------+     +----------+13;                  |              |14;                  |              |15;                  v              v16;                +--------+     +----------+17;                | b5 [0] |     | b2 [100] | <+18;                +--------+     +----------+  |19;                                 |           |20;                                 |           |21;                                 v           |22;                               +----------+  |23;                               | b3 [100] | -+24;                               +----------+25;                                 |26;                                 |27;                                 v28;                               +----------+29;                               |  b7 [0]  |30;                               +----------+31 32 33; Function Attrs: nounwind uwtable34define dso_local i32 @islands_1(i32 %0, i32 %1) #0 {35b1:36  call void @llvm.pseudoprobe(i64 -5646793257986063976, i64 1, i32 0, i64 -1)37  %cmp = icmp ne i32 %0, 038  br i1 %cmp, label %b2, label %b439; CHECK: - b1: float = {{.*}}, int = {{.*}}, count = 240 41b2:42  call void @llvm.pseudoprobe(i64 -5646793257986063976, i64 2, i32 0, i64 -1)43  br label %b344; CHECK: - b2: float = {{.*}}, int = {{.*}}, count = 10145 46b3:47  call void @llvm.pseudoprobe(i64 -5646793257986063976, i64 3, i32 0, i64 -1)48  br i1 %cmp, label %b2, label %b749; CHECK: - b3: float = {{.*}}, int = {{.*}}, count = 10150 51b4:52  call void @llvm.pseudoprobe(i64 -5646793257986063976, i64 4, i32 0, i64 -1)53  br i1 %cmp, label %b5, label %b654; CHECK: - b4: float = {{.*}}, int = {{.*}}, count = 155 56b5:57  call void @llvm.pseudoprobe(i64 -5646793257986063976, i64 5, i32 0, i64 -1)58  ret i32 %159; CHECK: - b5: float = {{.*}}, int = {{.*}}, count = 060 61b6:62  call void @llvm.pseudoprobe(i64 -5646793257986063976, i64 6, i32 0, i64 -1)63  ret i32 %164; CHECK: - b6: float = {{.*}}, int = {{.*}}, count = 165 66b7:67  call void @llvm.pseudoprobe(i64 -5646793257986063976, i64 7, i32 0, i64 -1)68  ret i32 %169; CHECK: - b7: float = {{.*}}, int = {{.*}}, count = 170 71}72 73; Another test with an island.74;75;  +----------+76;  |  b1 [0]  |77;  +----------+78;   |79;   |80;   v81;  +----------+82;  | b2 [100] | <+83;  +----------+  |84;   |            |85;   |            |86;   v            |87;  +----------+  |88;  | b3 [100] | -+89;  +----------+90;   |91;   |92;   v93;  +----------+94;  |  b4 [0]  |95;  +----------+96 97; Function Attrs: nounwind uwtable98define dso_local i32 @islands_2(i32 %0, i32 %1) #1 {99b1:100  call void @llvm.pseudoprobe(i64 -7683376842751444845, i64 1, i32 0, i64 -1)101  %cmp = icmp ne i32 %0, 0102  br label %b2103; CHECK: - b1: float = {{.*}}, int = {{.*}}, count = 1104 105b2:106  call void @llvm.pseudoprobe(i64 -7683376842751444845, i64 2, i32 0, i64 -1)107  br label %b3108; CHECK: - b2: float = {{.*}}, int = {{.*}}, count = 10001109 110b3:111  call void @llvm.pseudoprobe(i64 -7683376842751444845, i64 3, i32 0, i64 -1)112  br i1 %cmp, label %b2, label %b4113; CHECK: - b3: float = {{.*}}, int = {{.*}}, count = 10001114 115b4:116  call void @llvm.pseudoprobe(i64 -7683376842751444845, i64 4, i32 0, i64 -1)117  ret i32 %1118; CHECK: - b4: float = {{.*}}, int = {{.*}}, count = 1119}120 121 122; The test verifies that the island is connected to the entry block via a123; cheapest path (that is, passing through blocks with large counts).124;125; +---------+     +---------+     +----------+     +--------+126; | b8 [10] | <-- | b3 [10] | <-- | b1 [10]  | --> | b4 [0] |127; +---------+     +---------+     +----------+     +--------+128;                   |               |                |129;                   |               |                |130;                   |               v                |131;                   |             +----------+       |132;                   |             |  b2 [0]  |       |133;                   |             +----------+       |134;                   |               |                |135;                   |               |                |136;                   |               v                v137;                   |             +-------------------------+138;                   +-----------> |        b5 [100]         |139;                                 +-------------------------+140;                                   |           ^141;                                   |           |142;                                   v           |143;                                 +----------+  |144;                                 | b6 [100] | -+145;                                 +----------+146;                                   |147;                                   |148;                                   v149;                                 +----------+150;                                 |  b7 [0]  |151;                                 +----------+152 153; Function Attrs: nounwind uwtable154define dso_local i32 @islands_3(i32 %0, i32 %1) #1 {155b1:156  call void @llvm.pseudoprobe(i64 -9095645063288297061, i64 1, i32 0, i64 -1)157  %cmp = icmp ne i32 %0, 0158  switch i32 %1, label %b2 [159    i32 1, label %b3160    i32 2, label %b4161  ]162; CHECK: - b1: float = {{.*}}, int = {{.*}}, count = 11163 164b2:165  call void @llvm.pseudoprobe(i64 -9095645063288297061, i64 2, i32 0, i64 -1)166  br label %b5167; CHECK: - b2: float = {{.*}}, int = {{.*}}, count = 0168 169b3:170  call void @llvm.pseudoprobe(i64 -9095645063288297061, i64 3, i32 0, i64 -1)171  br i1 %cmp, label %b8, label %b5172; CHECK: - b3: float = {{.*}}, int = {{.*}}, count = 11173 174b4:175  call void @llvm.pseudoprobe(i64 -9095645063288297061, i64 4, i32 0, i64 -1)176  ret i32 %1177; CHECK: - b4: float = {{.*}}, int = {{.*}}, count = 0178 179b5:180  call void @llvm.pseudoprobe(i64 -9095645063288297061, i64 5, i32 0, i64 -1)181  br label %b6182; CHECK: - b5: float = {{.*}}, int = {{.*}}, count = 1001183 184b6:185  call void @llvm.pseudoprobe(i64 -9095645063288297061, i64 6, i32 0, i64 -1)186  br i1 %cmp, label %b7, label %b5187; CHECK: - b6: float = {{.*}}, int = {{.*}}, count = 1001188 189b7:190  call void @llvm.pseudoprobe(i64 -9095645063288297061, i64 7, i32 0, i64 -1)191  ret i32 %1192; CHECK: - b7: float = {{.*}}, int = {{.*}}, count = 1193 194b8:195  call void @llvm.pseudoprobe(i64 -9095645063288297061, i64 8, i32 0, i64 -1)196  ret i32 %1197; CHECK: - b8: float = {{.*}}, int = {{.*}}, count = 10198}199 200declare void @llvm.pseudoprobe(i64, i64, i32, i64) #2201 202attributes #0 = { noinline nounwind uwtable "use-sample-profile"}203attributes #1 = { noinline nounwind uwtable "use-sample-profile"}204attributes #2 = { nounwind }205 206!llvm.pseudo_probe_desc = !{!7, !8}207 208!7 = !{i64 -5646793257986063976, i64 120879332589, !"islands_1"}209!8 = !{i64 -7683376842751444845, i64 69495280403, !"islands_2"}210!9 = !{i64 -9095645063288297061, i64 156608410269, !"islands_3"}211 212; CHECK-ENTRY-COUNT: = !{!"function_entry_count", i64 2}213