Add indvar pass to canonicalization sequence
authorTobias Grosser <tobias@grosser.es>
Sat, 30 May 2015 06:16:41 +0000 (06:16 +0000)
committerTobias Grosser <tobias@grosser.es>
Sat, 30 May 2015 06:16:41 +0000 (06:16 +0000)
Running indvar before Polly is useful as this eliminates zexts as they commonly
appear when a 32 bit induction variable (type int) was used on a 64 bit system.
These zexts confuse our delinearization and prevent for example the successful
delinearization of the nussinov kernel in polybench-c-4.1.

This fixes http://llvm.org/PR23426

Suggested-by: Xing Su <xsu.llvm@outlook.com>
llvm-svn: 238643

polly/lib/Transform/Canonicalization.cpp

index d396001..0e74675 100644 (file)
@@ -29,6 +29,7 @@ void polly::registerCanonicalicationPasses(llvm::legacy::PassManagerBase &PM) {
   PM.add(llvm::createReassociatePass());
   PM.add(llvm::createLoopRotatePass());
   PM.add(llvm::createInstructionCombiningPass());
+  PM.add(llvm::createIndVarSimplifyPass());
   PM.add(polly::createCodePreparationPass());
 }