Home | History | Annotate | Download | only in LoopUnroll
      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