1*9880d681SAndroid Build Coastguard Worker; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine i32 @f1(i32 %x) { 4*9880d681SAndroid Build Coastguard Worker %y = add i32 %z, 1 5*9880d681SAndroid Build Coastguard Worker %z = add i32 %x, 1 6*9880d681SAndroid Build Coastguard Worker ret i32 %y 7*9880d681SAndroid Build Coastguard Worker; CHECK: Instruction does not dominate all uses! 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %z = add i32 %x, 1 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %y = add i32 %z, 1 10*9880d681SAndroid Build Coastguard Worker} 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdeclare i32 @g() 13*9880d681SAndroid Build Coastguard Workerdefine void @f2(i32 %x) personality i32 ()* @g { 14*9880d681SAndroid Build Coastguard Workerbb0: 15*9880d681SAndroid Build Coastguard Worker %y1 = invoke i32 @g() to label %bb1 unwind label %bb2 16*9880d681SAndroid Build Coastguard Workerbb1: 17*9880d681SAndroid Build Coastguard Worker ret void 18*9880d681SAndroid Build Coastguard Workerbb2: 19*9880d681SAndroid Build Coastguard Worker %y2 = phi i32 [%y1, %bb0] 20*9880d681SAndroid Build Coastguard Worker %y3 = landingpad i32 21*9880d681SAndroid Build Coastguard Worker cleanup 22*9880d681SAndroid Build Coastguard Worker ret void 23*9880d681SAndroid Build Coastguard Worker; CHECK: Instruction does not dominate all uses! 24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %y1 = invoke i32 @g() 25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: to label %bb1 unwind label %bb2 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %y2 = phi i32 [ %y1, %bb0 ] 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdefine void @f3(i32 %x) personality i32 ()* @g { 30*9880d681SAndroid Build Coastguard Workerbb0: 31*9880d681SAndroid Build Coastguard Worker %y1 = invoke i32 @g() to label %bb1 unwind label %bb2 32*9880d681SAndroid Build Coastguard Workerbb1: 33*9880d681SAndroid Build Coastguard Worker ret void 34*9880d681SAndroid Build Coastguard Workerbb2: 35*9880d681SAndroid Build Coastguard Worker %y2 = landingpad i32 36*9880d681SAndroid Build Coastguard Worker cleanup 37*9880d681SAndroid Build Coastguard Worker br label %bb3 38*9880d681SAndroid Build Coastguard Workerbb3: 39*9880d681SAndroid Build Coastguard Worker %y3 = phi i32 [%y1, %bb2] 40*9880d681SAndroid Build Coastguard Worker ret void 41*9880d681SAndroid Build Coastguard Worker; CHECK: Instruction does not dominate all uses! 42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %y1 = invoke i32 @g() 43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: to label %bb1 unwind label %bb2 44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %y3 = phi i32 [ %y1, %bb2 ] 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerdefine void @f4(i32 %x) { 48*9880d681SAndroid Build Coastguard Workerbb0: 49*9880d681SAndroid Build Coastguard Worker br label %bb1 50*9880d681SAndroid Build Coastguard Workerbb1: 51*9880d681SAndroid Build Coastguard Worker %y3 = phi i32 [%y1, %bb0] 52*9880d681SAndroid Build Coastguard Worker %y1 = add i32 %x, 1 53*9880d681SAndroid Build Coastguard Worker ret void 54*9880d681SAndroid Build Coastguard Worker; CHECK: Instruction does not dominate all uses! 55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %y1 = add i32 %x, 1 56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %y3 = phi i32 [ %y1, %bb0 ] 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerdefine void @f5() { 60*9880d681SAndroid Build Coastguard Workerentry: 61*9880d681SAndroid Build Coastguard Worker br label %next 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Workernext: 64*9880d681SAndroid Build Coastguard Worker %y = phi i32 [ 0, %entry ] 65*9880d681SAndroid Build Coastguard Worker %x = phi i32 [ %y, %entry ] 66*9880d681SAndroid Build Coastguard Worker ret void 67*9880d681SAndroid Build Coastguard Worker; CHECK: Instruction does not dominate all uses! 68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %y = phi i32 [ 0, %entry ] 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %x = phi i32 [ %y, %entry ] 70*9880d681SAndroid Build Coastguard Worker} 71