Skip to content

Commit 1eaac25

Browse files
committed
Add pre-commit tests
1 parent dafb90d commit 1eaac25

File tree

1 file changed

+236
-0
lines changed

1 file changed

+236
-0
lines changed
Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3+
4+
declare void @use(i8)
5+
6+
define i1 @fold_sext_to_and(i8 %x) {
7+
; CHECK-LABEL: define i1 @fold_sext_to_and(
8+
; CHECK-SAME: i8 [[X:%.*]]) {
9+
; CHECK-NEXT: [[TMP1:%.*]] = sext i8 [[X]] to i32
10+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], -2147483647
11+
; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP2]], 1
12+
; CHECK-NEXT: ret i1 [[TMP3]]
13+
;
14+
%1 = sext i8 %x to i32
15+
%2 = and i32 %1, -2147483647
16+
%3 = icmp eq i32 %2, 1
17+
ret i1 %3
18+
}
19+
20+
define i1 @fold_sext_to_and1(i8 %x) {
21+
; CHECK-LABEL: define i1 @fold_sext_to_and1(
22+
; CHECK-SAME: i8 [[X:%.*]]) {
23+
; CHECK-NEXT: [[TMP1:%.*]] = sext i8 [[X]] to i32
24+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], -2147483647
25+
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i32 [[TMP2]], 1
26+
; CHECK-NEXT: ret i1 [[TMP3]]
27+
;
28+
%1 = sext i8 %x to i32
29+
%2 = and i32 %1, -2147483647
30+
%3 = icmp ne i32 %2, 1
31+
ret i1 %3
32+
}
33+
34+
define i1 @fold_sext_to_and2(i8 %x) {
35+
; CHECK-LABEL: define i1 @fold_sext_to_and2(
36+
; CHECK-SAME: i8 [[X:%.*]]) {
37+
; CHECK-NEXT: [[TMP1:%.*]] = sext i8 [[X]] to i32
38+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], 1073741826
39+
; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP2]], 2
40+
; CHECK-NEXT: ret i1 [[TMP3]]
41+
;
42+
%1 = sext i8 %x to i32
43+
%2 = and i32 %1, 1073741826
44+
%3 = icmp eq i32 %2, 2
45+
ret i1 %3
46+
}
47+
48+
define i1 @fold_sext_to_and3(i8 %x) {
49+
; CHECK-LABEL: define i1 @fold_sext_to_and3(
50+
; CHECK-SAME: i8 [[X:%.*]]) {
51+
; CHECK-NEXT: [[TMP1:%.*]] = sext i8 [[X]] to i32
52+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], 1073741826
53+
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i32 [[TMP2]], 2
54+
; CHECK-NEXT: ret i1 [[TMP3]]
55+
;
56+
%1 = sext i8 %x to i32
57+
%2 = and i32 %1, 1073741826
58+
%3 = icmp ne i32 %2, 2
59+
ret i1 %3
60+
}
61+
62+
define i1 @fold_sext_to_and_multi_use(i8 %x) {
63+
; CHECK-LABEL: define i1 @fold_sext_to_and_multi_use(
64+
; CHECK-SAME: i8 [[X:%.*]]) {
65+
; CHECK-NEXT: [[TMP1:%.*]] = sext i8 [[X]] to i32
66+
; CHECK-NEXT: call void @use(i32 [[TMP1]])
67+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], -2147483647
68+
; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP2]], 1
69+
; CHECK-NEXT: ret i1 [[TMP3]]
70+
;
71+
%1 = sext i8 %x to i32
72+
call void @use(i32 %1)
73+
%2 = and i32 %1, -2147483647
74+
%3 = icmp eq i32 %2, 1
75+
ret i1 %3
76+
}
77+
78+
define i1 @fold_sext_to_and_multi_use1(i8 %x) {
79+
; CHECK-LABEL: define i1 @fold_sext_to_and_multi_use1(
80+
; CHECK-SAME: i8 [[X:%.*]]) {
81+
; CHECK-NEXT: [[TMP1:%.*]] = sext i8 [[X]] to i32
82+
; CHECK-NEXT: call void @use(i32 [[TMP1]])
83+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], -2147483647
84+
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i32 [[TMP2]], 1
85+
; CHECK-NEXT: ret i1 [[TMP3]]
86+
;
87+
%1 = sext i8 %x to i32
88+
call void @use(i32 %1)
89+
%2 = and i32 %1, -2147483647
90+
%3 = icmp ne i32 %2, 1
91+
ret i1 %3
92+
}
93+
94+
define i1 @fold_sext_to_and_multi_use2(i8 %x) {
95+
; CHECK-LABEL: define i1 @fold_sext_to_and_multi_use2(
96+
; CHECK-SAME: i8 [[X:%.*]]) {
97+
; CHECK-NEXT: [[TMP1:%.*]] = sext i8 [[X]] to i32
98+
; CHECK-NEXT: call void @use(i32 [[TMP1]])
99+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], 1073741826
100+
; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP2]], 2
101+
; CHECK-NEXT: ret i1 [[TMP3]]
102+
;
103+
%1 = sext i8 %x to i32
104+
call void @use(i32 %1)
105+
%2 = and i32 %1, 1073741826
106+
%3 = icmp eq i32 %2, 2
107+
ret i1 %3
108+
}
109+
110+
define i1 @fold_sext_to_and_multi_use3(i8 %x) {
111+
; CHECK-LABEL: define i1 @fold_sext_to_and_multi_use3(
112+
; CHECK-SAME: i8 [[X:%.*]]) {
113+
; CHECK-NEXT: [[TMP1:%.*]] = sext i8 [[X]] to i32
114+
; CHECK-NEXT: call void @use(i32 [[TMP1]])
115+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], 1073741826
116+
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i32 [[TMP2]], 2
117+
; CHECK-NEXT: ret i1 [[TMP3]]
118+
;
119+
%1 = sext i8 %x to i32
120+
call void @use(i32 %1)
121+
%2 = and i32 %1, 1073741826
122+
%3 = icmp ne i32 %2, 2
123+
ret i1 %3
124+
}
125+
126+
; Negative tests
127+
128+
define i1 @fold_sext_to_and_wrong(i8 %x) {
129+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong(
130+
; CHECK-SAME: i8 [[X:%.*]]) {
131+
; CHECK-NEXT: ret i1 false
132+
;
133+
%1 = sext i8 %x to i32
134+
%2 = and i32 %1, -2147483647
135+
%3 = icmp eq i32 %2, -1
136+
ret i1 %3
137+
}
138+
139+
define i1 @fold_sext_to_and_wrong2(i8 %x) {
140+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong2(
141+
; CHECK-SAME: i8 [[X:%.*]]) {
142+
; CHECK-NEXT: ret i1 false
143+
;
144+
%1 = sext i8 %x to i32
145+
%2 = and i32 %1, -2147483647
146+
%3 = icmp eq i32 %2, 128
147+
ret i1 %3
148+
}
149+
150+
define i1 @fold_sext_to_and_wrong3(i8 %x) {
151+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong3(
152+
; CHECK-SAME: i8 [[X:%.*]]) {
153+
; CHECK-NEXT: ret i1 false
154+
;
155+
%1 = sext i8 %x to i32
156+
%2 = and i32 %1, 128
157+
%3 = icmp eq i32 %2, -2147483648
158+
ret i1 %3
159+
}
160+
161+
define i1 @fold_sext_to_and_wrong4(i8 %x) {
162+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong4(
163+
; CHECK-SAME: i8 [[X:%.*]]) {
164+
; CHECK-NEXT: ret i1 false
165+
;
166+
%1 = sext i8 %x to i32
167+
%2 = and i32 %1, 128
168+
%3 = icmp eq i32 %2, 1
169+
ret i1 %3
170+
}
171+
172+
define i1 @fold_sext_to_and_wrong5(i8 %x) {
173+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong5(
174+
; CHECK-SAME: i8 [[X:%.*]]) {
175+
; CHECK-NEXT: ret i1 false
176+
;
177+
%1 = sext i8 %x to i32
178+
%2 = and i32 %1, -256
179+
%3 = icmp eq i32 %2, 1
180+
ret i1 %3
181+
}
182+
183+
define i1 @fold_sext_to_and_wrong6(i8 %x) {
184+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong6(
185+
; CHECK-SAME: i8 [[X:%.*]]) {
186+
; CHECK-NEXT: ret i1 true
187+
;
188+
%1 = sext i8 %x to i32
189+
%2 = and i32 %1, -2147483647
190+
%3 = icmp ne i32 %2, -1
191+
ret i1 %3
192+
}
193+
194+
define i1 @fold_sext_to_and_wrong7(i8 %x) {
195+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong7(
196+
; CHECK-SAME: i8 [[X:%.*]]) {
197+
; CHECK-NEXT: ret i1 true
198+
;
199+
%1 = sext i8 %x to i32
200+
%2 = and i32 %1, -2147483647
201+
%3 = icmp ne i32 %2, 128
202+
ret i1 %3
203+
}
204+
205+
define i1 @fold_sext_to_and_wrong8(i8 %x) {
206+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong8(
207+
; CHECK-SAME: i8 [[X:%.*]]) {
208+
; CHECK-NEXT: ret i1 true
209+
;
210+
%1 = sext i8 %x to i32
211+
%2 = and i32 %1, 128
212+
%3 = icmp ne i32 %2, -2147483648
213+
ret i1 %3
214+
}
215+
216+
define i1 @fold_sext_to_and_wrong9(i8 %x) {
217+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong9(
218+
; CHECK-SAME: i8 [[X:%.*]]) {
219+
; CHECK-NEXT: ret i1 true
220+
;
221+
%1 = sext i8 %x to i32
222+
%2 = and i32 %1, 128
223+
%3 = icmp ne i32 %2, 1
224+
ret i1 %3
225+
}
226+
227+
define i1 @fold_sext_to_and_wrong10(i8 %x) {
228+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong10(
229+
; CHECK-SAME: i8 [[X:%.*]]) {
230+
; CHECK-NEXT: ret i1 true
231+
;
232+
%1 = sext i8 %x to i32
233+
%2 = and i32 %1, -256
234+
%3 = icmp ne i32 %2, 1
235+
ret i1 %3
236+
}

0 commit comments

Comments
 (0)