summaryrefslogtreecommitdiffstats
path: root/llvm/tools/opt/opt.cpp
diff options
context:
space:
mode:
authorJustin Lebar <jlebar@google.com>2016-04-27 19:08:24 +0000
committerJustin Lebar <jlebar@google.com>2016-04-27 19:08:24 +0000
commit6e1089b3a7501694bc52cc3ec5a690760a28d11c (patch)
tree67d1f98cb6df2bb2c8c0b4af57aca1663361ebed /llvm/tools/opt/opt.cpp
parentace97c1f7d46140b19854b63c5e0a537f5c512cd (diff)
downloadbcm5719-llvm-6e1089b3a7501694bc52cc3ec5a690760a28d11c.tar.gz
bcm5719-llvm-6e1089b3a7501694bc52cc3ec5a690760a28d11c.zip
Add TargetMachine::addEarlyAsPossiblePasses, and call it from opt.
Summary: This is a hook to allow TargetMachine to install passes at the EP_EarlyAsPossible PassManagerBuilder extension point. Reviewers: chandlerc Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D18614 llvm-svn: 267763
Diffstat (limited to 'llvm/tools/opt/opt.cpp')
-rw-r--r--llvm/tools/opt/opt.cpp31
1 files changed, 20 insertions, 11 deletions
diff --git a/llvm/tools/opt/opt.cpp b/llvm/tools/opt/opt.cpp
index 91993bfaa32..2286ac9e28d 100644
--- a/llvm/tools/opt/opt.cpp
+++ b/llvm/tools/opt/opt.cpp
@@ -230,7 +230,8 @@ static inline void addPass(legacy::PassManagerBase &PM, Pass *P) {
/// OptLevel - Optimization Level
static void AddOptimizationPasses(legacy::PassManagerBase &MPM,
legacy::FunctionPassManager &FPM,
- unsigned OptLevel, unsigned SizeLevel) {
+ TargetMachine *TM, unsigned OptLevel,
+ unsigned SizeLevel) {
if (!NoVerify || VerifyEach)
FPM.add(createVerifierPass()); // Verify that input is correct
@@ -260,6 +261,14 @@ static void AddOptimizationPasses(legacy::PassManagerBase &MPM,
Builder.SLPVectorize =
DisableSLPVectorization ? false : OptLevel > 1 && SizeLevel < 2;
+ // Add target-specific passes that need to run as early as possible.
+ if (TM)
+ Builder.addExtension(
+ PassManagerBuilder::EP_EarlyAsPossible,
+ [&](const PassManagerBuilder &, legacy::PassManagerBase &PM) {
+ TM->addEarlyAsPossiblePasses(PM);
+ });
+
Builder.populateFunctionPassManager(FPM);
Builder.populateModulePassManager(MPM);
}
@@ -519,27 +528,27 @@ int main(int argc, char **argv) {
}
if (OptLevelO1 && OptLevelO1.getPosition() < PassList.getPosition(i)) {
- AddOptimizationPasses(Passes, *FPasses, 1, 0);
+ AddOptimizationPasses(Passes, *FPasses, TM.get(), 1, 0);
OptLevelO1 = false;
}
if (OptLevelO2 && OptLevelO2.getPosition() < PassList.getPosition(i)) {
- AddOptimizationPasses(Passes, *FPasses, 2, 0);
+ AddOptimizationPasses(Passes, *FPasses, TM.get(), 2, 0);
OptLevelO2 = false;
}
if (OptLevelOs && OptLevelOs.getPosition() < PassList.getPosition(i)) {
- AddOptimizationPasses(Passes, *FPasses, 2, 1);
+ AddOptimizationPasses(Passes, *FPasses, TM.get(), 2, 1);
OptLevelOs = false;
}
if (OptLevelOz && OptLevelOz.getPosition() < PassList.getPosition(i)) {
- AddOptimizationPasses(Passes, *FPasses, 2, 2);
+ AddOptimizationPasses(Passes, *FPasses, TM.get(), 2, 2);
OptLevelOz = false;
}
if (OptLevelO3 && OptLevelO3.getPosition() < PassList.getPosition(i)) {
- AddOptimizationPasses(Passes, *FPasses, 3, 0);
+ AddOptimizationPasses(Passes, *FPasses, TM.get(), 3, 0);
OptLevelO3 = false;
}
@@ -591,19 +600,19 @@ int main(int argc, char **argv) {
}
if (OptLevelO1)
- AddOptimizationPasses(Passes, *FPasses, 1, 0);
+ AddOptimizationPasses(Passes, *FPasses, TM.get(), 1, 0);
if (OptLevelO2)
- AddOptimizationPasses(Passes, *FPasses, 2, 0);
+ AddOptimizationPasses(Passes, *FPasses, TM.get(), 2, 0);
if (OptLevelOs)
- AddOptimizationPasses(Passes, *FPasses, 2, 1);
+ AddOptimizationPasses(Passes, *FPasses, TM.get(), 2, 1);
if (OptLevelOz)
- AddOptimizationPasses(Passes, *FPasses, 2, 2);
+ AddOptimizationPasses(Passes, *FPasses, TM.get(), 2, 2);
if (OptLevelO3)
- AddOptimizationPasses(Passes, *FPasses, 3, 0);
+ AddOptimizationPasses(Passes, *FPasses, TM.get(), 3, 0);
if (OptLevelO1 || OptLevelO2 || OptLevelOs || OptLevelOz || OptLevelO3) {
FPasses->doInitialization();
OpenPOWER on IntegriCloud