mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-11 09:20:57 +00:00
Reapply 'Run LICM pass after loop unrolling pass.'
It's firstly committed at r231630, and reverted at r231635. Function pass InstructionSimplifier is inserted as barrier to make sure loop unroll pass won't affect on LICM pass. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232011 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
43
test/Transforms/LoopUnroll/runtime-loop4.ll
Normal file
43
test/Transforms/LoopUnroll/runtime-loop4.ll
Normal file
@@ -0,0 +1,43 @@
|
||||
; RUN: opt < %s -S -O2 -unroll-runtime=true | FileCheck %s
|
||||
|
||||
; Check runtime unrolling prologue can be promoted by LICM pass.
|
||||
|
||||
; CHECK: entry:
|
||||
; CHECK: %xtraiter
|
||||
; CHECK: %lcmp.mod
|
||||
; CHECK: loop1:
|
||||
; CHECK: br i1 %lcmp.mod
|
||||
; CHECK: loop2.prol:
|
||||
|
||||
define void @unroll(i32 %iter, i32* %addr1, i32* %addr2) nounwind {
|
||||
entry:
|
||||
br label %loop1
|
||||
|
||||
loop1:
|
||||
%iv1 = phi i32 [ 0, %entry ], [ %inc1, %loop1.latch ]
|
||||
%offset1 = getelementptr i32, i32* %addr1, i32 %iv1
|
||||
store i32 %iv1, i32* %offset1, align 4
|
||||
br label %loop2.header
|
||||
|
||||
loop2.header:
|
||||
br label %loop2
|
||||
|
||||
loop2:
|
||||
%iv2 = phi i32 [ 0, %loop2.header ], [ %inc2, %loop2 ]
|
||||
%offset2 = getelementptr i32, i32* %addr2, i32 %iv2
|
||||
store i32 %iv2, i32* %offset2, align 4
|
||||
%inc2 = add i32 %iv2, 1
|
||||
%exitcnd2 = icmp uge i32 %inc2, %iter
|
||||
br i1 %exitcnd2, label %exit2, label %loop2
|
||||
|
||||
exit2:
|
||||
br label %loop1.latch
|
||||
|
||||
loop1.latch:
|
||||
%inc1 = add i32 %iv1, 1
|
||||
%exitcnd1 = icmp uge i32 %inc1, 1024
|
||||
br i1 %exitcnd1, label %exit, label %loop1
|
||||
|
||||
exit:
|
||||
ret void
|
||||
}
|
||||
Reference in New Issue
Block a user