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