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());