xref: /llvm-project/compiler-rt/test/profile/Windows/binary-id.c (revision 12f82fbe072382bb78ab1cbdd3fbeb8ed44cbc81)
1688fa35dSZequan Wu // REQUIRES: target={{.*windows-msvc.*}}
2688fa35dSZequan Wu // REQUIRES: lld-available
3688fa35dSZequan Wu 
4688fa35dSZequan Wu // RUN: %clang_profgen -O2 -o %t %s
5688fa35dSZequan Wu // RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t
6688fa35dSZequan Wu // RUN: llvm-profdata show --binary-ids %t.profraw > %t.out
7688fa35dSZequan Wu // RUN: FileCheck %s --check-prefix=NO-BINARY-ID < %t.out
8688fa35dSZequan Wu // RUN: llvm-profdata merge -o %t.profdata %t.profraw
9688fa35dSZequan Wu 
10688fa35dSZequan Wu // RUN: %clang_profgen -fuse-ld=lld -Wl,-build-id -O2 -o %t %s
11688fa35dSZequan Wu // RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t
12688fa35dSZequan Wu // RUN: llvm-profdata show --binary-ids %t.profraw > %t.profraw.out
13688fa35dSZequan Wu // RUN: FileCheck %s --check-prefix=BINARY-ID-RAW-PROF < %t.profraw.out
14688fa35dSZequan Wu 
15688fa35dSZequan Wu // RUN: rm -rf %t.profdir
16688fa35dSZequan Wu // RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t
17688fa35dSZequan Wu // RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t
18688fa35dSZequan Wu // RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t
19688fa35dSZequan Wu // RUN: llvm-profdata show --binary-ids  %t.profdir/default_*.profraw > %t.profraw.out
20688fa35dSZequan Wu // RUN: FileCheck %s --check-prefix=ONE-BINARY-ID < %t.profraw.out
21688fa35dSZequan Wu 
22688fa35dSZequan Wu // RUN: llvm-profdata merge -o %t.profdata %t.profdir/default_*.profraw
23688fa35dSZequan Wu // RUN: llvm-profdata show --binary-ids %t.profdata > %t.profdata.out
24688fa35dSZequan Wu // RUN: FileCheck %s --check-prefix=ONE-BINARY-ID < %t.profdata.out
25688fa35dSZequan Wu 
26688fa35dSZequan Wu // Test raw profiles with DLLs.
27688fa35dSZequan Wu // RUN: rm -rf %t.dir && split-file %s %t.dir
28688fa35dSZequan Wu // RUN: %clang_profgen -O2 %t.dir/foo.c -fuse-ld=lld -Wl,-build-id -Wl,-dll -o %t.dir/foo.dll
29688fa35dSZequan Wu // RUN: %clang_profgen -O2 %t.dir/bar.c -fuse-ld=lld -Wl,-build-id -Wl,-dll -o %t.dir/bar.dll
30688fa35dSZequan Wu // RUN: %clang_profgen -O2 %t.dir/main.c -fuse-ld=lld -Wl,-build-id %t.dir/foo.lib %t.dir/bar.lib -o %t.dir/main.exe
31688fa35dSZequan Wu // RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t.dir/main.exe
32688fa35dSZequan Wu // RUN: llvm-profdata show --binary-ids %t.profraw > %t.profraw.out
33688fa35dSZequan Wu // RUN: llvm-profdata merge -o %t.profdata %t.profraw
34688fa35dSZequan Wu // RUN: FileCheck %s --check-prefix=MULTI-BINARY-ID < %t.profraw.out
35688fa35dSZequan Wu 
36688fa35dSZequan Wu // RUN: llvm-profdata merge -o %t.profdata %t.profraw
37688fa35dSZequan Wu // RUN: llvm-profdata show --binary-ids %t.profdata > %t.profdata.out
38688fa35dSZequan Wu // RUN: FileCheck %s --check-prefix=MULTI-BINARY-ID < %t.profraw.out
39688fa35dSZequan Wu 
40688fa35dSZequan Wu //--- foo.c
41688fa35dSZequan Wu __declspec(dllexport) void foo() {}
42688fa35dSZequan Wu 
43688fa35dSZequan Wu //--- bar.c
44688fa35dSZequan Wu __declspec(dllexport) void bar() {}
45688fa35dSZequan Wu 
46688fa35dSZequan Wu //--- main.c
47688fa35dSZequan Wu __declspec(dllimport) void foo();
48688fa35dSZequan Wu __declspec(dllimport) void bar();
49688fa35dSZequan Wu int main() {
50688fa35dSZequan Wu   foo();
51688fa35dSZequan Wu   bar();
52688fa35dSZequan Wu   return 0;
53688fa35dSZequan Wu }
54688fa35dSZequan Wu 
55688fa35dSZequan Wu // NO-BINARY-ID: Instrumentation level: Front-end
56688fa35dSZequan Wu // NO-BINARY-ID-NEXT: Total functions: 3
57688fa35dSZequan Wu // NO-BINARY-ID-NEXT: Maximum function count: 1
58688fa35dSZequan Wu // NO-BINARY-ID-NEXT: Maximum internal block count: 0
59688fa35dSZequan Wu // NO-BINARY-ID-NOT: Binary IDs:
60688fa35dSZequan Wu 
61688fa35dSZequan Wu // BINARY-ID-RAW-PROF: Instrumentation level: Front-end
62688fa35dSZequan Wu // BINARY-ID-RAW-PROF-NEXT: Total functions: 3
63688fa35dSZequan Wu // BINARY-ID-RAW-PROF-NEXT: Maximum function count: 1
64688fa35dSZequan Wu // BINARY-ID-RAW-PROF-NEXT: Maximum internal block count: 0
65*12f82fbeSEllis Hoag // BINARY-ID-RAW-PROF-NEXT: Total number of blocks:
66*12f82fbeSEllis Hoag // BINARY-ID-RAW-PROF-NEXT: Total count:
67688fa35dSZequan Wu // BINARY-ID-RAW-PROF-NEXT: Binary IDs:
68688fa35dSZequan Wu // BINARY-ID-RAW-PROF-NEXT: {{[0-9a-f]+}}
69688fa35dSZequan Wu 
70688fa35dSZequan Wu // ONE-BINARY-ID: Instrumentation level: Front-end
71688fa35dSZequan Wu // ONE-BINARY-ID-NEXT: Total functions: 3
72688fa35dSZequan Wu // ONE-BINARY-ID-NEXT: Maximum function count: 3
73688fa35dSZequan Wu // ONE-BINARY-ID-NEXT: Maximum internal block count: 0
74*12f82fbeSEllis Hoag // ONE-BINARY-ID-NEXT: Total number of blocks:
75*12f82fbeSEllis Hoag // ONE-BINARY-ID-NEXT: Total count:
76688fa35dSZequan Wu // ONE-BINARY-ID-NEXT: Binary IDs:
77688fa35dSZequan Wu // ONE-BINARY-ID-NEXT: {{[0-9a-f]+}}
78688fa35dSZequan Wu 
79688fa35dSZequan Wu // MULTI-BINARY-ID: Instrumentation level: Front-end
80688fa35dSZequan Wu // MULTI-BINARY-ID-NEXT: Total functions: 3
81688fa35dSZequan Wu // MULTI-BINARY-ID-NEXT: Maximum function count: 1
82688fa35dSZequan Wu // MULTI-BINARY-ID-NEXT: Maximum internal block count: 0
83*12f82fbeSEllis Hoag // MULTI-BINARY-ID-NEXT: Total number of blocks:
84*12f82fbeSEllis Hoag // MULTI-BINARY-ID-NEXT: Total count:
85688fa35dSZequan Wu // MULTI-BINARY-ID-NEXT: Binary IDs:
86688fa35dSZequan Wu // MULTI-BINARY-ID-NEXT: {{[0-9a-f]+}}
87688fa35dSZequan Wu // MULTI-BINARY-ID-NEXT: {{[0-9a-f]+}}
88688fa35dSZequan Wu // MULTI-BINARY-ID-NEXT: {{[0-9a-f]+}}
89