blob: 17e2c3399967d3d2071ba9ecb44f21edcb81c59c [file] [log] [blame]
Chandler Carruth49589f02012-07-02 18:37:59 +00001; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s
Rafael Espindolaa0c5e6c2012-06-01 19:24:57 +00002
3define 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
12declare i32 @g()
13define void @f2(i32 %x) {
14bb0:
15 %y1 = invoke i32 @g() to label %bb1 unwind label %bb2
16bb1:
17 ret void
18bb2:
19 %y2 = phi i32 [%y1, %bb0]
20 %y3 = landingpad i32 personality i32 ()* @g
21 cleanup
22 ret void
Rafael Espindola20907662012-06-01 21:56:26 +000023; CHECK: Instruction does not dominate all uses!
Rafael Espindolaa0c5e6c2012-06-01 19:24:57 +000024; 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
29define void @f3(i32 %x) {
30bb0:
31 %y1 = invoke i32 @g() to label %bb1 unwind label %bb2
32bb1:
33 ret void
34bb2:
35 %y2 = landingpad i32 personality i32 ()* @g
36 cleanup
37 br label %bb3
38bb3:
39 %y3 = phi i32 [%y1, %bb2]
40 ret void
Rafael Espindola20907662012-06-01 21:56:26 +000041; CHECK: Instruction does not dominate all uses!
Rafael Espindolaa0c5e6c2012-06-01 19:24:57 +000042; 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
47define void @f4(i32 %x) {
48bb0:
49 br label %bb1
50bb1:
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}