94 lines · c
1// RUN: %clang_profgen -o %t -O3 %s2// RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t3// RUN: llvm-profdata merge -o %t.profdata %t.profraw4// RUN: llvm-profdata show --all-functions %t.profdata | FileCheck %s --check-prefix=PROFCNT5// RUN: %clang_profuse=%t.profdata -o - -S -emit-llvm %s | FileCheck %s --check-prefix=COMMON --check-prefix=ORIG6//7// RUN: rm -fr %t.dir18// RUN: mkdir -p %t.dir19// RUN: env LLVM_PROFILE_FILE=%t.dir1/profraw_e_%1m %run %t10// RUN: env LLVM_PROFILE_FILE=%t.dir1/profraw_e_%1m %run %t11// RUN: llvm-profdata merge -o %t.em.profdata %t.dir112// RUN: llvm-profdata show --all-functions %t.em.profdata | FileCheck %s --check-prefix=PROFCNT13// RUN: %clang_profuse=%t.em.profdata -o - -S -emit-llvm %s | FileCheck %s --check-prefix=COMMON --check-prefix=MERGE14//15// RUN: rm -fr %t.dir216// RUN: mkdir -p %t.dir217// RUN: %clang_profgen=%t.dir2/%m.profraw -o %t.merge -O3 %s18// RUN: %run %t.merge19// RUN: %run %t.merge20// RUN: llvm-profdata merge -o %t.m.profdata %t.dir2/21// RUN: llvm-profdata show --all-functions %t.m.profdata | FileCheck %s --check-prefix=PROFCNT22// RUN: %clang_profuse=%t.m.profdata -o - -S -emit-llvm %s | FileCheck %s --check-prefix=COMMON --check-prefix=MERGE23//24// Test that merging is enabled by default with -fprofile-generate=25// RUN: rm -fr %t.dir326// RUN: mkdir -p %t.dir327// RUN: %clang_pgogen=%t.dir3/ -o %t.merge3 -O0 %s28// RUN: %run %t.merge329// RUN: %run %t.merge330// RUN: %run %t.merge331// RUN: %run %t.merge332// RUN: llvm-profdata merge -o %t.m3.profdata %t.dir3/33// RUN: llvm-profdata show --all-functions %t.m3.profdata | FileCheck %s --check-prefix=PROFCNT34// RUN: %clang_profuse=%t.m3.profdata -O0 -o - -S -emit-llvm %s | FileCheck %s --check-prefix=COMMON --check-prefix=PGOMERGE35//36// Test that merging is enabled by default with -fprofile-generate37// RUN: rm -fr %t.dir438// RUN: mkdir -p %t.dir439// RUN: %clang_pgogen -o %t.dir4/merge4 -O0 %s40// RUN: cd %t.dir441// RUN: %run %t.dir4/merge442// RUN: %run %t.dir4/merge443// RUN: %run %t.dir4/merge444// RUN: %run %t.dir4/merge445// RUN: rm -f %t.dir4/merge4*46// RUN: llvm-profdata merge -o %t.m4.profdata ./47// RUN: llvm-profdata show --all-functions %t.m4.profdata | FileCheck %s --check-prefix=PROFCNT48// RUN: %clang_profuse=%t.m4.profdata -O0 -o - -S -emit-llvm %s | FileCheck %s --check-prefix=COMMON --check-prefix=PGOMERGE49 50/// Test that the merge pool size can be larger than 10.51// RUN: rm -fr %t.dir552// RUN: mkdir -p %t.dir553// RUN: env LLVM_PROFILE_FILE=%t.dir5/e_%20m.profraw %run %t54// RUN: not ls %t.dir5/e_%20m.profraw55// RUN: ls %t.dir5/e_*.profraw | count 156 57// Test that all three functions have counters in the profile.58// PROFCNT-DAG: begin59// PROFCNT-DAG: end60// PROFCNT-DAG: main61// PROFCNT: Functions shown: 362// PROFCNT: Total functions: 363 64int begin(int i) {65 // COMMON: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !prof ![[PD1:[0-9]+]]66 if (i)67 return 0;68 return 1;69}70 71int end(int i) {72 // COMMON: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !prof ![[PD2:[0-9]+]]73 if (i)74 return 0;75 return 1;76}77 78int main(int argc, const char *argv[]) {79 begin(0);80 end(1);81 82 // COMMON: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !prof ![[PD2:[0-9]+]]83 if (argc)84 return 0;85 return 1;86}87 88// ORIG: ![[PD1]] = !{!"branch_weights", i32 1, i32 2}89// ORIG: ![[PD2]] = !{!"branch_weights", i32 2, i32 1}90// MERGE: ![[PD1]] = !{!"branch_weights", i32 1, i32 3}91// MERGE: ![[PD2]] = !{!"branch_weights", i32 3, i32 1}92// PGOMERGE: ![[PD1]] = !{!"branch_weights", i32 0, i32 4}93// PGOMERGE: ![[PD2]] = !{!"branch_weights", i32 4, i32 0}94