Skip to content

Commit f82f372

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

File tree

1 file changed

+176
-0
lines changed

1 file changed

+176
-0
lines changed
Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
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_and_multi_use(i8 %x) {
35+
; CHECK-LABEL: define i1 @fold_sext_to_and_multi_use(
36+
; CHECK-SAME: i8 [[X:%.*]]) {
37+
; CHECK-NEXT: [[TMP1:%.*]] = sext i8 [[X]] to i32
38+
; CHECK-NEXT: call void @use(i32 [[TMP1]])
39+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], -2147483647
40+
; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP2]], 1
41+
; CHECK-NEXT: ret i1 [[TMP3]]
42+
;
43+
%1 = sext i8 %x to i32
44+
call void @use(i32 %1)
45+
%2 = and i32 %1, -2147483647
46+
%3 = icmp eq i32 %2, 1
47+
ret i1 %3
48+
}
49+
50+
define i1 @fold_sext_to_and_multi_use1(i8 %x) {
51+
; CHECK-LABEL: define i1 @fold_sext_to_and_multi_use1(
52+
; CHECK-SAME: i8 [[X:%.*]]) {
53+
; CHECK-NEXT: [[TMP1:%.*]] = sext i8 [[X]] to i32
54+
; CHECK-NEXT: call void @use(i32 [[TMP1]])
55+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], -2147483647
56+
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i32 [[TMP2]], 1
57+
; CHECK-NEXT: ret i1 [[TMP3]]
58+
;
59+
%1 = sext i8 %x to i32
60+
call void @use(i32 %1)
61+
%2 = and i32 %1, -2147483647
62+
%3 = icmp ne i32 %2, 1
63+
ret i1 %3
64+
}
65+
66+
; Negative tests
67+
68+
define i1 @fold_sext_to_and_wrong(i8 %x) {
69+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong(
70+
; CHECK-SAME: i8 [[X:%.*]]) {
71+
; CHECK-NEXT: ret i1 false
72+
;
73+
%1 = sext i8 %x to i32
74+
%2 = and i32 %1, -2147483647
75+
%3 = icmp eq i32 %2, -1
76+
ret i1 %3
77+
}
78+
79+
define i1 @fold_sext_to_and_wrong2(i8 %x) {
80+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong2(
81+
; CHECK-SAME: i8 [[X:%.*]]) {
82+
; CHECK-NEXT: ret i1 false
83+
;
84+
%1 = sext i8 %x to i32
85+
%2 = and i32 %1, -2147483647
86+
%3 = icmp eq i32 %2, 128
87+
ret i1 %3
88+
}
89+
90+
define i1 @fold_sext_to_and_wrong3(i8 %x) {
91+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong3(
92+
; CHECK-SAME: i8 [[X:%.*]]) {
93+
; CHECK-NEXT: ret i1 false
94+
;
95+
%1 = sext i8 %x to i32
96+
%2 = and i32 %1, 128
97+
%3 = icmp eq i32 %2, -2147483648
98+
ret i1 %3
99+
}
100+
101+
define i1 @fold_sext_to_and_wrong4(i8 %x) {
102+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong4(
103+
; CHECK-SAME: i8 [[X:%.*]]) {
104+
; CHECK-NEXT: ret i1 false
105+
;
106+
%1 = sext i8 %x to i32
107+
%2 = and i32 %1, 128
108+
%3 = icmp eq i32 %2, 1
109+
ret i1 %3
110+
}
111+
112+
define i1 @fold_sext_to_and_wrong5(i8 %x) {
113+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong5(
114+
; CHECK-SAME: i8 [[X:%.*]]) {
115+
; CHECK-NEXT: ret i1 false
116+
;
117+
%1 = sext i8 %x to i32
118+
%2 = and i32 %1, -256
119+
%3 = icmp eq i32 %2, 1
120+
ret i1 %3
121+
}
122+
123+
define i1 @fold_sext_to_and_wrong6(i8 %x) {
124+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong6(
125+
; CHECK-SAME: i8 [[X:%.*]]) {
126+
; CHECK-NEXT: ret i1 true
127+
;
128+
%1 = sext i8 %x to i32
129+
%2 = and i32 %1, -2147483647
130+
%3 = icmp ne i32 %2, -1
131+
ret i1 %3
132+
}
133+
134+
define i1 @fold_sext_to_and_wrong7(i8 %x) {
135+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong7(
136+
; CHECK-SAME: i8 [[X:%.*]]) {
137+
; CHECK-NEXT: ret i1 true
138+
;
139+
%1 = sext i8 %x to i32
140+
%2 = and i32 %1, -2147483647
141+
%3 = icmp ne i32 %2, 128
142+
ret i1 %3
143+
}
144+
145+
define i1 @fold_sext_to_and_wrong8(i8 %x) {
146+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong8(
147+
; CHECK-SAME: i8 [[X:%.*]]) {
148+
; CHECK-NEXT: ret i1 true
149+
;
150+
%1 = sext i8 %x to i32
151+
%2 = and i32 %1, 128
152+
%3 = icmp ne i32 %2, -2147483648
153+
ret i1 %3
154+
}
155+
156+
define i1 @fold_sext_to_and_wrong9(i8 %x) {
157+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong9(
158+
; CHECK-SAME: i8 [[X:%.*]]) {
159+
; CHECK-NEXT: ret i1 true
160+
;
161+
%1 = sext i8 %x to i32
162+
%2 = and i32 %1, 128
163+
%3 = icmp ne i32 %2, 1
164+
ret i1 %3
165+
}
166+
167+
define i1 @fold_sext_to_and_wrong10(i8 %x) {
168+
; CHECK-LABEL: define i1 @fold_sext_to_and_wrong10(
169+
; CHECK-SAME: i8 [[X:%.*]]) {
170+
; CHECK-NEXT: ret i1 true
171+
;
172+
%1 = sext i8 %x to i32
173+
%2 = and i32 %1, -256
174+
%3 = icmp ne i32 %2, 1
175+
ret i1 %3
176+
}

0 commit comments

Comments
 (0)