Skip to content

Commit

Permalink
Disable loop re-rotation for -Oz (patch by Andrey Turetsky)
Browse files Browse the repository at this point in the history
After changes in rL231820 loop re-rotation is performed even in -Oz mode. Since loop rotation is disabled for -Oz, it seems loop re-rotation should be disabled too.
Differential Revision: http://reviews.llvm.org/D10961

llvm-svn: 241897
  • Loading branch information
alexey-bataev committed Jul 10, 2015
1 parent edb0210 commit da33d80
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
4 changes: 2 additions & 2 deletions llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
Expand Up @@ -320,8 +320,8 @@ void PassManagerBuilder::populateModulePassManager(

// Re-rotate loops in all our loop nests. These may have fallout out of
// rotated form due to GVN or other transformations, and the vectorizer relies
// on the rotated form.
MPM.add(createLoopRotatePass());
// on the rotated form. Disable header duplication at -Oz.
MPM.add(createLoopRotatePass(SizeLevel == 2 ? 0 : -1));

// Distribute loops to allow partial vectorization. I.e. isolate dependences
// into separate loop that would otherwise inhibit vectorization.
Expand Down
30 changes: 30 additions & 0 deletions llvm/test/Transforms/LoopRotate/oz-disable.ll
@@ -0,0 +1,30 @@
; REQUIRES: asserts
; RUN: opt < %s -S -Os -debug -debug-only=loop-rotate 2>&1 | FileCheck %s -check-prefix=OS
; RUN: opt < %s -S -Oz -debug -debug-only=loop-rotate 2>&1 | FileCheck %s -check-prefix=OZ

; Loop should be rotated for -Os but not for -Oz.
; OS: rotating Loop at depth 1
; OZ-NOT: rotating Loop at depth 1

@e = global i32 10

declare void @use(i32)

define void @test() {
entry:
%end = load i32, i32* @e
br label %loop

loop:
%n.phi = phi i32 [ %n, %loop.fin ], [ 0, %entry ]
%cond = icmp eq i32 %n.phi, %end
br i1 %cond, label %exit, label %loop.fin

loop.fin:
%n = add i32 %n.phi, 1
call void @use(i32 %n)
br label %loop

exit:
ret void
}

0 comments on commit da33d80

Please sign in to comment.