summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/LoopUnroll/runtime-loop4.ll
diff options
context:
space:
mode:
authorKevin Qin <Kevin.Qin@arm.com>2015-03-12 05:36:01 +0000
committerKevin Qin <Kevin.Qin@arm.com>2015-03-12 05:36:01 +0000
commit49bc764310158c1b5f1ae37a52de52918cba41c3 (patch)
tree0c765b6db253bf7907608adaaad76d2f96097f50 /llvm/test/Transforms/LoopUnroll/runtime-loop4.ll
parent34085832f8e7e86e328a1ae16fc41d7716a0c04d (diff)
downloadbcm5719-llvm-49bc764310158c1b5f1ae37a52de52918cba41c3.tar.gz
bcm5719-llvm-49bc764310158c1b5f1ae37a52de52918cba41c3.zip
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. llvm-svn: 232011
Diffstat (limited to 'llvm/test/Transforms/LoopUnroll/runtime-loop4.ll')
-rw-r--r--llvm/test/Transforms/LoopUnroll/runtime-loop4.ll43
1 files changed, 43 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LoopUnroll/runtime-loop4.ll b/llvm/test/Transforms/LoopUnroll/runtime-loop4.ll
new file mode 100644
index 00000000000..9be0ffd23d3
--- /dev/null
+++ b/llvm/test/Transforms/LoopUnroll/runtime-loop4.ll
@@ -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
+}
OpenPOWER on IntegriCloud