diff --git a/clang/test/CodeGen/pgo-sample-thinlto-summary.c b/clang/test/CodeGen/pgo-sample-thinlto-summary.c --- a/clang/test/CodeGen/pgo-sample-thinlto-summary.c +++ b/clang/test/CodeGen/pgo-sample-thinlto-summary.c @@ -1,9 +1,7 @@ -// RUN: %clang_cc1 -O2 -fprofile-sample-use=%S/Inputs/pgo-sample-thinlto-summary.prof %s -emit-llvm -o - 2>&1 | FileCheck %s -check-prefix=SAMPLEPGO -// RUN: %clang_cc1 -O2 -fprofile-sample-use=%S/Inputs/pgo-sample-thinlto-summary.prof %s -emit-llvm -flto=thin -o - 2>&1 | FileCheck %s -check-prefix=THINLTO -// RUN: %clang_cc1 -O2 -fexperimental-new-pass-manager -fprofile-sample-use=%S/Inputs/pgo-sample-thinlto-summary.prof %s -emit-llvm -o - 2>&1 | FileCheck %s -check-prefix=SAMPLEPGO -// RUN: %clang_cc1 -O2 -fexperimental-new-pass-manager -fprofile-sample-use=%S/Inputs/pgo-sample-thinlto-summary.prof %s -emit-llvm -flto=thin -o - 2>&1 | FileCheck %s -check-prefix=THINLTO -// Checks if hot call is inlined by normal compile, but not inlined by -// thinlto compile. +// RUN: %clang_cc1 -mllvm -opt-bisect-limit=-1 -O2 -fprofile-sample-use=%S/Inputs/pgo-sample-thinlto-summary.prof %s -emit-llvm -o - 2>&1 | FileCheck %s -check-prefix=SAMPLEPGO +// RUN: %clang_cc1 -mllvm -opt-bisect-limit=-1 -O2 -fprofile-sample-use=%S/Inputs/pgo-sample-thinlto-summary.prof %s -emit-llvm -flto=thin -o - 2>&1 | FileCheck %s -check-prefix=THINLTO +// RUN: %clang_cc1 -mllvm -opt-bisect-limit=-1 -O2 -fexperimental-new-pass-manager -fprofile-sample-use=%S/Inputs/pgo-sample-thinlto-summary.prof %s -emit-llvm -o - 2>&1 | FileCheck %s -check-prefix=SAMPLEPGO +// RUN: %clang_cc1 -mllvm -opt-bisect-limit=-1 -O2 -fexperimental-new-pass-manager -fprofile-sample-use=%S/Inputs/pgo-sample-thinlto-summary.prof %s -emit-llvm -flto=thin -o - 2>&1 | FileCheck %s -check-prefix=THINLTO int baz(int); int g; @@ -13,34 +11,31 @@ g += baz(i); } -// SAMPLEPGO-LABEL: define {{(dso_local )?}}void @bar -// THINLTO-LABEL: define {{(dso_local )?}}void @bar -// SAMPLEPGO-NOT: call{{.*}}foo -// THINLTO: call{{.*}}foo -void bar(int n) { - for (int i = 0; i < n; i++) - foo(i); -} // Checks if loop unroll is invoked by normal compile, but not thinlto compile. -// SAMPLEPGO-LABEL: define {{(dso_local )?}}void @unroll -// THINLTO-LABEL: define {{(dso_local )?}}void @unroll -// SAMPLEPGO: call{{.*}}baz -// SAMPLEPGO: call{{.*}}baz -// THINLTO: call{{.*}}baz -// THINLTO-NOT: call{{.*}}baz +// Checks that icp is not invoked for ThinLTO, but invoked for normal samplepgo. +// SAMPLEPGO-LABEL: running pass ({{[0-9]+}}) {{[a-zA-Z0-9]+}} on +// THINLTO-LABEL: running pass ({{[0-9]+}}) {{[a-zA-Z0-9]+}} on +// SAMPLEPGO: running pass ({{[0-9]+}}) PGOIndirectCallPromotion on [module] +// SAMPLEPGO: running pass ({{[0-9]+}}) LoopUnrollPass on unroll +// THINLTO-NOT: running pass ({{[0-9]+}}) PGOIndirectCallPromotion on [module] +// THINLTO-NOT: running pass ({{[0-9]+}}) LoopUnrollPass on unroll void unroll() { - for (int i = 0; i < 2; i++) + for (int i = 0; i < 3; i++) baz(i); } -// Checks that icp is not invoked for ThinLTO, but invoked for normal samplepgo. -// SAMPLEPGO-LABEL: define {{(dso_local )?}}void @icp -// THINLTO-LABEL: define {{(dso_local )?}}void @icp -// SAMPLEPGO: if.false.orig_indirect -// FIXME: the following condition needs to be reversed once -// LTOPreLinkDefaultPipeline is customized. -// THINLTO-NOT: if.false.orig_indirect void icp(void (*p)()) { p(); } + +// Checks if hot call is inlined by normal compile, but not inlined by +// thinlto compile. +// SAMPLEPGO-LABEL: define {{(dso_local )?}}void @bar +// THINLTO-LABEL: define {{(dso_local )?}}void @bar +// SAMPLEPGO-NOT: call{{.*}}foo +// THINLTO: call{{.*}}foo +void bar(int n) { + for (int i = 0; i < n; i++) + foo(i); +} \ No newline at end of file