1 ; RUN: opt -S -loop-unroll < %s | FileCheck %s 2 ; RUN: opt < %s -passes='require<opt-remark-emit>,loop(unroll-full)' -S | FileCheck %s 3 4 ; LLVM should not try to fully unroll this loop. 5 6 declare void @f() 7 declare void @g() 8 declare void @h() 9 10 define void @trivial_loop() { 11 ; CHECK-LABEL: @trivial_loop( 12 entry: 13 br label %loop 14 15 loop: 16 %idx = phi i32 [ 0, %entry ], [ %idx.inc, %loop ] 17 %idx.inc = add i32 %idx, 1 18 call void @f() 19 call void @g() 20 call void @h() 21 call void @f() 22 call void @g() 23 call void @h() 24 call void @f() 25 call void @g() 26 call void @h() 27 call void @f() 28 call void @g() 29 call void @h() 30 call void @f() 31 call void @g() 32 call void @h() 33 %be = icmp slt i32 %idx, 268435456 34 br i1 %be, label %loop, label %exit 35 36 ; CHECK: loop: 37 ; CHECK-NEXT: %idx = phi i32 [ 0, %entry ], [ %idx.inc, %loop ] 38 ; CHECK-NEXT: %idx.inc = add i32 %idx, 1 39 ; CHECK-NEXT: call void @f() 40 ; CHECK-NEXT: call void @g() 41 ; CHECK-NEXT: call void @h() 42 ; CHECK-NEXT: call void @f() 43 ; CHECK-NEXT: call void @g() 44 ; CHECK-NEXT: call void @h() 45 ; CHECK-NEXT: call void @f() 46 ; CHECK-NEXT: call void @g() 47 ; CHECK-NEXT: call void @h() 48 ; CHECK-NEXT: call void @f() 49 ; CHECK-NEXT: call void @g() 50 ; CHECK-NEXT: call void @h() 51 ; CHECK-NEXT: call void @f() 52 ; CHECK-NEXT: call void @g() 53 ; CHECK-NEXT: call void @h() 54 ; CHECK-NEXT: %be = icmp slt i32 %idx, 268435456 55 ; CHECK-NEXT: br i1 %be, label %loop, label %exit 56 57 exit: 58 ret void 59 } 60