Home | History | Annotate | Download | only in Verifier
      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) personality i32 ()* @g {
     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
     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) personality i32 ()* @g {
     30 bb0:
     31   %y1 = invoke i32 @g() to label %bb1 unwind label %bb2
     32 bb1:
     33   ret void
     34 bb2:
     35   %y2 = landingpad i32
     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 
     59 define void @f5() {
     60 entry:
     61   br label %next
     62 
     63 next:
     64   %y = phi i32 [ 0, %entry ]
     65   %x = phi i32 [ %y, %entry ]
     66   ret void
     67 ; CHECK: Instruction does not dominate all uses!
     68 ; CHECK-NEXT:  %y = phi i32 [ 0, %entry ]
     69 ; CHECK-NEXT:  %x = phi i32 [ %y, %entry ]
     70 }
     71