From: Betul Buyukkurt Date: Thu, 31 Mar 2016 18:41:34 +0000 (+0000) Subject: [PGO] Avoid instrumenting constants at value sites X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6e6cdb98bca3d291d3d1450f793a06d3ceb028f8;p=clang [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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@265037 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CodeGenPGO.cpp b/lib/CodeGen/CodeGenPGO.cpp index e5993f51e4..7e89492f1c 100644 --- a/lib/CodeGen/CodeGenPGO.cpp +++ b/lib/CodeGen/CodeGenPGO.cpp @@ -755,6 +755,9 @@ void CodeGenPGO::valueProfile(CGBuilderTy &Builder, uint32_t ValueKind, if (!ValuePtr || !ValueSite || !Builder.GetInsertBlock()) return; + if (isa(ValuePtr)) + return; + bool InstrumentValueSites = CGM.getCodeGenOpts().hasProfileClangInstr(); if (InstrumentValueSites && RegionCounterMap) { auto BuilderInsertPoint = Builder.saveIP(); diff --git a/test/Profile/c-avoid-direct-call.c b/test/Profile/c-avoid-direct-call.c new file mode 100644 index 0000000000..cd02e714db --- /dev/null +++ b/test/Profile/c-avoid-direct-call.c @@ -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; +}