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