54 lines · c
1// RUN: rm -fr %t.promo.prof2// RUN: rm -fr %t.nopromo.prof3// RUN: %clang_pgogen=%t.promo.prof/ -o %t.promo.gen -O2 %s4// RUN: %clang_pgogen=%t.promo.prof/ -o %t.promo.gen.ll -emit-llvm -S -O2 %s5// RUN: cat %t.promo.gen.ll | FileCheck --check-prefix=PROMO %s6// RUN: %run %t.promo.gen7// RUN: llvm-profdata merge -o %t.promo.profdata %t.promo.prof/8// RUN: llvm-profdata show --counts --all-functions %t.promo.profdata > %t.promo.dump9// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -o %t.nopromo.gen -O2 %s10// RUN: %run %t.nopromo.gen11// RUN: llvm-profdata merge -o %t.nopromo.profdata %t.nopromo.prof/12// RUN: llvm-profdata show --counts --all-functions %t.nopromo.profdata > %t.nopromo.dump13// RUN: llvm-profdata show %t.promo.profdata > %t.promo.dump14// RUN: llvm-profdata show %t.nopromo.profdata > %t.nopromo.dump15// RUN: diff %t.promo.dump %t.nopromo.dump16int g;17__attribute__((noinline)) void bar() {18 g++;19}20 21extern int printf(const char*,...);22 23int c = 10;24 25int main()26// PROMO-LABEL: @main27// PROMO: load{{.*}}@__profc_main{{.*}}28// PROMO-NEXT: add29// PROMO-NEXT: store{{.*}}@__profc_main{{.*}}30// PROMO: load{{.*}}@__profc_main{{.*}}31// PROMO-NEXT: add32// PROMO-NEXT: store{{.*}}@__profc_main{{.*}}33// PROMO-NEXT: load{{.*}}@__profc_main{{.*}}34// PROMO-NEXT: add35// PROMO-NEXT: store{{.*}}@__profc_main{{.*}}36{37 int i, j, k;38 39 g = 0;40 for (i = 0; i < c; i++)41 for (j = 0; j < c; j++)42 for (k = 0; k < c; k++)43 bar();44 45 for (i = 0; i < c; i++)46 for (j = 0; j < 10*c;j++)47 bar();48 49 for (i = 0; i < 100*c; i++)50 bar();51 52 return 0;53}54