[llvm] r323574 - [InstrProfiling] Improve compile time when there is no work

Davide Italiano via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 26 16:52:41 PST 2018


This is good. Do you happen to have numbers for my own intellectual
curiosity? (and for the archives)

On Fri, Jan 26, 2018 at 3:54 PM, Vedant Kumar via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: vedantk
> Date: Fri Jan 26 15:54:24 2018
> New Revision: 323574
>
> URL: http://llvm.org/viewvc/llvm-project?rev=323574&view=rev
> Log:
> [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.
>
> Modified:
>     llvm/trunk/lib/Transforms/Instrumentation/InstrProfiling.cpp
>
> Modified: llvm/trunk/lib/Transforms/Instrumentation/InstrProfiling.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/InstrProfiling.cpp?rev=323574&r1=323573&r2=323574&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Instrumentation/InstrProfiling.cpp (original)
> +++ llvm/trunk/lib/Transforms/Instrumentation/InstrProfiling.cpp Fri Jan 26 15:54:24 2018
> @@ -430,7 +430,27 @@ void InstrProfiling::promoteCounterLoadS
>    }
>  }
>
> +/// 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, cons
>    for (Function &F : M)
>      MadeChange |= lowerIntrinsics(&F);
>
> -  if (GlobalVariable *CoverageNamesVar =
> -          M.getNamedGlobal(getCoverageUnusedNamesVarName())) {
> +  if (CoverageNamesVar) {
>      lowerCoverageData(CoverageNamesVar);
>      MadeChange = true;
>    }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits



-- 
Davide

"There are no solved problems; there are only problems that are more
or less solved" -- Henri Poincare


More information about the llvm-commits mailing list