From 5cfd773ec9f3d666fa0a7cfaf29e13507f3ae39e Mon Sep 17 00:00:00 2001 From: Dmitry Babokin Date: Wed, 20 Mar 2013 12:34:08 +0400 Subject: [PATCH 1/3] 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 e34f0cc2509ce8e84a022613e37d50d25349cf6d Mon Sep 17 00:00:00 2001 From: Ilia Filippov Date: Thu, 26 Dec 2013 14:23:46 +0400 Subject: [PATCH 2/3] correction of checking tools in testing environment --- common.py | 3 +++ 1 file changed, 3 insertions(+) mode change 100644 => 100755 common.py diff --git a/common.py b/common.py old mode 100644 new mode 100755 index be3e9526..2a788722 --- a/common.py +++ b/common.py @@ -121,4 +121,7 @@ def check_tools(m): if int(t11[j])input_tools[t][0][j]: + break return ret From 4ef38e16153a09b1d2c130b9791bdfe86d773ec9 Mon Sep 17 00:00:00 2001 From: Ilia Filippov Date: Fri, 27 Dec 2013 18:52:23 +0400 Subject: [PATCH 3/3] 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());