1*865d88d4SRoman Lebedev; RUN: opt -passes=loop-unroll -debug-only=loop-unroll -S < %s 2>&1 | FileCheck %s 2e0669931SZaara Syeda; REQUIRES: asserts 3e0669931SZaara Syeda 4e0669931SZaara Syeda 5e0669931SZaara Syeda; CHECK: Loop Unroll: F[test] 6e0669931SZaara Syeda; CHECK-NEXT: Not unrolling loop since parent loop has llvm.loop.unroll_and_jam 7e0669931SZaara Syeda; CHECK: Loop Unroll: F[test] 8e0669931SZaara Syeda; CHECK-NEXT: Not unrolling loop since it has llvm.loop.unroll_and_jam 9e0669931SZaara Syeda 10e0669931SZaara Syedadefine i32 @test() { 11e0669931SZaara Syedafor.body4.preheader.preheader: 12e0669931SZaara Syeda br label %for.body4.preheader4 13e0669931SZaara Syeda 14e0669931SZaara Syedafor.body4.preheader4: ; preds = %for.cond.cleanup3, %for.body4.preheader.preheader 15e0669931SZaara Syeda %indvars.iv28 = phi i64 [ %indvars.iv.next29, %for.cond.cleanup3 ], [ 0, %for.body4.preheader.preheader ] 16e0669931SZaara Syeda br label %for.body4 17e0669931SZaara Syeda 18e0669931SZaara Syedafor.body4: ; preds = %for.body4.preheader4, %for.body4 19e0669931SZaara Syeda %indvars.iv = phi i64 [ %indvars.iv.next, %for.body4 ], [ 0, %for.body4.preheader4 ] 20e0669931SZaara Syeda tail call void @test2(i64 %indvars.iv28, i64 %indvars.iv) 21e0669931SZaara Syeda %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 22e0669931SZaara Syeda %exitcond.not = icmp eq i64 %indvars.iv.next, 10 23e0669931SZaara Syeda br i1 %exitcond.not, label %for.cond.cleanup3, label %for.body4 24e0669931SZaara Syeda 25e0669931SZaara Syedafor.cond.cleanup3: ; preds = %for.body4 26e0669931SZaara Syeda %indvars.iv.next29 = add nuw nsw i64 %indvars.iv28, 1 27e0669931SZaara Syeda %exitcond31.not = icmp eq i64 %indvars.iv.next29, 10 28e0669931SZaara Syeda br i1 %exitcond31.not, label %for.cond.cleanup, label %for.body4.preheader4, !llvm.loop !1 29e0669931SZaara Syeda 30e0669931SZaara Syedafor.cond.cleanup: ; preds = %for.cond.cleanup3 31e0669931SZaara Syeda ret i32 55 32e0669931SZaara Syeda} 33e0669931SZaara Syeda 34e0669931SZaara Syeda 35e0669931SZaara Syeda; CHECK: F[test_02] 36e0669931SZaara Syeda; CHECK-NOT: Not unrolling loop since {{.*}} llvm.loop.unroll_and_jam 37e0669931SZaara Syedadefine i32 @test_02() { 38e0669931SZaara Syedafor.body4.preheader.preheader: 39e0669931SZaara Syeda br label %for.body4.preheader4 40e0669931SZaara Syeda 41e0669931SZaara Syedafor.body4.preheader4: ; preds = %for.cond.cleanup3, %for.body4.preheader.preheader 42e0669931SZaara Syeda %indvars.iv28 = phi i64 [ %indvars.iv.next29, %for.cond.cleanup3 ], [ 0, %for.body4.preheader.preheader ] 43e0669931SZaara Syeda br label %for.body4 44e0669931SZaara Syeda 45e0669931SZaara Syedafor.body4: ; preds = %for.body4.preheader4, %for.body4 46e0669931SZaara Syeda %indvars.iv = phi i64 [ %indvars.iv.next, %for.body4 ], [ 0, %for.body4.preheader4 ] 47e0669931SZaara Syeda tail call void @test2(i64 %indvars.iv28, i64 %indvars.iv) 48e0669931SZaara Syeda %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 49e0669931SZaara Syeda %exitcond.not = icmp eq i64 %indvars.iv.next, 10 50e0669931SZaara Syeda br i1 %exitcond.not, label %for.cond.cleanup3, label %for.body4 51e0669931SZaara Syeda 52e0669931SZaara Syedafor.cond.cleanup3: ; preds = %for.body4 53e0669931SZaara Syeda %indvars.iv.next29 = add nuw nsw i64 %indvars.iv28, 1 54e0669931SZaara Syeda %exitcond31.not = icmp eq i64 %indvars.iv.next29, 10 55e0669931SZaara Syeda br i1 %exitcond31.not, label %for.cond.cleanup, label %for.body4.preheader4, !llvm.loop !2 56e0669931SZaara Syeda 57e0669931SZaara Syedafor.cond.cleanup: ; preds = %for.cond.cleanup3 58e0669931SZaara Syeda ret i32 55 59e0669931SZaara Syeda} 60e0669931SZaara Syeda 61e0669931SZaara Syeda; CHECK:F[test_03] 62e0669931SZaara Syeda; CHECK-NOT: Not unrolling loop since {{.*}} llvm.loop.unroll_and_jam 63e0669931SZaara Syedadefine i32 @test_03() { 64e0669931SZaara Syedafor.body4.preheader.preheader: 65e0669931SZaara Syeda br label %for.body4.preheader4 66e0669931SZaara Syeda 67e0669931SZaara Syedafor.body4.preheader4: ; preds = %for.cond.cleanup3, %for.body4.preheader.preheader 68e0669931SZaara Syeda %indvars.iv28 = phi i64 [ %indvars.iv.next29, %for.cond.cleanup3 ], [ 0, %for.body4.preheader.preheader ] 69e0669931SZaara Syeda br label %for.body4 70e0669931SZaara Syeda 71e0669931SZaara Syedafor.body4: ; preds = %for.body4.preheader4, %for.body4 72e0669931SZaara Syeda %indvars.iv = phi i64 [ %indvars.iv.next, %for.body4 ], [ 0, %for.body4.preheader4 ] 73e0669931SZaara Syeda tail call void @test2(i64 %indvars.iv28, i64 %indvars.iv) 74e0669931SZaara Syeda %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 75e0669931SZaara Syeda %exitcond.not = icmp eq i64 %indvars.iv.next, 10 76e0669931SZaara Syeda br i1 %exitcond.not, label %for.cond.cleanup3, label %for.body4 77e0669931SZaara Syeda 78e0669931SZaara Syedafor.cond.cleanup3: ; preds = %for.body4 79e0669931SZaara Syeda %indvars.iv.next29 = add nuw nsw i64 %indvars.iv28, 1 80e0669931SZaara Syeda %exitcond31.not = icmp eq i64 %indvars.iv.next29, 10 81e0669931SZaara Syeda br i1 %exitcond31.not, label %for.cond.cleanup, label %for.body4.preheader4, !llvm.loop !3 82e0669931SZaara Syeda 83e0669931SZaara Syedafor.cond.cleanup: ; preds = %for.cond.cleanup3 84e0669931SZaara Syeda ret i32 55 85e0669931SZaara Syeda} 86e0669931SZaara Syeda 87e0669931SZaara Syedadeclare void @test2(i64 signext, i64 signext) 88e0669931SZaara Syeda 89e0669931SZaara Syeda!1 = distinct !{!1, !4} 90e0669931SZaara Syeda!2 = distinct !{!1, !5} 91e0669931SZaara Syeda!3 = distinct !{!1, !6} 92e0669931SZaara Syeda!4 = !{!"llvm.loop.unroll_and_jam.count", i32 4} 93e0669931SZaara Syeda!5 = !{!"llvm.loop.unroll_and_jam.count", i32 1} 94e0669931SZaara Syeda!6 = !{!"llvm.loop.unroll_and_jam.disable"} 95