brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.8 KiB · 407769a Raw
174 lines · plain
1; RUN: opt < %s -passes=pseudo-probe,sample-profile -sample-profile-use-profi -sample-profile-file=%S/Inputs/profile-inference-even-count-distribution.prof | opt -passes='print<branch-prob>' -disable-output 2>&1 | FileCheck %s2; RUN: opt < %s -passes=pseudo-probe,sample-profile -sample-profile-use-profi -sample-profile-file=%S/Inputs/profile-inference-even-count-distribution.prof | opt -passes='print<block-freq>' -disable-output 2>&1 | FileCheck %s --check-prefix=CHECK23 4; The test verifies that counts are evenly distributed among branches with5; equal weights.6;7; +-----------+     +-----------+8; | b3 [0]    | <-- | b1 [1000] |9; +-----------+     +-----------+10;   |                 |11;   |                 |12;   |                 v13;   |               +-----------+14;   |               | b2 [0]    |15;   |               +-----------+16;   |                 |17;   |                 |18;   |                 v19;   |               +-----------+20;   +-------------> | b4 [1000] |21;                   +-----------+22 23@yydebug = dso_local global i32 0, align 424 25; Function Attrs: nounwind uwtable26define dso_local i32 @foo1(i32 %0, i32 %1) #0 {27b11:28  call void @llvm.pseudoprobe(i64 7682762345278052905, i64 1, i32 0, i64 -1)29  %cmp = icmp ne i32 %0, 030  br i1 %cmp, label %b12, label %b1331; CHECK:  edge %b11 -> %b12 probability is 0x40000000 / 0x80000000 = 50.00%32; CHECK:  edge %b11 -> %b13 probability is 0x40000000 / 0x80000000 = 50.00%33; CHECK2: - b11: float = {{.*}}, int = {{.*}}, count = 100034 35b12:36  call void @llvm.pseudoprobe(i64 7682762345278052905, i64 2, i32 0, i64 -1)37  br label %b1438; CHECK2: - b12: float = {{.*}}, int = {{.*}}, count = 50039 40b13:41  call void @llvm.pseudoprobe(i64 7682762345278052905, i64 3, i32 0, i64 -1)42  br label %b1443; CHECK2: - b13: float = {{.*}}, int = {{.*}}, count = 50044 45b14:46  call void @llvm.pseudoprobe(i64 7682762345278052905, i64 4, i32 0, i64 -1)47  ret i32 %148; CHECK2: - b14: float = {{.*}}, int = {{.*}}, count = 100049}50 51 52; The test verifies that counts are evenly distributed when the entry basic53; block is dangling.54;55; +-----------+56; |  b1 [?]   | -+57; +-----------+  |58;   |            |59;   |            |60;   v            |61; +-----------+  |62; |  b2 [?]   |  |63; +-----------+  |64;   |            |65;   |            |66;   v            |67; +-----------+  |68; | b3 [1000] | <+69; +-----------+70 71define dso_local i32 @foo2(i32 %0, i32 %1) #0 {72b21:73  call void @llvm.pseudoprobe(i64 2494702099028631698, i64 1, i32 0, i64 -1)74  %cmp = icmp ne i32 %0, 075  br i1 %cmp, label %b22, label %b2376; CHECK:  edge %b21 -> %b22 probability is 0x40000000 / 0x80000000 = 50.00%77; CHECK:  edge %b21 -> %b23 probability is 0x40000000 / 0x80000000 = 50.00%78; CHECK2: - b21: float = {{.*}}, int = {{.*}}, count = 100079 80b22:81  call void @llvm.pseudoprobe(i64 2494702099028631698, i64 2, i32 0, i64 -1)82  br label %b2383; CHECK2: - b22: float = {{.*}}, int = {{.*}}, count = 50084 85b23:86  call void @llvm.pseudoprobe(i64 2494702099028631698, i64 3, i32 0, i64 -1)87  ret i32 %188; CHECK2: - b23: float = {{.*}}, int = {{.*}}, count = 100089 90}91 92; The test verifies even count distribution in the presence of multiple sinks.93;94;                +-----------+95;                | b1 [1000] |96;                +-----------+97;                  |98;                  |99;                  v100;                +-----------+101;                |  b2 [?]   | -+102;                +-----------+  |103;                  |            |104;                  |            |105;                  v            |106; +--------+     +-----------+  |107; | b5 [?] | <-- |  b3 [?]   |  |108; +--------+     +-----------+  |109;   |              |            |110;   |              |            |111;   |              v            |112;   |            +-----------+  |113;   |            | b4 [1000] | <+114;   |            +-----------+115;   |              |116;   |              |117;   |              v118;   |            +-----------+119;   +----------> | b6 [1000] |120;                +-----------+121;122 123define dso_local i32 @foo3(i32 %0, i32 %1) #0 {124b31:125  call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 1, i32 0, i64 -1)126  %cmp = icmp ne i32 %0, 0127  br label %b32128; CHECK2: - b31: float = {{.*}}, int = {{.*}}, count = 1000129 130b32:131  call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 2, i32 0, i64 -1)132  br i1 %cmp, label %b33, label %b34133; CHECK:  edge %b32 -> %b33 probability is 0x40000000 / 0x80000000 = 50.00%134; CHECK:  edge %b32 -> %b34 probability is 0x40000000 / 0x80000000 = 50.00%135; CHECK2: - b32: float = {{.*}}, int = {{.*}}, count = 1000136 137b33:138  call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 3, i32 0, i64 -1)139  br i1 %cmp, label %b35, label %b34140; CHECK:  edge %b33 -> %b35 probability is 0x00000000 / 0x80000000 = 0.00%141; CHECK:  edge %b33 -> %b34 probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]142; CHECK2: - b33: float = {{.*}}, int = {{.*}}, count = 500143 144b34:145  call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 4, i32 0, i64 -1)146  br label %b36147; CHECK2: - b34: float = {{.*}}, int = {{.*}}, count = 1000148 149b35:150  call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 5, i32 0, i64 -1)151  br label %b36152; CHECK2: - b35: float = {{.*}}, int = {{.*}}, count = 0153 154b36:155  call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 6, i32 0, i64 -1)156  ret i32 %1157; CHECK2: - b36: float = {{.*}}, int = {{.*}}, count = 1000158}159 160 161 162; Function Attrs: inaccessiblememonly nounwind willreturn163declare void @llvm.pseudoprobe(i64, i64, i32, i64) #4164 165attributes #0 = { noinline nounwind uwtable "use-sample-profile" }166attributes #4 = { inaccessiblememonly nounwind willreturn }167 168!llvm.pseudo_probe_desc = !{!7, !8, !9, !10}169 170!7 = !{i64 7682762345278052905, i64 157181141624, !"foo1", null}171!8 = !{i64 2494702099028631698, i64 208782362068, !"foo2", null}172!9 = !{i64 -7908226060800700466, i64 189901498683, !"foo3", null}173!10 = !{i64 -6882312132165544686, i64 241030178952, !"foo4", null}174