blob: 6b0c67f7a2b752b691de5c62f6d72bed30b3e9df [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()
David Majnemercc714e22015-06-17 20:52:32 +000013define void @f2(i32 %x) personality i32 ()* @g {
Rafael Espindolaa0c5e6c2012-06-01 19:24:57 +000014bb0:
15 %y1 = invoke i32 @g() to label %bb1 unwind label %bb2
16bb1:
17 ret void
18bb2:
19 %y2 = phi i32 [%y1, %bb0]
David Majnemercc714e22015-06-17 20:52:32 +000020 %y3 = landingpad i32
Rafael Espindolaa0c5e6c2012-06-01 19:24:57 +000021 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
David Majnemercc714e22015-06-17 20:52:32 +000029define void @f3(i32 %x) personality i32 ()* @g {
Rafael Espindolaa0c5e6c2012-06-01 19:24:57 +000030bb0:
31 %y1 = invoke i32 @g() to label %bb1 unwind label %bb2
32bb1:
33 ret void
34bb2:
David Majnemercc714e22015-06-17 20:52:32 +000035 %y2 = landingpad i32
Rafael Espindolaa0c5e6c2012-06-01 19:24:57 +000036 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}
Michael Kruse6fde9c22016-03-26 23:32:57 +000058
59define void @f5() {
60entry:
61 br label %next
62
63next:
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}