From f30be2f370e884bda35e2fe8482e35dfe299cefa Mon Sep 17 00:00:00 2001 From: Tobias Grosser Date: Mon, 12 Oct 2015 20:03:44 +0000 Subject: [PATCH] RegisterPasses: Optionally run inliner before Polly This will allow us to optimize C++ template code with Polly. This support is mostly for debugging purpose and individual experiments. The ultimate goal is still to run Polly later in the pass manager when inlining already happened. llvm-svn: 250092 --- polly/lib/Transform/Canonicalization.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/polly/lib/Transform/Canonicalization.cpp b/polly/lib/Transform/Canonicalization.cpp index 0e746757763f..3546f94e2d21 100644 --- a/polly/lib/Transform/Canonicalization.cpp +++ b/polly/lib/Transform/Canonicalization.cpp @@ -14,12 +14,19 @@ //===----------------------------------------------------------------------===// #include "polly/LinkAllPasses.h" +#include "polly/Options.h" #include "polly/Canonicalization.h" #include "llvm/Transforms/Scalar.h" +#include "llvm/Transforms/IPO.h" using namespace llvm; using namespace polly; +static cl::opt + PollyInliner("polly-run-inliner", + cl::desc("Run an early inliner pass before Polly"), cl::Hidden, + cl::init(false), cl::ZeroOrMore, cl::cat(PollyCategory)); + void polly::registerCanonicalicationPasses(llvm::legacy::PassManagerBase &PM) { PM.add(llvm::createPromoteMemoryToRegisterPass()); PM.add(llvm::createInstructionCombiningPass()); @@ -28,6 +35,12 @@ void polly::registerCanonicalicationPasses(llvm::legacy::PassManagerBase &PM) { PM.add(llvm::createCFGSimplificationPass()); PM.add(llvm::createReassociatePass()); PM.add(llvm::createLoopRotatePass()); + if (PollyInliner) { + PM.add(llvm::createFunctionInliningPass(200)); + PM.add(llvm::createCFGSimplificationPass()); + PM.add(llvm::createInstructionCombiningPass()); + PM.add(createBarrierNoopPass()); + } PM.add(llvm::createInstructionCombiningPass()); PM.add(llvm::createIndVarSimplifyPass()); PM.add(polly::createCodePreparationPass());