forked from OSchip/llvm-project
InstrProf: Don't emit counter increments in dead code
We were previously emitting counter increments even if we didn't have an insertion point, which would result in a CallInst with no parent. This leads to a crash, as in pr22166, if we try to do GlobalDCE. llvm-svn: 225495
This commit is contained in:
parent
4f217684c7
commit
203f91e311
|
@ -788,6 +788,8 @@ CodeGenPGO::applyFunctionAttributes(llvm::IndexedInstrProfReader *PGOReader,
|
|||
void CodeGenPGO::emitCounterIncrement(CGBuilderTy &Builder, unsigned Counter) {
|
||||
if (!CGM.getCodeGenOpts().ProfileInstrGenerate || !RegionCounterMap)
|
||||
return;
|
||||
if (!Builder.GetInsertPoint())
|
||||
return;
|
||||
auto *I8PtrTy = llvm::Type::getInt8PtrTy(CGM.getLLVMContext());
|
||||
Builder.CreateCall4(CGM.getIntrinsic(llvm::Intrinsic::instrprof_increment),
|
||||
llvm::ConstantExpr::getBitCast(FuncNameVar, I8PtrTy),
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
// RUN: %clang_cc1 -O3 -triple x86_64-apple-macosx10.10 -main-file-name c-unreachable-after-switch.c %s -o - -emit-llvm -fprofile-instr-generate | FileCheck %s
|
||||
|
||||
// CHECK: @[[C:__llvm_profile_counters_foo]] = hidden global [3 x i64] zeroinitializer
|
||||
|
||||
// CHECK-LABEL: @foo()
|
||||
// CHECK: store {{.*}} @[[C]], i64 0, i64 0
|
||||
void foo() {
|
||||
// CHECK: store {{.*}} @[[C]], i64 0, i64 2
|
||||
switch (0) {
|
||||
default:
|
||||
return;
|
||||
}
|
||||
// We shouldn't emit the unreachable counter. This used to crash in GlobalDCE.
|
||||
// CHECK-NOT: store {{.*}} @[[SWC]], i64 0, i64 1}
|
||||
}
|
Loading…
Reference in New Issue