mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +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
 | 
			
		||||
  // 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.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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