mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-06 04:18:00 +00:00
Disable loop re-rotation for -Oz (patch by Andrey Turetsky)
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241897 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -320,8 +320,8 @@ void PassManagerBuilder::populateModulePassManager(
|
|||||||
|
|
||||||
// Re-rotate loops in all our loop nests. These may have fallout out of
|
// 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
|
// rotated form due to GVN or other transformations, and the vectorizer relies
|
||||||
// on the rotated form.
|
// on the rotated form. Disable header duplication at -Oz.
|
||||||
MPM.add(createLoopRotatePass());
|
MPM.add(createLoopRotatePass(SizeLevel == 2 ? 0 : -1));
|
||||||
|
|
||||||
// Distribute loops to allow partial vectorization. I.e. isolate dependences
|
// Distribute loops to allow partial vectorization. I.e. isolate dependences
|
||||||
// into separate loop that would otherwise inhibit vectorization.
|
// into separate loop that would otherwise inhibit vectorization.
|
||||||
|
|||||||
30
test/Transforms/LoopRotate/oz-disable.ll
Normal file
30
test/Transforms/LoopRotate/oz-disable.ll
Normal file
@@ -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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user