[PGO] Avoid instrumenting constants at value sites
Value profiling should not profile constants and/or constant expressions when they appear as callees in call instructions. Constant expressions form when a direct callee has bitcasts or inttoptr(ptrtint (callee)) nests surrounding it. Value profiling should avoid instrumenting such cases. Mostly NFC. llvm-svn: 265037
This commit is contained in:
parent
e1a2e90ffa
commit
3da993c419
|
@ -755,6 +755,9 @@ void CodeGenPGO::valueProfile(CGBuilderTy &Builder, uint32_t ValueKind,
|
|||
if (!ValuePtr || !ValueSite || !Builder.GetInsertBlock())
|
||||
return;
|
||||
|
||||
if (isa<llvm::Constant>(ValuePtr))
|
||||
return;
|
||||
|
||||
bool InstrumentValueSites = CGM.getCodeGenOpts().hasProfileClangInstr();
|
||||
if (InstrumentValueSites && RegionCounterMap) {
|
||||
auto BuilderInsertPoint = Builder.saveIP();
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
// Check the value profiling instrinsics emitted by instrumentation.
|
||||
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -main-file-name c-avoid-direct-call.c %s -o - -emit-llvm -fprofile-instrument=clang -mllvm -enable-value-profiling | FileCheck %s
|
||||
|
||||
void foo();
|
||||
|
||||
int main(void) {
|
||||
// CHECK-NOT: call void @__llvm_profile_instrument_target
|
||||
foo(21);
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue