// 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. int baz(int); int g; void foo(int n) { for (int i = 0; i < n; i++) 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 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(); }