diff options
Diffstat (limited to 'llvm/test/Transforms/LoopSimplify/preserve-llvm-loop-metadata2.ll')
-rw-r--r-- | llvm/test/Transforms/LoopSimplify/preserve-llvm-loop-metadata2.ll | 48 |
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} |