1 ; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s 2 3 define i32 @f1(i32 %x) { 4 %y = add i32 %z, 1 5 %z = add i32 %x, 1 6 ret i32 %y 7 ; CHECK: Instruction does not dominate all uses! 8 ; CHECK-NEXT: %z = add i32 %x, 1 9 ; CHECK-NEXT: %y = add i32 %z, 1 10 } 11 12 declare i32 @g() 13 define void @f2(i32 %x) { 14 bb0: 15 %y1 = invoke i32 @g() to label %bb1 unwind label %bb2 16 bb1: 17 ret void 18 bb2: 19 %y2 = phi i32 [%y1, %bb0] 20 %y3 = landingpad i32 personality i32 ()* @g 21 cleanup 22 ret void 23 ; CHECK: Instruction does not dominate all uses! 24 ; CHECK-NEXT: %y1 = invoke i32 @g() 25 ; CHECK-NEXT: to label %bb1 unwind label %bb2 26 ; CHECK-NEXT: %y2 = phi i32 [ %y1, %bb0 ] 27 } 28 29 define void @f3(i32 %x) { 30 bb0: 31 %y1 = invoke i32 @g() to label %bb1 unwind label %bb2 32 bb1: 33 ret void 34 bb2: 35 %y2 = landingpad i32 personality i32 ()* @g 36 cleanup 37 br label %bb3 38 bb3: 39 %y3 = phi i32 [%y1, %bb2] 40 ret void 41 ; CHECK: Instruction does not dominate all uses! 42 ; CHECK-NEXT: %y1 = invoke i32 @g() 43 ; CHECK-NEXT: to label %bb1 unwind label %bb2 44 ; CHECK-NEXT: %y3 = phi i32 [ %y1, %bb2 ] 45 } 46 47 define void @f4(i32 %x) { 48 bb0: 49 br label %bb1 50 bb1: 51 %y3 = phi i32 [%y1, %bb0] 52 %y1 = add i32 %x, 1 53 ret void 54 ; CHECK: Instruction does not dominate all uses! 55 ; CHECK-NEXT: %y1 = add i32 %x, 1 56 ; CHECK-NEXT: %y3 = phi i32 [ %y1, %bb0 ] 57 } 58