diff options
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/IPO/PassManagerBuilder.cpp | 13 | 
1 files changed, 12 insertions, 1 deletions
| diff --git a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp index 9fd84d845d5..5928eb1d9c3 100644 --- a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp +++ b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp @@ -363,9 +363,20 @@ void PassManagerBuilder::populateModulePassManager(    MPM.add(createCFGSimplificationPass());    MPM.add(createInstructionCombiningPass()); -  if (!DisableUnrollLoops) +  if (!DisableUnrollLoops) {      MPM.add(createLoopUnrollPass());    // Unroll small loops +    // This is a barrier pass to avoid combine LICM pass and loop unroll pass +    // within same loop pass manager. +    MPM.add(createInstructionSimplifierPass()); + +    // Runtime unrolling will introduce runtime check in loop prologue. If the +    // unrolled loop is a inner loop, then the prologue will be inside the +    // outer loop. LICM pass can help to promote the runtime check out if the +    // checked value is loop invariant. +    MPM.add(createLICMPass()); +  } +    // After vectorization and unrolling, assume intrinsics may tell us more    // about pointer alignments.    MPM.add(createAlignmentFromAssumptionsPass()); | 

