Skip to content

Commit

Permalink
[PGO][test] Enable continuous mode PGO tests on AIX (#115987)
Browse files Browse the repository at this point in the history
Co-authored-by: Wael Yehia <wyehia@ca.ibm.com>
  • Loading branch information
w2yehia and Wael Yehia authored Nov 15, 2024
1 parent 618f231 commit 4f2651c
Show file tree
Hide file tree
Showing 9 changed files with 46 additions and 19 deletions.
10 changes: 7 additions & 3 deletions compiler-rt/test/profile/ContinuousSyncMode/basic.c
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
// REQUIRES: darwin
// REQUIRES: target={{.*(darwin|aix).*}}

// RUN: %clang -fprofile-instr-generate -fcoverage-mapping -o %t.exe %s
// RUN: %clang_profgen_cont -fcoverage-mapping -o %t.exe %s
// RUN: echo "garbage" > %t.profraw
// RUN: env LLVM_PROFILE_FILE="%c%t.profraw" %run %t.exe
// RUN: llvm-profdata show --counts --all-functions %t.profraw | FileCheck %s -check-prefix=CHECK-COUNTS
// RUN: llvm-profdata merge -o %t.profdata %t.profraw
// RUN: llvm-cov report %t.exe -instr-profile %t.profdata | FileCheck %s -check-prefix=CHECK-COVERAGE
//
// COM: The "report" and "show" commands of llvm-cov are not supported on AIX.
// RUN: %if !target={{.*aix.*}} %{ \
// RUN: llvm-cov report %t.exe -instr-profile %t.profdata | FileCheck %s -check-prefix=CHECK-COVERAGE \
// RUN: %}

// CHECK-COUNTS: Counters:
// CHECK-COUNTS-NEXT: main:
Expand Down
4 changes: 2 additions & 2 deletions compiler-rt/test/profile/ContinuousSyncMode/get-filename.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// REQUIRES: darwin
// REQUIRES: target={{.*(darwin|aix).*}}

// RUN: %clang_pgogen -o %t.exe %s
// RUN: %clang_pgogen_cont -o %t.exe %s
// RUN: env LLVM_PROFILE_FILE="%c%t.profraw" %run %t.exe %t.profraw
// RUN: env LLVM_PROFILE_FILE="%t%c.profraw" %run %t.exe %t.profraw
// RUN: env LLVM_PROFILE_FILE="%t.profraw%c" %run %t.exe %t.profraw
Expand Down
4 changes: 2 additions & 2 deletions compiler-rt/test/profile/ContinuousSyncMode/image-with-mcdc.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// REQUIRES: darwin
// REQUIRES: target={{.*(darwin|aix).*}}

// RUN: %clang_profgen -fcoverage-mapping -fcoverage-mcdc -O3 -o %t.exe %s
// RUN: %clang_profgen_cont -fcoverage-mapping -fcoverage-mcdc -O3 -o %t.exe %s
// RUN: env LLVM_PROFILE_FILE="%c%t.profraw" %run %t.exe 3 3
// RUN: llvm-profdata show --text --all-functions %t.profraw | FileCheck %s

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// REQUIRES: darwin
// REQUIRES: target={{.*(darwin|aix).*}}

// RUN: echo "static void dead_code(void) {}" > %t.dso.c
// RUN: %clang_profgen -fcoverage-mapping -O3 -dynamiclib -o %t.dso.dylib %t.dso.c
// RUN: %clang_profgen -fcoverage-mapping -O3 -o %t.exe %s %t.dso.dylib
// RUN: %clang_profgen_cont -fcoverage-mapping -O3 %shared_lib_flag -o %t.dso.dylib %t.dso.c
// RUN: %clang_profgen_cont -fcoverage-mapping -O3 -o %t.exe %s %t.dso.dylib
// RUN: env LLVM_PROFILE_FILE="%c%t.profraw" %run %t.exe 2>&1 | count 0
// RUN: llvm-profdata show --counts --all-functions %t.profraw | FileCheck %s

Expand Down
8 changes: 4 additions & 4 deletions compiler-rt/test/profile/ContinuousSyncMode/online-merging.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// REQUIRES: darwin
// REQUIRES: target={{.*(darwin|aix).*}}

// Test the online merging mode (%m) along with continuous mode (%c).
//
Expand All @@ -8,9 +8,9 @@
// Create two DSOs and a driver program that uses them.
// RUN: echo "void dso1(void) {}" > dso1.c
// RUN: echo "void dso2(void) {}" > dso2.c
// RUN: %clang_pgogen -dynamiclib -o %t.dir/dso1.dylib dso1.c -mllvm -instrprof-atomic-counter-update-all=1
// RUN: %clang_pgogen -dynamiclib -o %t.dir/dso2.dylib dso2.c -mllvm -instrprof-atomic-counter-update-all=1
// RUN: %clang_pgogen -o main.exe %s %t.dir/dso1.dylib %t.dir/dso2.dylib -mllvm -instrprof-atomic-counter-update-all=1
// RUN: %clang_pgogen_cont %shared_lib_flag -o %t.dir/dso1.dylib dso1.c -mllvm -instrprof-atomic-counter-update-all=1
// RUN: %clang_pgogen_cont %shared_lib_flag -o %t.dir/dso2.dylib dso2.c -mllvm -instrprof-atomic-counter-update-all=1
// RUN: %clang_pgogen_cont -o main.exe %s %t.dir/dso1.dylib %t.dir/dso2.dylib -mllvm -instrprof-atomic-counter-update-all=1
//
// === Round 1 ===
// Test merging+continuous mode without any file contention.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// REQUIRES: darwin
// REQUIRES: target={{.*(darwin|aix).*}}

// RUN: rm -rf %t.dir && mkdir -p %t.dir
// RUN: %clang_pgogen -o %t.exe %s
// RUN: %clang_pgogen_cont -o %t.exe %s
//
// Note: %%p is needed here, not %p, because of lit's path substitution.
// RUN: env LLVM_PROFILE_FILE="%t.dir/%c-%%p" %run %t.exe
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// REQUIRES: darwin || linux
// REQUIRES: target={{.*(darwin|linux|aix).*}}

// Test when LLVM_PROFILE_FILE is set incorrectly, it should fall backs to use default.profraw without runtime error.

Expand Down
4 changes: 2 additions & 2 deletions compiler-rt/test/profile/ContinuousSyncMode/set-filename.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// REQUIRES: darwin
// REQUIRES: target={{.*(darwin|aix).*}}

// RUN: %clang_pgogen -o %t.exe %s
// RUN: %clang_pgogen_cont -o %t.exe %s
// RUN: env LLVM_PROFILE_FILE="%c%t.profraw" %run %t.exe %t.profraw %t.bad

#include <string.h>
Expand Down
23 changes: 23 additions & 0 deletions compiler-rt/test/profile/lit.cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ def get_required_attr(config, attr_name):

target_is_msvc = bool(re.match(r".*-windows-msvc$", config.target_triple))

# Whether continous profile collection (%c) requires runtime counter relocation on this platform
runtime_reloc = bool(config.host_os in ["AIX"])

if config.host_os in ["Linux"]:
extra_link_flags = ["-ldl"]
elif target_is_msvc:
Expand Down Expand Up @@ -94,6 +97,14 @@ def exclude_unsupported_files_for_aix(dirname):
config.substitutions.append(
("%clang_profgen=", build_invocation(clang_cflags) + " -fprofile-instr-generate=")
)
config.substitutions.append(
(
"%clang_profgen_cont ",
build_invocation(clang_cflags)
+ " -fprofile-instr-generate "
+ ("-mllvm -runtime-counter-relocation " if runtime_reloc else ""),
)
)
config.substitutions.append(
(
"%clangxx_profgen ",
Expand All @@ -113,6 +124,14 @@ def exclude_unsupported_files_for_aix(dirname):
config.substitutions.append(
("%clang_pgogen=", build_invocation(clang_cflags) + " -fprofile-generate=")
)
config.substitutions.append(
(
"%clang_pgogen_cont ",
build_invocation(clang_cflags)
+ " -fprofile-generate "
+ ("-mllvm -runtime-counter-relocation " if runtime_reloc else ""),
)
)
config.substitutions.append(
("%clangxx_pgogen ", build_invocation(clang_cxxflags) + " -fprofile-generate ")
)
Expand Down Expand Up @@ -166,6 +185,10 @@ def exclude_unsupported_files_for_aix(dirname):
]:
config.unsupported = True

config.substitutions.append(
("%shared_lib_flag", "-dynamiclib" if (config.host_os == "Darwin") else "-shared")
)

if config.host_os in ["AIX"]:
config.available_features.add("system-aix")
exclude_unsupported_files_for_aix(config.test_source_root)
Expand Down

0 comments on commit 4f2651c

Please sign in to comment.