Skip to content

Commit e10b2ba

Browse files
committed
Add test cases
1 parent e1cea0d commit e10b2ba

File tree

1 file changed

+146
-0
lines changed

1 file changed

+146
-0
lines changed
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -S -passes=instsimplify < %s | FileCheck %s
3+
4+
; Test `%r` can be replaced by `%nonpoison`.
5+
6+
define i64 @other_noundef() {
7+
; CHECK-LABEL: define i64 @other_noundef() {
8+
; CHECK-NEXT: [[START:.*]]:
9+
; CHECK-NEXT: br label %[[LOOP:.*]]
10+
; CHECK: [[LOOP]]:
11+
; CHECK-NEXT: [[NONPOISON:%.*]] = phi i64 [ [[NONPOISON]], %[[BB0:.*]] ], [ [[NONPOISON]], %[[BB1:.*]] ], [ [[NONPOISON]], %[[BB2:.*]] ], [ [[NONPOISON]], %[[BB:.*]] ], [ [[I:%.*]], %[[BACK_TO_LOOP:.*]] ], [ 0, %[[START]] ]
12+
; CHECK-NEXT: [[I]] = call i64 @opaque()
13+
; CHECK-NEXT: switch i64 [[I]], label %[[EXIT0:.*]] [
14+
; CHECK-NEXT: i64 -1, label %[[EXIT1:.*]]
15+
; CHECK-NEXT: i64 2, label %[[BACK_TO_LOOP]]
16+
; CHECK-NEXT: i64 0, label %[[BB]]
17+
; CHECK-NEXT: ]
18+
; CHECK: [[EXIT0]]:
19+
; CHECK-NEXT: br label %[[EXIT1]]
20+
; CHECK: [[EXIT1]]:
21+
; CHECK-NEXT: [[R:%.*]] = phi i64 [ [[NONPOISON]], %[[LOOP]] ], [ undef, %[[EXIT0]] ]
22+
; CHECK-NEXT: ret i64 [[R]]
23+
; CHECK: [[BACK_TO_LOOP]]:
24+
; CHECK-NEXT: br label %[[LOOP]]
25+
; CHECK: [[BB]]:
26+
; CHECK-NEXT: switch i64 [[NONPOISON]], label %[[LOOP]] [
27+
; CHECK-NEXT: i64 0, label %[[BB0]]
28+
; CHECK-NEXT: i64 1, label %[[BB1]]
29+
; CHECK-NEXT: i64 2, label %[[BB2]]
30+
; CHECK-NEXT: ]
31+
; CHECK: [[BB0]]:
32+
; CHECK-NEXT: br label %[[LOOP]]
33+
; CHECK: [[BB1]]:
34+
; CHECK-NEXT: br label %[[LOOP]]
35+
; CHECK: [[BB2]]:
36+
; CHECK-NEXT: br label %[[LOOP]]
37+
;
38+
start:
39+
br label %loop
40+
41+
loop: ; preds = %bb2, %bb1, %bb0, %bb, %back_to_loop, %start
42+
%nonpoison = phi i64 [ %nonpoison, %bb0 ], [ %nonpoison, %bb1 ], [ %nonpoison, %bb2 ], [ %nonpoison, %bb ], [ %i, %back_to_loop ], [ 0, %start ]
43+
%i = call i64 @opaque()
44+
switch i64 %i, label %exit0 [
45+
i64 -1, label %exit1
46+
i64 2, label %back_to_loop
47+
i64 0, label %bb
48+
]
49+
50+
exit0: ; preds = %loop
51+
br label %exit1
52+
53+
exit1: ; preds = %exit0, %loop
54+
%r = phi i64 [ %nonpoison, %loop ], [ undef, %exit0 ]
55+
ret i64 %r
56+
57+
back_to_loop: ; preds = %loop
58+
br label %loop
59+
60+
bb: ; preds = %loop
61+
switch i64 %nonpoison, label %loop [
62+
i64 0, label %bb0
63+
i64 1, label %bb1
64+
i64 2, label %bb2
65+
]
66+
67+
bb0: ; preds = %bb
68+
br label %loop
69+
70+
bb1: ; preds = %bb
71+
br label %loop
72+
73+
bb2: ; preds = %bb
74+
br label %loop
75+
}
76+
77+
define i64 @other_poison() {
78+
; CHECK-LABEL: define i64 @other_poison() {
79+
; CHECK-NEXT: [[START:.*:]]
80+
; CHECK-NEXT: br label %[[LOOP:.*]]
81+
; CHECK: [[LOOP]]:
82+
; CHECK-NEXT: [[I:%.*]] = call i64 @opaque()
83+
; CHECK-NEXT: switch i64 [[I]], label %[[EXIT0:.*]] [
84+
; CHECK-NEXT: i64 -1, label %[[EXIT1:.*]]
85+
; CHECK-NEXT: i64 2, label %[[BACK_TO_LOOP:.*]]
86+
; CHECK-NEXT: i64 0, label %[[BB:.*]]
87+
; CHECK-NEXT: ]
88+
; CHECK: [[EXIT0]]:
89+
; CHECK-NEXT: br label %[[EXIT1]]
90+
; CHECK: [[EXIT1]]:
91+
; CHECK-NEXT: ret i64 0
92+
; CHECK: [[BACK_TO_LOOP]]:
93+
; CHECK-NEXT: br label %[[LOOP]]
94+
; CHECK: [[BB]]:
95+
; CHECK-NEXT: switch i64 0, label %[[LOOP]] [
96+
; CHECK-NEXT: i64 0, label %[[BB0:.*]]
97+
; CHECK-NEXT: i64 1, label %[[BB1:.*]]
98+
; CHECK-NEXT: i64 2, label %[[BB2:.*]]
99+
; CHECK-NEXT: ]
100+
; CHECK: [[BB0]]:
101+
; CHECK-NEXT: br label %[[LOOP]]
102+
; CHECK: [[BB1]]:
103+
; CHECK-NEXT: br label %[[LOOP]]
104+
; CHECK: [[BB2]]:
105+
; CHECK-NEXT: br label %[[LOOP]]
106+
;
107+
start:
108+
br label %loop
109+
110+
loop: ; preds = %bb2, %bb1, %bb0, %bb, %back_to_loop, %start
111+
%maypoison = phi i64 [ %maypoison, %bb0 ], [ %maypoison, %bb1 ], [ %maypoison, %bb2 ], [ %maypoison, %bb ], [ poison, %back_to_loop ], [ 0, %start ]
112+
%i = call i64 @opaque()
113+
switch i64 %i, label %exit0 [
114+
i64 -1, label %exit1
115+
i64 2, label %back_to_loop
116+
i64 0, label %bb
117+
]
118+
119+
exit0: ; preds = %loop
120+
br label %exit1
121+
122+
exit1: ; preds = %exit0, %loop
123+
%r = phi i64 [ %maypoison, %loop ], [ undef, %exit0 ]
124+
ret i64 %r
125+
126+
back_to_loop: ; preds = %loop
127+
br label %loop
128+
129+
bb: ; preds = %loop
130+
switch i64 %maypoison, label %loop [
131+
i64 0, label %bb0
132+
i64 1, label %bb1
133+
i64 2, label %bb2
134+
]
135+
136+
bb0: ; preds = %bb
137+
br label %loop
138+
139+
bb1: ; preds = %bb
140+
br label %loop
141+
142+
bb2: ; preds = %bb
143+
br label %loop
144+
}
145+
146+
declare i64 @opaque()

0 commit comments

Comments
 (0)