[yaml2obj] - Allow placing local symbols after globals.
[llvm-complete.git] / test / Verifier / dominates.ll
blob6b0c67f7a2b752b691de5c62f6d72bed30b3e9df
1 ; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s
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
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 ]
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 ]
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 ]
59 define void @f5() {
60 entry:
61   br label %next
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 ]