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