Skip to content

Commit

Permalink
[InstrProfiling] No runtime hook for unused funcs
Browse files Browse the repository at this point in the history
CoverageMappingModuleGen generates a coverage mapping record
even for unused functions with internal linkage, e.g.
static int foo() { return 100; }
Clang frontend eliminates such functions, but InstrProfiling pass
still pulls in profile runtime since there is a coverage record.
Fuchsia uses runtime counter relocation, and pulling in profile
runtime for unused functions causes a linker error:
undefined hidden symbol: __llvm_profile_counter_bias.
Since 389dc94, we do not hook profile runtime for the binaries
that none of its translation units have been instrumented in Fuchsia.
This patch extends that for the instrumented binaries that
consist of only unused functions.

Differential Revision: https://reviews.llvm.org/D122336
  • Loading branch information
gulfemsavrun committed Mar 25, 2022
1 parent b867f5c commit c7f91e2
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 5 deletions.
@@ -0,0 +1,6 @@
// RUN: %clang -target x86_64-unknown-fuchsia -fprofile-instr-generate -fcoverage-mapping -emit-llvm -S %s -o - | FileCheck %s

// CHECK-NOT: @__llvm_profile_runtime
static int f0() {
return 100;
}
12 changes: 7 additions & 5 deletions llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp
Expand Up @@ -558,16 +558,18 @@ bool InstrProfiling::run(
TT = Triple(M.getTargetTriple());

bool MadeChange = false;

// Emit the runtime hook even if no counters are present.
if (needsRuntimeHookUnconditionally(TT))
bool NeedsRuntimeHook = needsRuntimeHookUnconditionally(TT);
if (NeedsRuntimeHook)
MadeChange = emitRuntimeHook();

// Improve compile time by avoiding linear scans when there is no work.
GlobalVariable *CoverageNamesVar =
M.getNamedGlobal(getCoverageUnusedNamesVarName());
if (!containsProfilingIntrinsics(M) && !CoverageNamesVar)
return MadeChange;
if (!containsProfilingIntrinsics(M)) {
if (!CoverageNamesVar || !NeedsRuntimeHook) {
return MadeChange;
}
}

// We did not know how many value sites there would be inside
// the instrumented function. This is counting the number of instrumented
Expand Down

0 comments on commit c7f91e2

Please sign in to comment.