From 1ee511c19c72f0c3dedfd769cc6e370cd308c240 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Fri, 26 Jan 2018 23:54:24 +0000 Subject: [PATCH] [InstrProfiling] Improve compile time when there is no work When there are no uses of profiling intrinsics in a module, and there's no coverage data to lower, InstrProfiling has no work to do. llvm-svn: 323574 --- .../Instrumentation/InstrProfiling.cpp | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp b/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp index 9b70f95480e4..fcc07ee45559 100644 --- a/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp +++ b/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp @@ -430,7 +430,27 @@ void InstrProfiling::promoteCounterLoadStores(Function *F) { } } +/// Check if the module contains uses of any profiling intrinsics. +static bool containsProfilingIntrinsics(Module &M) { + if (auto *F = M.getFunction( + Intrinsic::getName(llvm::Intrinsic::instrprof_increment))) + return !F->use_empty(); + if (auto *F = M.getFunction( + Intrinsic::getName(llvm::Intrinsic::instrprof_increment_step))) + return !F->use_empty(); + if (auto *F = M.getFunction( + Intrinsic::getName(llvm::Intrinsic::instrprof_value_profile))) + return !F->use_empty(); + return false; +} + bool InstrProfiling::run(Module &M, const TargetLibraryInfo &TLI) { + // Improve compile time by avoiding linear scans when there is no work. + GlobalVariable *CoverageNamesVar = + M.getNamedGlobal(getCoverageUnusedNamesVarName()); + if (!containsProfilingIntrinsics(M) && !CoverageNamesVar) + return false; + bool MadeChange = false; this->M = &M; @@ -464,8 +484,7 @@ bool InstrProfiling::run(Module &M, const TargetLibraryInfo &TLI) { for (Function &F : M) MadeChange |= lowerIntrinsics(&F); - if (GlobalVariable *CoverageNamesVar = - M.getNamedGlobal(getCoverageUnusedNamesVarName())) { + if (CoverageNamesVar) { lowerCoverageData(CoverageNamesVar); MadeChange = true; }