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 -debug-pass=Structure -O2 -fno-experimental-new-pass-manager -fprofile-sample-use=%S/Inputs/pgo-sample-thinlto-summary.prof %s -emit-llvm -o - 2>&1 | FileCheck %s -check-prefix=SAMPLEPGO-OLDPM +// RUN: %clang_cc1 -mllvm -debug-pass=Structure -O2 -fno-experimental-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-OLDPM +// RUN: %clang_cc1 -mllvm -debug-pass=Structure -O2 -fexperimental-new-pass-manager -fdebug-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 -debug-pass=Structure -O2 -fexperimental-new-pass-manager -fdebug-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,6 +11,25 @@ g += baz(i); } +// Checks that loop unroll and icp are invoked by normal compile, but not thinlto compile. + +// SAMPLEPGO: Running pass: PGOIndirectCallPromotion on [module] +// SAMPLEPGO: Running pass: LoopUnrollPass on bar + +// SAMPLEPGO-OLDPM: PGOIndirectCallPromotion +// SAMPLEPGO-OLDPM: Unroll loops +// SAMPLEPGO-OLDPM: Unroll loops + +// THINLTO-NOT: Running pass: PGOIndirectCallPromotion on [module] +// THINLTO-NOT: Running pass: LoopUnrollPass on bar + +// THINLTO-OLDPM-NOT: PGOIndirectCallPromotion +// THINLTO-OLDPM: Unroll loops +// THINLTO-OLDPM-NOT: Unroll loops + + +// 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 @@ -20,27 +37,4 @@ 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 -void unroll() { - for (int i = 0; i < 2; 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.true.direct_targ -// FIXME: the following condition needs to be reversed once -// LTOPreLinkDefaultPipeline is customized. -// THINLTO-NOT: if.true.direct_targ -void icp(void (*p)()) { - p(); -} +} \ No newline at end of file