[PATCH] D110784: Manually create unique_ptr in various pass adaptors
Arthur Eubanks via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 29 16:07:31 PDT 2021
aeubanks created this revision.
aeubanks added a reviewer: rnk.
Herald added a subscriber: dexonsmith.
aeubanks requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
This avoids creating tons of make_unique template instantiations. And we
only create a unique_ptr of the actual pass concept type, rather than
creating a unique_ptr of the pass model subclass then casting it to the
pass concept type.
This reduces the work spent compiling PassBuilder.cpp from 83M -> 73M
instructions according to perf stat.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D110784
Files:
llvm/include/llvm/Analysis/CGSCCPassManager.h
llvm/include/llvm/IR/PassManager.h
llvm/include/llvm/Transforms/Scalar/LoopPassManager.h
Index: llvm/include/llvm/Transforms/Scalar/LoopPassManager.h
===================================================================
--- llvm/include/llvm/Transforms/Scalar/LoopPassManager.h
+++ llvm/include/llvm/Transforms/Scalar/LoopPassManager.h
@@ -468,8 +468,9 @@
detail::PassModel<Loop, LoopPassT, PreservedAnalyses, LoopAnalysisManager,
LoopStandardAnalysisResults &, LPMUpdater &>;
return FunctionToLoopPassAdaptor(
- std::make_unique<PassModelT>(std::forward<LoopPassT>(Pass)), UseMemorySSA,
- UseBlockFrequencyInfo, false);
+ std::unique_ptr<FunctionToLoopPassAdaptor::PassConceptT>(
+ new PassModelT(std::forward<LoopPassT>(Pass))),
+ UseMemorySSA, UseBlockFrequencyInfo, false);
}
/// If \p Pass is a loop-nest pass, \p Pass will first be wrapped into a
@@ -485,8 +486,10 @@
detail::PassModel<Loop, LoopPassManager, PreservedAnalyses,
LoopAnalysisManager, LoopStandardAnalysisResults &,
LPMUpdater &>;
- return FunctionToLoopPassAdaptor(std::make_unique<PassModelT>(std::move(LPM)),
- UseMemorySSA, UseBlockFrequencyInfo, true);
+ return FunctionToLoopPassAdaptor(
+ std::unique_ptr<FunctionToLoopPassAdaptor::PassConceptT>(
+ new PassModelT(std::move(LPM))),
+ UseMemorySSA, UseBlockFrequencyInfo, true);
}
/// If \p Pass is an instance of \c LoopPassManager, the returned adaptor will
@@ -503,9 +506,10 @@
LoopAnalysisManager, LoopStandardAnalysisResults &,
LPMUpdater &>;
bool LoopNestMode = (LPM.getNumLoopPasses() == 0);
- return FunctionToLoopPassAdaptor(std::make_unique<PassModelT>(std::move(LPM)),
- UseMemorySSA, UseBlockFrequencyInfo,
- LoopNestMode);
+ return FunctionToLoopPassAdaptor(
+ std::unique_ptr<FunctionToLoopPassAdaptor::PassConceptT>(
+ new PassModelT(std::move(LPM))),
+ UseMemorySSA, UseBlockFrequencyInfo, LoopNestMode);
}
/// Pass for printing a loop's contents as textual IR.
Index: llvm/include/llvm/IR/PassManager.h
===================================================================
--- llvm/include/llvm/IR/PassManager.h
+++ llvm/include/llvm/IR/PassManager.h
@@ -1227,7 +1227,8 @@
FunctionAnalysisManager>;
return ModuleToFunctionPassAdaptor(
- std::make_unique<PassModelT>(std::forward<FunctionPassT>(Pass)));
+ std::unique_ptr<ModuleToFunctionPassAdaptor::PassConceptT>(
+ new PassModelT(std::forward<FunctionPassT>(Pass))));
}
/// A utility pass template to force an analysis result to be available.
Index: llvm/include/llvm/Analysis/CGSCCPassManager.h
===================================================================
--- llvm/include/llvm/Analysis/CGSCCPassManager.h
+++ llvm/include/llvm/Analysis/CGSCCPassManager.h
@@ -391,7 +391,8 @@
PreservedAnalyses, CGSCCAnalysisManager,
LazyCallGraph &, CGSCCUpdateResult &>;
return ModuleToPostOrderCGSCCPassAdaptor(
- std::make_unique<PassModelT>(std::forward<CGSCCPassT>(Pass)));
+ std::unique_ptr<ModuleToPostOrderCGSCCPassAdaptor::PassConceptT>(
+ new PassModelT(std::forward<CGSCCPassT>(Pass))));
}
/// A proxy from a \c FunctionAnalysisManager to an \c SCC.
@@ -516,7 +517,8 @@
detail::PassModel<Function, FunctionPassT, PreservedAnalyses,
FunctionAnalysisManager>;
return CGSCCToFunctionPassAdaptor(
- std::make_unique<PassModelT>(std::forward<FunctionPassT>(Pass)));
+ std::unique_ptr<CGSCCToFunctionPassAdaptor::PassConceptT>(
+ new PassModelT(std::forward<FunctionPassT>(Pass))));
}
/// A helper that repeats an SCC pass each time an indirect call is refined to
@@ -569,7 +571,8 @@
PreservedAnalyses, CGSCCAnalysisManager,
LazyCallGraph &, CGSCCUpdateResult &>;
return DevirtSCCRepeatedPass(
- std::make_unique<PassModelT>(std::forward<CGSCCPassT>(Pass)),
+ std::unique_ptr<DevirtSCCRepeatedPass::PassConceptT>(
+ new PassModelT(std::forward<CGSCCPassT>(Pass))),
MaxIterations);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D110784.376061.patch
Type: text/x-patch
Size: 4341 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210929/3ac00dfb/attachment.bin>
More information about the llvm-commits
mailing list