|
1 |
| -// RUN: %clang_pgogen -o %t -O3 %s |
| 1 | +// RUN: %clang_pgogen -o %t -O3 %S/Inputs/instrprof-value-merge.c |
2 | 2 | // RUN: rm -rf %t.profdir
|
3 | 3 | // RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t
|
4 | 4 | // RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t
|
5 | 5 | // RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t
|
6 | 6 | // RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t 1
|
7 | 7 | // RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t 1
|
8 |
| -// RUN: llvm-profdata show -counts -function=main -ic-targets -memop-sizes %t.profdir/default_*.profraw | FileCheck %s |
| 8 | +// RUN: llvm-profdata show -counts -function=main -ic-targets -memop-sizes %t.profdir/default_*.profraw | FileCheck %S/Inputs/instrprof-value-merge.c |
9 | 9 |
|
10 |
| -#include <string.h> |
11 |
| - |
12 |
| -void (*f0)(); |
13 |
| -void (*f1)(); |
14 |
| -void (*f2)(); |
15 |
| - |
16 |
| -char dst[200]; |
17 |
| -char src[200]; |
18 |
| -volatile int n; |
19 |
| - |
20 |
| -__attribute__((noinline)) void foo() {} |
21 |
| - |
22 |
| -__attribute__((noinline)) void bar() { |
23 |
| - f0 = foo; |
24 |
| - f1 = foo; |
25 |
| - f2 = foo; |
26 |
| - n = 4; |
27 |
| -} |
28 |
| -int main(int argc, char *argv[]) { |
29 |
| - int i; |
30 |
| - bar(); |
31 |
| - if (argc == 1) { |
32 |
| - f0(); |
33 |
| - for (i = 0; i < 9; i++) |
34 |
| - f1(); |
35 |
| - for (i = 0; i < 99; i++) |
36 |
| - f2(); |
37 |
| - } else { |
38 |
| - memcpy((void *)dst, (void *)src, n); |
39 |
| - for (i = 0; i < 6; i++) |
40 |
| - memcpy((void *)(dst + 2), (void *)src, n + 1); |
41 |
| - for (i = 0; i < 66; i++) |
42 |
| - memcpy((void *)(dst + 9), (void *)src, n + 2); |
43 |
| - } |
44 |
| -} |
| 10 | +/// -z start-stop-gc requires binutils 2.37. Don't test the option for now. |
| 11 | +/// TODO: Add -Wl,--gc-sections. |
| 12 | +// RUN: %clang_pgogen -o %t -O3 %S/Inputs/instrprof-value-merge.c -fuse-ld=bfd -ffunction-sections -fdata-sections |
| 13 | +// RUN: rm -rf %t.profdir |
| 14 | +// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t |
| 15 | +// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t |
| 16 | +// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t |
| 17 | +// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t 1 |
| 18 | +// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t 1 |
| 19 | +// RUN: llvm-profdata show -counts -function=main -ic-targets -memop-sizes %t.profdir/default_*.profraw | FileCheck %S/Inputs/instrprof-value-merge.c |
45 | 20 |
|
46 |
| -// CHECK: Counters: |
47 |
| -// CHECK: main: |
48 |
| -// CHECK: Hash: 0x0a9bd81e87ab6e87 |
49 |
| -// CHECK: Counters: 6 |
50 |
| -// CHECK: Indirect Call Site Count: 3 |
51 |
| -// CHECK: Number of Memory Intrinsics Calls: 3 |
52 |
| -// CHECK: Block counts: [27, 297, 12, 132, 3, 2] |
53 |
| -// CHECK: Indirect Target Results: |
54 |
| -// CHECK: [ 0, foo, 3 ] |
55 |
| -// CHECK: [ 1, foo, 27 ] |
56 |
| -// CHECK: [ 2, foo, 297 ] |
57 |
| -// CHECK: Memory Intrinsic Size Results: |
58 |
| -// CHECK: [ 0, 4, 2 ] |
59 |
| -// CHECK: [ 1, 5, 12 ] |
60 |
| -// CHECK: [ 2, 6, 132 ] |
61 |
| -// CHECK: Instrumentation level: IR |
62 |
| -// CHECK: Functions shown: 1 |
63 |
| -// CHECK: Total functions: 3 |
64 |
| -// CHECK: Maximum function count: 327 |
65 |
| -// CHECK: Maximum internal block count: 297 |
66 |
| -// CHECK: Statistics for indirect call sites profile: |
67 |
| -// CHECK: Total number of sites: 3 |
68 |
| -// CHECK: Total number of sites with values: 3 |
69 |
| -// CHECK: Total number of profiled values: 3 |
70 |
| -// CHECK: Value sites histogram: |
71 |
| -// CHECK: NumTargets, SiteCount |
72 |
| -// CHECK: 1, 3 |
73 |
| -// CHECK: Statistics for memory intrinsic calls sizes profile: |
74 |
| -// CHECK: Total number of sites: 3 |
75 |
| -// CHECK: Total number of sites with values: 3 |
76 |
| -// CHECK: Total number of profiled values: 3 |
77 |
| -// CHECK: Value sites histogram: |
78 |
| -// CHECK: NumTargets, SiteCount |
79 |
| -// CHECK: 1, 3 |
| 21 | +// RUN: %clang_pgogen -o %t -O3 %S/Inputs/instrprof-value-merge.c -fuse-ld=gold -ffunction-sections -fdata-sections |
| 22 | +// RUN: rm -rf %t.profdir |
| 23 | +// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t |
| 24 | +// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t |
| 25 | +// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t |
| 26 | +// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t 1 |
| 27 | +// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t 1 |
| 28 | +// RUN: llvm-profdata show -counts -function=main -ic-targets -memop-sizes %t.profdir/default_*.profraw | FileCheck %S/Inputs/instrprof-value-merge.c |
0 commit comments