summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/LoopSimplify/preserve-llvm-loop-metadata2.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Transforms/LoopSimplify/preserve-llvm-loop-metadata2.ll')
-rw-r--r--llvm/test/Transforms/LoopSimplify/preserve-llvm-loop-metadata2.ll48
1 files changed, 48 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LoopSimplify/preserve-llvm-loop-metadata2.ll b/llvm/test/Transforms/LoopSimplify/preserve-llvm-loop-metadata2.ll
new file mode 100644
index 00000000000..2e391ce6dea
--- /dev/null
+++ b/llvm/test/Transforms/LoopSimplify/preserve-llvm-loop-metadata2.ll
@@ -0,0 +1,48 @@
+; RUN: opt -S -loop-simplify < %s | FileCheck %s
+
+; Two-loop nest with llvm.loop metadata on each loop.
+; inner.header exits to outer.header. inner.header is a latch for the outer
+; loop, and contains the outer loop's metadata.
+; After loop-simplify, a new block "outer.header.loopexit" is created between
+; inner.header and outer.header. The metadata from inner.header must be moved
+; to the new block, as the new block becomes the outer loop latch.
+; The metadata on the inner loop's latch should be untouched.
+
+; CHECK: outer.header.loopexit:
+; CHECK-NEXT: llvm.loop [[UJAMTAG:.*]]
+; CHECK-NOT: br i1 {{.*}}, label {{.*}}, label %outer.header.loopexit, !llvm.loop
+; CHECK: br label %inner.header, !llvm.loop [[UNROLLTAG:.*]]
+
+; CHECK: distinct !{[[UJAMTAG]], [[UJAM:.*]]}
+; CHECK: [[UJAM]] = !{!"llvm.loop.unroll_and_jam.count", i32 17}
+; CHECK: distinct !{[[UNROLLTAG]], [[UNROLL:.*]]}
+; CHECK: [[UNROLL]] = !{!"llvm.loop.unroll.count", i32 1}
+
+
+define dso_local void @loopnest() local_unnamed_addr #0 {
+entry:
+ br label %outer.header
+
+outer.header: ; preds = %inner.header, %entry
+ %ii.0 = phi i64 [ 2, %entry ], [ %add, %inner.header ]
+ %cmp = icmp ult i64 %ii.0, 64
+ br i1 %cmp, label %inner.header, label %outer.header.cleanup
+
+outer.header.cleanup: ; preds = %outer.header
+ ret void
+
+inner.header: ; preds = %outer.header, %inner.body
+ %j.0 = phi i64 [ %add10, %inner.body ], [ %ii.0, %outer.header ]
+ %add = add nuw nsw i64 %ii.0, 16
+ %cmp2 = icmp ult i64 %j.0, %add
+ br i1 %cmp2, label %inner.body, label %outer.header, !llvm.loop !2
+
+inner.body: ; preds = %inner.header
+ %add10 = add nuw nsw i64 %j.0, 1
+ br label %inner.header, !llvm.loop !4
+}
+
+!2 = distinct !{!2, !3}
+!3 = !{!"llvm.loop.unroll_and_jam.count", i32 17}
+!4 = distinct !{!4, !5}
+!5 = !{!"llvm.loop.unroll.count", i32 1}
OpenPOWER on IntegriCloud