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