From 5cfd773ec9f3d666fa0a7cfaf29e13507f3ae39e Mon Sep 17 00:00:00 2001 From: Dmitry Babokin Date: Wed, 20 Mar 2013 12:34:08 +0400 Subject: [PATCH 1/2] Adding Alias Analysis phases --- opt.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/opt.cpp b/opt.cpp index ff7ee410..3b51e5fb 100644 --- a/opt.cpp +++ b/opt.cpp @@ -514,6 +514,18 @@ Optimize(llvm::Module *module, int optLevel) { llvm::initializeInstrumentation(*registry); llvm::initializeTarget(*registry); + // Setup to use LLVM default AliasAnalysis + // Ideally, we want call: + // llvm::PassManagerBuilder pm_Builder; + // pm_Builder.OptLevel = optLevel; + // pm_Builder.addInitialAliasAnalysisPasses(optPM); + // but the addInitialAliasAnalysisPasses() is a private function + // so we explicitly enable them here. + // Need to keep sync with future LLVM change + // An alternative is to call populateFunctionPassManager() + optPM.add(llvm::createTypeBasedAliasAnalysisPass(), 190); + optPM.add(llvm::createBasicAliasAnalysisPass()); + optPM.add(llvm::createGlobalDCEPass(), 200); // Early optimizations to try to reduce the total amount of code to From 4ef38e16153a09b1d2c130b9791bdfe86d773ec9 Mon Sep 17 00:00:00 2001 From: Ilia Filippov Date: Fri, 27 Dec 2013 18:52:23 +0400 Subject: [PATCH 2/2] Adding some optimization passes between two Alias Analysis passes --- opt.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/opt.cpp b/opt.cpp index 3b51e5fb..f70e522d 100644 --- a/opt.cpp +++ b/opt.cpp @@ -514,6 +514,8 @@ Optimize(llvm::Module *module, int optLevel) { llvm::initializeInstrumentation(*registry); llvm::initializeTarget(*registry); + optPM.add(llvm::createGlobalDCEPass(), 185); + // Setup to use LLVM default AliasAnalysis // Ideally, we want call: // llvm::PassManagerBuilder pm_Builder; @@ -525,12 +527,18 @@ Optimize(llvm::Module *module, int optLevel) { // An alternative is to call populateFunctionPassManager() optPM.add(llvm::createTypeBasedAliasAnalysisPass(), 190); optPM.add(llvm::createBasicAliasAnalysisPass()); - - optPM.add(llvm::createGlobalDCEPass(), 200); + optPM.add(llvm::createCFGSimplificationPass()); + // Here clang has an experimental pass SROAPass instead of + // ScalarReplAggregatesPass. We should add it in the future. + optPM.add(llvm::createScalarReplAggregatesPass()); + optPM.add(llvm::createEarlyCSEPass()); + optPM.add(llvm::createLowerExpectIntrinsicPass()); + optPM.add(llvm::createTypeBasedAliasAnalysisPass()); + optPM.add(llvm::createBasicAliasAnalysisPass()); // Early optimizations to try to reduce the total amount of code to // work with if we can - optPM.add(llvm::createReassociatePass()); + optPM.add(llvm::createReassociatePass(), 200); optPM.add(llvm::createConstantPropagationPass()); optPM.add(llvm::createDeadInstEliminationPass()); optPM.add(llvm::createCFGSimplificationPass());