Home | History | Annotate | Download | only in LoopUnroll
      1 ; RUN: opt < %s -loop-unroll -S | FileCheck %s
      2 
      3 
      4 ; This should not unroll since the address of the loop header is taken.
      5 
      6 ; CHECK-LABEL: @test1(
      7 ; CHECK: store i8* blockaddress(@test1, %l1), i8** %P
      8 ; CHECK: l1:
      9 ; CHECK-NEXT: phi i32
     10 ; rdar://8287027
     11 define i32 @test1(i8** %P) nounwind ssp {
     12 entry:
     13   store i8* blockaddress(@test1, %l1), i8** %P
     14   br label %l1
     15 
     16 l1:                                               ; preds = %l1, %entry
     17   %x.0 = phi i32 [ 0, %entry ], [ %inc, %l1 ]
     18   %inc = add nsw i32 %x.0, 1
     19   %exitcond = icmp eq i32 %inc, 3
     20   br i1 %exitcond, label %l2, label %l1
     21 
     22 l2:                                               ; preds = %l1
     23   ret i32 0
     24 }
     25 
     26 ; This should not unroll since the call is 'noduplicate'.
     27 
     28 ; CHECK-LABEL: @test2(
     29 define i32 @test2(i8** %P) nounwind ssp {
     30 entry:
     31   br label %l1
     32 
     33 l1:                                               ; preds = %l1, %entry
     34   %x.0 = phi i32 [ 0, %entry ], [ %inc, %l1 ]
     35 ; CHECK: call void @f()
     36 ; CHECK-NOT: call void @f()
     37   call void @f() noduplicate
     38   %inc = add nsw i32 %x.0, 1
     39   %exitcond = icmp eq i32 %inc, 3
     40   br i1 %exitcond, label %l2, label %l1
     41 
     42 l2:                                               ; preds = %l1
     43   ret i32 0
     44 ; CHECK: }
     45 }
     46 
     47 declare void @f()
     48