Index: clang/test/CodeGenCXX/Inputs/profile-remap.proftext =================================================================== --- clang/test/CodeGenCXX/Inputs/profile-remap.proftext +++ clang/test/CodeGenCXX/Inputs/profile-remap.proftext @@ -1,7 +1,8 @@ :ir +:entry_first _ZN3Foo8functionENS_1XE 29667547796 2 -10 +100 90 Index: clang/test/Profile/Inputs/gcc-flag-compatibility_IR.proftext =================================================================== --- clang/test/Profile/Inputs/gcc-flag-compatibility_IR.proftext +++ clang/test/Profile/Inputs/gcc-flag-compatibility_IR.proftext @@ -1,11 +1,12 @@ # IR level Instrumentation Flag :ir +:entry_first main # Func Hash: 34137660316 # Num Counters: 2 # Counter Values: -100 1 +100 Index: compiler-rt/test/profile/Linux/counter_promo_for.c =================================================================== --- compiler-rt/test/profile/Linux/counter_promo_for.c +++ compiler-rt/test/profile/Linux/counter_promo_for.c @@ -1,13 +1,13 @@ // RUN: rm -fr %t.promo.prof // RUN: rm -fr %t.nopromo.prof -// RUN: %clang_pgogen=%t.promo.prof/ -o %t.promo.gen -O2 %s -// RUN: %clang_pgogen=%t.promo.prof/ -o %t.promo.gen.ll -emit-llvm -S -O2 %s +// RUN: %clang_pgogen=%t.promo.prof/ -mllvm -pgo-instrument-entry=false -o %t.promo.gen -O2 %s +// RUN: %clang_pgogen=%t.promo.prof/ -mllvm -pgo-instrument-entry=false -o %t.promo.gen.ll -emit-llvm -S -O2 %s // RUN: cat %t.promo.gen.ll | FileCheck --check-prefix=PROMO %s // RUN: %run %t.promo.gen // RUN: llvm-profdata merge -o %t.promo.profdata %t.promo.prof/ // RUN: llvm-profdata show --counts --all-functions %t.promo.profdata > %t.promo.dump -// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -mllvm -simplifycfg-sink-common=false -o %t.nopromo.gen -O2 %s -// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -mllvm -simplifycfg-sink-common=false -o %t.nopromo.gen.ll -emit-llvm -S -O2 %s +// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -mllvm -pgo-instrument-entry=false -mllvm -simplifycfg-sink-common=false -o %t.nopromo.gen -O2 %s +// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -mllvm -pgo-instrument-entry=false -mllvm -simplifycfg-sink-common=false -o %t.nopromo.gen.ll -emit-llvm -S -O2 %s // RUN: cat %t.nopromo.gen.ll | FileCheck --check-prefix=NOPROMO %s // RUN: %run %t.nopromo.gen // RUN: llvm-profdata merge -o %t.nopromo.profdata %t.nopromo.prof/ Index: compiler-rt/test/profile/Linux/counter_promo_while.c =================================================================== --- compiler-rt/test/profile/Linux/counter_promo_while.c +++ compiler-rt/test/profile/Linux/counter_promo_while.c @@ -1,13 +1,13 @@ // RUN: rm -fr %t.promo.prof // RUN: rm -fr %t.nopromo.prof -// RUN: %clang_pgogen=%t.promo.prof/ -o %t.promo.gen -O2 %s -// RUN: %clang_pgogen=%t.promo.prof/ -o %t.promo.gen.ll -emit-llvm -S -O2 %s +// RUN: %clang_pgogen=%t.promo.prof/ -mllvm -pgo-instrument-entry=false -o %t.promo.gen -O2 %s +// RUN: %clang_pgogen=%t.promo.prof/ -mllvm -pgo-instrument-entry=false -o %t.promo.gen.ll -emit-llvm -S -O2 %s // RUN: cat %t.promo.gen.ll | FileCheck --check-prefix=PROMO %s // RUN: %run %t.promo.gen // RUN: llvm-profdata merge -o %t.promo.profdata %t.promo.prof/ // RUN: llvm-profdata show --counts --all-functions %t.promo.profdata > %t.promo.dump -// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -mllvm -simplifycfg-sink-common=false -o %t.nopromo.gen -O2 %s -// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -mllvm -simplifycfg-sink-common=false -o %t.nopromo.gen.ll -emit-llvm -S -O2 %s +// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -mllvm -pgo-instrument-entry=false -mllvm -simplifycfg-sink-common=false -o %t.nopromo.gen -O2 %s +// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -mllvm -pgo-instrument-entry=false -mllvm -simplifycfg-sink-common=false -o %t.nopromo.gen.ll -emit-llvm -S -O2 %s // RUN: cat %t.nopromo.gen.ll | FileCheck --check-prefix=NOPROMO %s // RUN: %run %t.nopromo.gen // RUN: llvm-profdata merge -o %t.nopromo.profdata %t.nopromo.prof/ Index: compiler-rt/test/profile/Linux/instrprof-value-merge.c =================================================================== --- compiler-rt/test/profile/Linux/instrprof-value-merge.c +++ compiler-rt/test/profile/Linux/instrprof-value-merge.c @@ -1,3 +1,11 @@ +// RUN: %clang_pgogen -mllvm -pgo-instrument-entry=false -o %t -O3 %s +// RUN: rm -rf %t.profdir +// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t +// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t +// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t +// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t 1 +// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t 1 +// RUN: llvm-profdata show -counts -function=main -ic-targets -memop-sizes %t.profdir/default_*.profraw | FileCheck %s --check-prefixes=CHECK,NOENTRY // RUN: %clang_pgogen -o %t -O3 %s // RUN: rm -rf %t.profdir // RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t @@ -5,7 +13,7 @@ // RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t // RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t 1 // RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t 1 -// RUN: llvm-profdata show -counts -function=main -ic-targets -memop-sizes %t.profdir/default_*.profraw | FileCheck %s +// RUN: llvm-profdata show -counts -function=main -ic-targets -memop-sizes %t.profdir/default_*.profraw | FileCheck %s --check-prefixes=CHECK,ENTRY #include @@ -49,7 +57,8 @@ // CHECK: Counters: 6 // CHECK: Indirect Call Site Count: 3 // CHECK: Number of Memory Intrinsics Calls: 3 -// CHECK: Block counts: [27, 297, 12, 132, 3, 2] +// NOTENTRY: Block counts: [27, 297, 12, 132, 3, 2] +// ENTRY: Block counts: [5, 27, 297, 12, 132, 2] // CHECK: Indirect Target Results: // CHECK: [ 0, foo, 3 ] // CHECK: [ 1, foo, 27 ] Index: compiler-rt/test/profile/infinite_loop.c =================================================================== --- compiler-rt/test/profile/infinite_loop.c +++ compiler-rt/test/profile/infinite_loop.c @@ -1,6 +1,9 @@ -// RUN: %clang_pgogen -O2 -o %t %s +// RUN: %clang_pgogen -O2 -mllvm -pgo-instrument-entry=false -o %t %s // RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t -// RUN: llvm-profdata show -function main -counts %t.profraw| FileCheck %s +// RUN: llvm-profdata show -function main -counts %t.profraw| FileCheck %s --check-prefixes=CHECK,NOENTRY +// RUN: %clang_pgogen -O2 -o %t %s +// RUN: env LLVM_PROFILE_FILE=%t2.profraw %run %t +// RUN: llvm-profdata show -function main -counts %t2.profraw| FileCheck %s --check-prefixes=CHECK,ENTRY void exit(int); int g; @@ -24,7 +27,5 @@ // CHECK-NEXT: main: // CHECK-NEXT: Hash: {{.*}} // CHECK-NEXT: Counters: 2 -// CHECK-NEXT: Block counts: [1000, 1] - - - +// NOTENTRY-NEXT: Block counts: [1000, 1] +// ENTRY-NEXT: Block counts: [1, 1000] Index: compiler-rt/test/profile/runtime_infinite.c =================================================================== --- compiler-rt/test/profile/runtime_infinite.c +++ compiler-rt/test/profile/runtime_infinite.c @@ -4,9 +4,12 @@ // that the entry of main is properly instrumented // and has non-zero count. -// RUN: %clang_pgogen -mllvm -do-counter-promotion=false -O2 -o %t %s +// RUN: %clang_pgogen -mllvm -do-counter-promotion=false -mllvm -pgo-instrument-entry=false -O2 -o %t %s // RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t -// RUN: llvm-profdata show -function main -counts %t.profraw| FileCheck %s +// RUN: llvm-profdata show -function main -counts %t.profraw| FileCheck %s --check-prefixes=CHECK,NOTENTRY +// RUN: %clang_pgogen -mllvm -do-counter-promotion=false -O2 -o %t %s +// RUN: env LLVM_PROFILE_FILE=%t2.profraw %run %t +// RUN: llvm-profdata show -function main -counts %t2.profraw| FileCheck %s --check-prefixes=CHECK,ENTRY void exit(int); int __llvm_profile_dump(void); @@ -33,4 +36,5 @@ } // CHECK-LABEL: main -// CHECK: [10001, 1] +// NOENTRY: [10001, 1] +// ENTRY: [1, 10001] Index: llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp =================================================================== --- llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp +++ llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp @@ -250,7 +250,7 @@ "pass-remarks}=pgo-instrumentation")); static cl::opt PGOInstrumentEntry( - "pgo-instrument-entry", cl::init(false), cl::Hidden, + "pgo-instrument-entry", cl::init(true), cl::Hidden, cl::desc("Force to instrument function entry basicblock.")); // Command line option to turn on CFG dot dump after profile annotation. Index: llvm/test/Transforms/PGOProfile/Inputs/PR41279.proftext =================================================================== --- llvm/test/Transforms/PGOProfile/Inputs/PR41279.proftext +++ llvm/test/Transforms/PGOProfile/Inputs/PR41279.proftext @@ -1,8 +1,9 @@ :ir +:entry_first foo 60927483247 4 -3 +8 2 3 2 Index: llvm/test/Transforms/PGOProfile/Inputs/PR41279_2.proftext =================================================================== --- llvm/test/Transforms/PGOProfile/Inputs/PR41279_2.proftext +++ llvm/test/Transforms/PGOProfile/Inputs/PR41279_2.proftext @@ -1,7 +1,8 @@ :ir +:entry_first f 62077759478 2 +5 3 -2 Index: llvm/test/Transforms/PGOProfile/PR41279.ll =================================================================== --- llvm/test/Transforms/PGOProfile/PR41279.ll +++ llvm/test/Transforms/PGOProfile/PR41279.ll @@ -23,6 +23,7 @@ br i1 %5, label %7, label %13 ; USE: br i1 %5, label %7, label %13 ; USE-SAME: !prof ![[BW_ENTRY1:[0-9]+]] +; GEN: call void @llvm.instrprof.increment(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @__profn_foo, i32 0, i32 0), i64 60927483247, i32 4, i32 0) 6: cleanupret from %17 unwind to caller @@ -55,8 +56,6 @@ 13: call void @f3({ i8*, i64 }* %0, { i8*, i64 }* %1, i64 1) br label %14 -; GEN: 13: -; GEN: call void @llvm.instrprof.increment(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @__profn_foo, i32 0, i32 0), i64 60927483247, i32 4, i32 0) 14: ret void Index: llvm/test/Transforms/PGOProfile/PR41279_2.ll =================================================================== --- llvm/test/Transforms/PGOProfile/PR41279_2.ll +++ llvm/test/Transforms/PGOProfile/PR41279_2.ll @@ -17,6 +17,8 @@ %__exception_code2 = alloca i32, align 4 invoke void @f() #2 to label %invoke.cont unwind label %catch.dispatch +;GEN: entry: +;GEN: call void @llvm.instrprof.increment(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @__profn_f, i32 0, i32 0), i64 62077759478, i32 2, i32 0) catch.dispatch: %0 = catchswitch within none [label %__except] unwind to caller @@ -58,9 +60,6 @@ invoke.cont3: br label %__try.cont7 -;GEN: invoke.cont3: -;GEN: call void @llvm.instrprof.increment(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @__profn_f, i32 0, i32 0), i64 62077759478, i32 2, i32 0) - } declare dso_local i32 @__C_specific_handler(...) Index: llvm/test/Transforms/PGOProfile/counter_promo.ll =================================================================== --- llvm/test/Transforms/PGOProfile/counter_promo.ll +++ llvm/test/Transforms/PGOProfile/counter_promo.ll @@ -5,9 +5,9 @@ define void @foo(i32 %n, i32 %N) { ; PROMO-LABEL: @foo -; PROMO: {{.*}} = load {{.*}} @__profc_foo{{.*}} 3) +; PROMO: {{.*}} = load {{.*}} @__profc_foo{{.*}} 0) ; PROMO-NEXT: add -; PROMO-NEXT: store {{.*}}@__profc_foo{{.*}}3) +; PROMO-NEXT: store {{.*}}@__profc_foo{{.*}}0) bb: %tmp = add nsw i32 %n, 1 %tmp1 = add nsw i32 %n, -1 @@ -48,18 +48,18 @@ bb12: ; preds = %bb9 ret void -; NONATOMIC_PROMO: %[[PROMO1:[a-z0-9.]+]] = load {{.*}} @__profc_foo{{.*}} 0) +; NONATOMIC_PROMO: %[[PROMO1:[a-z0-9.]+]] = load {{.*}} @__profc_foo{{.*}} 1) ; NONATOMIC_PROMO-NEXT: add {{.*}} %[[PROMO1]], %[[LIVEOUT1]] -; NONATOMIC_PROMO-NEXT: store {{.*}}@__profc_foo{{.*}}0) -; NONATOMIC_PROMO-NEXT: %[[PROMO2:[a-z0-9.]+]] = load {{.*}} @__profc_foo{{.*}} 1) -; NONATOMIC_PROMO-NEXT: add {{.*}} %[[PROMO2]], %[[LIVEOUT2]] ; NONATOMIC_PROMO-NEXT: store {{.*}}@__profc_foo{{.*}}1) -; NONATOMIC_PROMO-NEXT: %[[PROMO3:[a-z0-9.]+]] = load {{.*}} @__profc_foo{{.*}} 2) -; NONATOMIC_PROMO-NEXT: add {{.*}} %[[PROMO3]], %[[LIVEOUT3]] +; NONATOMIC_PROMO-NEXT: %[[PROMO2:[a-z0-9.]+]] = load {{.*}} @__profc_foo{{.*}} 2) +; NONATOMIC_PROMO-NEXT: add {{.*}} %[[PROMO2]], %[[LIVEOUT2]] ; NONATOMIC_PROMO-NEXT: store {{.*}}@__profc_foo{{.*}}2) -; ATOMIC_PROMO: atomicrmw add {{.*}} @__profc_foo{{.*}}0), i64 %[[LIVEOUT1]] seq_cst -; ATOMIC_PROMO-NEXT: atomicrmw add {{.*}} @__profc_foo{{.*}}1), i64 %[[LIVEOUT2]] seq_cst -; ATOMIC_PROMO-NEXT: atomicrmw add {{.*}} @__profc_foo{{.*}}2), i64 %[[LIVEOUT3]] seq_cst +; NONATOMIC_PROMO-NEXT: %[[PROMO3:[a-z0-9.]+]] = load {{.*}} @__profc_foo{{.*}} 3) +; NONATOMIC_PROMO-NEXT: add {{.*}} %[[PROMO3]], %[[LIVEOUT3]] +; NONATOMIC_PROMO-NEXT: store {{.*}}@__profc_foo{{.*}}3) +; ATOMIC_PROMO: atomicrmw add {{.*}} @__profc_foo{{.*}}1), i64 %[[LIVEOUT1]] seq_cst +; ATOMIC_PROMO-NEXT: atomicrmw add {{.*}} @__profc_foo{{.*}}2), i64 %[[LIVEOUT2]] seq_cst +; ATOMIC_PROMO-NEXT: atomicrmw add {{.*}} @__profc_foo{{.*}}3), i64 %[[LIVEOUT3]] seq_cst ; PROMO-NOT: @__profc_foo Index: llvm/test/Transforms/PGOProfile/counter_promo_mexits.ll =================================================================== --- llvm/test/Transforms/PGOProfile/counter_promo_mexits.ll +++ llvm/test/Transforms/PGOProfile/counter_promo_mexits.ll @@ -40,34 +40,31 @@ ; PROMO-LABEL: bb14: tail call void @bar(i32 0) br label %bb15 -; PROMO: %pgocount.promoted{{.*}} = load {{.*}} @__profc_foo{{.*}} 0) -; PROMO-NEXT: add -; PROMO-NEXT: store {{.*}}@__profc_foo{{.*}}0) -; PROMO-NEXT: %pgocount.promoted{{.*}} = load {{.*}} @__profc_foo{{.*}} 1) -; PROMO-NEXT: add +; PROMO: %pgocount.promoted{{.*}} = load {{.*}} @__profc_foo{{.*}} 1) +; PROMO-NEXT: add ; PROMO-NEXT: store {{.*}}@__profc_foo{{.*}}1) ; PROMO-NEXT: %pgocount.promoted{{.*}} = load {{.*}} @__profc_foo{{.*}} 2) -; PROMO-NEXT: add +; PROMO-NEXT: add ; PROMO-NEXT: store {{.*}}@__profc_foo{{.*}}2) -; PROMO-NEXT: %pgocount{{.*}} = load {{.*}} @__profc_foo{{.*}} 3) -; PROMO-NEXT: add +; PROMO-NEXT: %pgocount.promoted{{.*}} = load {{.*}} @__profc_foo{{.*}} 3) +; PROMO-NEXT: add ; PROMO-NEXT: store {{.*}}@__profc_foo{{.*}}3) bb15_0: ; preds = %bb11 ; PROMO-LABEL: bb15_0: br label %bb15 -; PROMO: %pgocount.promoted{{.*}} = load {{.*}} @__profc_foo{{.*}} 0) -; PROMO-NEXT: add -; PROMO-NEXT: store {{.*}}@__profc_foo{{.*}}0) -; PROMO-NEXT: %pgocount.promoted{{.*}} = load {{.*}} @__profc_foo{{.*}} 1) -; PROMO-NEXT: add +; PROMO: %pgocount.promoted{{.*}} = load {{.*}} @__profc_foo{{.*}} 1) +; PROMO-NEXT: add ; PROMO-NEXT: store {{.*}}@__profc_foo{{.*}}1) ; PROMO-NEXT: %pgocount.promoted{{.*}} = load {{.*}} @__profc_foo{{.*}} 2) -; PROMO-NEXT: add +; PROMO-NEXT: add ; PROMO-NEXT: store {{.*}}@__profc_foo{{.*}}2) +; PROMO-NEXT: %pgocount.promoted{{.*}} = load {{.*}} @__profc_foo{{.*}} 3) +; PROMO-NEXT: add +; PROMO-NEXT: store {{.*}}@__profc_foo{{.*}}3) ; PROMO-NEXT: %pgocount{{.*}} = load {{.*}} @__profc_foo{{.*}} 4) -; PROMO-NEXT: add +; PROMO-NEXT: add ; PROMO-NEXT: store {{.*}}@__profc_foo{{.*}}4) ; PROMO-NOT: @__profc_foo