Skip to content

Commit 8d56b3a

Browse files
committed
pre-commit test
1 parent 937be17 commit 8d56b3a

File tree

1 file changed

+205
-0
lines changed

1 file changed

+205
-0
lines changed
Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,205 @@
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+
define i1 @ceil_shift4(i32 %arg0) {
5+
; CHECK-LABEL: define i1 @ceil_shift4(
6+
; CHECK-SAME: i32 [[ARG0:%.*]]) {
7+
; CHECK-NEXT: [[TMP6:%.*]] = lshr i32 [[ARG0]], 4
8+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[ARG0]], 15
9+
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i32 [[TMP2]], 0
10+
; CHECK-NEXT: [[TMP4:%.*]] = zext i1 [[TMP3]] to i32
11+
; CHECK-NEXT: [[TMP5:%.*]] = or i32 [[TMP6]], [[TMP4]]
12+
; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i32 [[TMP5]], 0
13+
; CHECK-NEXT: ret i1 [[TMP1]]
14+
;
15+
%1 = lshr i32 %arg0, 4
16+
%2 = and i32 %arg0, 15
17+
%3 = icmp ne i32 %2, 0
18+
%4 = zext i1 %3 to i32
19+
%5 = add i32 %1, %4
20+
%6 = icmp eq i32 %5, 0
21+
ret i1 %6
22+
}
23+
24+
define i1 @ceil_shift6(i32 %arg0) {
25+
; CHECK-LABEL: define i1 @ceil_shift6(
26+
; CHECK-SAME: i32 [[ARG0:%.*]]) {
27+
; CHECK-NEXT: [[TMP6:%.*]] = lshr i32 [[ARG0]], 6
28+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[ARG0]], 63
29+
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i32 [[TMP2]], 0
30+
; CHECK-NEXT: [[TMP4:%.*]] = zext i1 [[TMP3]] to i32
31+
; CHECK-NEXT: [[TMP5:%.*]] = or i32 [[TMP6]], [[TMP4]]
32+
; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i32 [[TMP5]], 0
33+
; CHECK-NEXT: ret i1 [[TMP1]]
34+
;
35+
%1 = lshr i32 %arg0, 6
36+
%2 = and i32 %arg0, 63
37+
%3 = icmp ne i32 %2, 0
38+
%4 = zext i1 %3 to i32
39+
%5 = add i32 %1, %4
40+
%6 = icmp eq i32 %5, 0
41+
ret i1 %6
42+
}
43+
44+
define i1 @ceil_shift11(i32 %arg0) {
45+
; CHECK-LABEL: define i1 @ceil_shift11(
46+
; CHECK-SAME: i32 [[ARG0:%.*]]) {
47+
; CHECK-NEXT: [[TMP6:%.*]] = lshr i32 [[ARG0]], 11
48+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[ARG0]], 2047
49+
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i32 [[TMP2]], 0
50+
; CHECK-NEXT: [[TMP4:%.*]] = zext i1 [[TMP3]] to i32
51+
; CHECK-NEXT: [[TMP5:%.*]] = or i32 [[TMP6]], [[TMP4]]
52+
; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i32 [[TMP5]], 0
53+
; CHECK-NEXT: ret i1 [[TMP1]]
54+
;
55+
%1 = lshr i32 %arg0, 11
56+
%2 = and i32 %arg0, 2047
57+
%3 = icmp ne i32 %2, 0
58+
%4 = zext i1 %3 to i32
59+
%5 = add i32 %1, %4
60+
%6 = icmp eq i32 %5, 0
61+
ret i1 %6
62+
}
63+
64+
define i1 @ceil_shift0(i32 %arg0) {
65+
; CHECK-LABEL: define i1 @ceil_shift0(
66+
; CHECK-SAME: i32 [[ARG0:%.*]]) {
67+
; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i32 [[ARG0]], 0
68+
; CHECK-NEXT: ret i1 [[TMP1]]
69+
;
70+
%1 = lshr i32 %arg0, 0
71+
%2 = and i32 %arg0, 0
72+
%3 = icmp ne i32 %2, 0
73+
%4 = zext i1 %3 to i32
74+
%5 = add i32 %1, %4
75+
%6 = icmp eq i32 %5, 0
76+
ret i1 %6
77+
}
78+
79+
declare void @use(i32)
80+
81+
define i1 @ceil_shift4_used_1(i32 %arg0) {
82+
; CHECK-LABEL: define i1 @ceil_shift4_used_1(
83+
; CHECK-SAME: i32 [[ARG0:%.*]]) {
84+
; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[ARG0]], 4
85+
; CHECK-NEXT: call void @use(i32 [[TMP1]])
86+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[ARG0]], 15
87+
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i32 [[TMP2]], 0
88+
; CHECK-NEXT: [[TMP4:%.*]] = zext i1 [[TMP3]] to i32
89+
; CHECK-NEXT: [[TMP5:%.*]] = or i32 [[TMP1]], [[TMP4]]
90+
; CHECK-NEXT: [[TMP6:%.*]] = icmp eq i32 [[TMP5]], 0
91+
; CHECK-NEXT: ret i1 [[TMP6]]
92+
;
93+
%1 = lshr i32 %arg0, 4
94+
call void @use(i32 %1)
95+
%2 = and i32 %arg0, 15
96+
%3 = icmp ne i32 %2, 0
97+
%4 = zext i1 %3 to i32
98+
%5 = add i32 %1, %4
99+
%6 = icmp eq i32 %5, 0
100+
ret i1 %6
101+
}
102+
103+
define i1 @ceil_shift4_used_5(i32 %arg0) {
104+
; CHECK-LABEL: define i1 @ceil_shift4_used_5(
105+
; CHECK-SAME: i32 [[ARG0:%.*]]) {
106+
; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[ARG0]], 4
107+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[ARG0]], 15
108+
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i32 [[TMP2]], 0
109+
; CHECK-NEXT: [[TMP4:%.*]] = zext i1 [[TMP3]] to i32
110+
; CHECK-NEXT: [[TMP5:%.*]] = add nuw nsw i32 [[TMP1]], [[TMP4]]
111+
; CHECK-NEXT: call void @use(i32 [[TMP5]])
112+
; CHECK-NEXT: [[TMP6:%.*]] = icmp eq i32 [[TMP5]], 0
113+
; CHECK-NEXT: ret i1 [[TMP6]]
114+
;
115+
%1 = lshr i32 %arg0, 4
116+
%2 = and i32 %arg0, 15
117+
%3 = icmp ne i32 %2, 0
118+
%4 = zext i1 %3 to i32
119+
%5 = add i32 %1, %4
120+
call void @use(i32 %5)
121+
%6 = icmp eq i32 %5, 0
122+
ret i1 %6
123+
}
124+
125+
define <4 x i1> @ceil_shift4_v4i32(<4 x i32> %arg0) {
126+
; CHECK-LABEL: define <4 x i1> @ceil_shift4_v4i32(
127+
; CHECK-SAME: <4 x i32> [[ARG0:%.*]]) {
128+
; CHECK-NEXT: [[TMP6:%.*]] = lshr <4 x i32> [[ARG0]], splat (i32 16)
129+
; CHECK-NEXT: [[TMP2:%.*]] = and <4 x i32> [[ARG0]], splat (i32 65535)
130+
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne <4 x i32> [[TMP2]], zeroinitializer
131+
; CHECK-NEXT: [[TMP4:%.*]] = zext <4 x i1> [[TMP3]] to <4 x i32>
132+
; CHECK-NEXT: [[TMP5:%.*]] = or <4 x i32> [[TMP6]], [[TMP4]]
133+
; CHECK-NEXT: [[TMP1:%.*]] = icmp eq <4 x i32> [[TMP5]], zeroinitializer
134+
; CHECK-NEXT: ret <4 x i1> [[TMP1]]
135+
;
136+
%1 = lshr <4 x i32> %arg0, splat (i32 16)
137+
%2 = and <4 x i32> %arg0, splat (i32 65535)
138+
%3 = icmp ne <4 x i32> %2, zeroinitializer
139+
%4 = zext <4 x i1> %3 to <4 x i32>
140+
%5 = add <4 x i32> %1, %4
141+
%6 = icmp eq <4 x i32> %5, zeroinitializer
142+
ret <4 x i1> %6
143+
}
144+
145+
define <8 x i1> @ceil_shift4_v8i16(<8 x i16> %arg0) {
146+
; CHECK-LABEL: define <8 x i1> @ceil_shift4_v8i16(
147+
; CHECK-SAME: <8 x i16> [[ARG0:%.*]]) {
148+
; CHECK-NEXT: [[TMP6:%.*]] = lshr <8 x i16> [[ARG0]], splat (i16 4)
149+
; CHECK-NEXT: [[TMP2:%.*]] = and <8 x i16> [[ARG0]], splat (i16 15)
150+
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne <8 x i16> [[TMP2]], zeroinitializer
151+
; CHECK-NEXT: [[TMP4:%.*]] = zext <8 x i1> [[TMP3]] to <8 x i16>
152+
; CHECK-NEXT: [[TMP5:%.*]] = or <8 x i16> [[TMP6]], [[TMP4]]
153+
; CHECK-NEXT: [[TMP1:%.*]] = icmp eq <8 x i16> [[TMP5]], zeroinitializer
154+
; CHECK-NEXT: ret <8 x i1> [[TMP1]]
155+
;
156+
%1 = lshr <8 x i16> %arg0, splat (i16 4)
157+
%2 = and <8 x i16> %arg0, splat (i16 15)
158+
%3 = icmp ne <8 x i16> %2, zeroinitializer
159+
%4 = zext <8 x i1> %3 to <8 x i16>
160+
%5 = add <8 x i16> %1, %4
161+
%6 = icmp eq <8 x i16> %5, zeroinitializer
162+
ret <8 x i1> %6
163+
}
164+
165+
; negative tests
166+
167+
define i1 @ceil_shift_not_mask_1(i32 %arg0) {
168+
; CHECK-LABEL: define i1 @ceil_shift_not_mask_1(
169+
; CHECK-SAME: i32 [[ARG0:%.*]]) {
170+
; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[ARG0]], 4
171+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[ARG0]], 31
172+
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i32 [[TMP2]], 0
173+
; CHECK-NEXT: [[TMP4:%.*]] = zext i1 [[TMP3]] to i32
174+
; CHECK-NEXT: [[TMP5:%.*]] = or i32 [[TMP1]], [[TMP4]]
175+
; CHECK-NEXT: [[TMP6:%.*]] = icmp eq i32 [[TMP5]], 0
176+
; CHECK-NEXT: ret i1 [[TMP6]]
177+
;
178+
%1 = lshr i32 %arg0, 4
179+
%2 = and i32 %arg0, 31
180+
%3 = icmp ne i32 %2, 0
181+
%4 = zext i1 %3 to i32
182+
%5 = add i32 %1, %4
183+
%6 = icmp eq i32 %5, 0
184+
ret i1 %6
185+
}
186+
187+
define i1 @ceil_shift_not_mask_2(i32 %arg0) {
188+
; CHECK-LABEL: define i1 @ceil_shift_not_mask_2(
189+
; CHECK-SAME: i32 [[ARG0:%.*]]) {
190+
; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[ARG0]], 5
191+
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[ARG0]], 15
192+
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i32 [[TMP2]], 0
193+
; CHECK-NEXT: [[TMP4:%.*]] = zext i1 [[TMP3]] to i32
194+
; CHECK-NEXT: [[TMP5:%.*]] = or i32 [[TMP1]], [[TMP4]]
195+
; CHECK-NEXT: [[TMP6:%.*]] = icmp eq i32 [[TMP5]], 0
196+
; CHECK-NEXT: ret i1 [[TMP6]]
197+
;
198+
%1 = lshr i32 %arg0, 5
199+
%2 = and i32 %arg0, 15
200+
%3 = icmp ne i32 %2, 0
201+
%4 = zext i1 %3 to i32
202+
%5 = add i32 %1, %4
203+
%6 = icmp eq i32 %5, 0
204+
ret i1 %6
205+
}

0 commit comments

Comments
 (0)