Polish atomic pointers
[oota-llvm.git] / test / Verifier / dominates.ll
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 }