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