Skip to content

Commit 6d254a2

Browse files
committed
[CSKY][test][NFC] Add tests of IR pattern icmp-select
These tests will be optimized with INCT32/INCF32/DECT32/DECF32 in the future. Reviewed By: zixuan-wu Differential Revision: https://reviews.llvm.org/D153434
1 parent 1d70ad5 commit 6d254a2

File tree

2 files changed

+716
-0
lines changed

2 files changed

+716
-0
lines changed

llvm/test/CodeGen/CSKY/dect-decf.ll

Lines changed: 358 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,358 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2+
; RUN: llc -verify-machineinstrs -csky-no-aliases -mattr=+2e3 < %s -mtriple=csky | FileCheck %s
3+
4+
define i32 @select_by_icmp_ugt(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
5+
; CHECK-LABEL: select_by_icmp_ugt:
6+
; CHECK: # %bb.0:
7+
; CHECK-NEXT: subi16 a2, 10
8+
; CHECK-NEXT: cmphs16 a1, a0
9+
; CHECK-NEXT: movf32 a3, a2
10+
; CHECK-NEXT: mov16 a0, a3
11+
; CHECK-NEXT: rts16
12+
%t4 = icmp ugt i32 %t0, %t1
13+
%t5 = sub i32 %t2, 10
14+
%t6 = select i1 %t4, i32 %t5, i32 %t3
15+
ret i32 %t6
16+
}
17+
18+
define i32 @select_by_icmp_sgt(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
19+
; CHECK-LABEL: select_by_icmp_sgt:
20+
; CHECK: # %bb.0:
21+
; CHECK-NEXT: subi16 a2, 10
22+
; CHECK-NEXT: cmplt16 a1, a0
23+
; CHECK-NEXT: movt32 a3, a2
24+
; CHECK-NEXT: mov16 a0, a3
25+
; CHECK-NEXT: rts16
26+
%t4 = icmp sgt i32 %t0, %t1
27+
%t5 = sub i32 %t2, 10
28+
%t6 = select i1 %t4, i32 %t5, i32 %t3
29+
ret i32 %t6
30+
}
31+
32+
define i32 @select_by_icmp_uge(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
33+
; CHECK-LABEL: select_by_icmp_uge:
34+
; CHECK: # %bb.0:
35+
; CHECK-NEXT: subi16 a2, 10
36+
; CHECK-NEXT: cmphs16 a0, a1
37+
; CHECK-NEXT: movt32 a3, a2
38+
; CHECK-NEXT: mov16 a0, a3
39+
; CHECK-NEXT: rts16
40+
%t4 = icmp uge i32 %t0, %t1
41+
%t5 = sub i32 %t2, 10
42+
%t6 = select i1 %t4, i32 %t5, i32 %t3
43+
ret i32 %t6
44+
}
45+
46+
define i32 @select_by_icmp_sge(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
47+
; CHECK-LABEL: select_by_icmp_sge:
48+
; CHECK: # %bb.0:
49+
; CHECK-NEXT: subi16 a2, 10
50+
; CHECK-NEXT: cmplt16 a0, a1
51+
; CHECK-NEXT: movf32 a3, a2
52+
; CHECK-NEXT: mov16 a0, a3
53+
; CHECK-NEXT: rts16
54+
%t4 = icmp sge i32 %t0, %t1
55+
%t5 = sub i32 %t2, 10
56+
%t6 = select i1 %t4, i32 %t5, i32 %t3
57+
ret i32 %t6
58+
}
59+
60+
define i32 @select_by_icmp_ult(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
61+
; CHECK-LABEL: select_by_icmp_ult:
62+
; CHECK: # %bb.0:
63+
; CHECK-NEXT: subi16 a2, 10
64+
; CHECK-NEXT: cmphs16 a0, a1
65+
; CHECK-NEXT: movf32 a3, a2
66+
; CHECK-NEXT: mov16 a0, a3
67+
; CHECK-NEXT: rts16
68+
%t4 = icmp ult i32 %t0, %t1
69+
%t5 = sub i32 %t2, 10
70+
%t6 = select i1 %t4, i32 %t5, i32 %t3
71+
ret i32 %t6
72+
}
73+
74+
define i32 @select_by_icmp_slt(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
75+
; CHECK-LABEL: select_by_icmp_slt:
76+
; CHECK: # %bb.0:
77+
; CHECK-NEXT: subi16 a2, 10
78+
; CHECK-NEXT: cmplt16 a0, a1
79+
; CHECK-NEXT: movt32 a3, a2
80+
; CHECK-NEXT: mov16 a0, a3
81+
; CHECK-NEXT: rts16
82+
%t4 = icmp slt i32 %t0, %t1
83+
%t5 = sub i32 %t2, 10
84+
%t6 = select i1 %t4, i32 %t5, i32 %t3
85+
ret i32 %t6
86+
}
87+
88+
define i32 @select_by_icmp_ule(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
89+
; CHECK-LABEL: select_by_icmp_ule:
90+
; CHECK: # %bb.0:
91+
; CHECK-NEXT: subi16 a2, 10
92+
; CHECK-NEXT: cmphs16 a1, a0
93+
; CHECK-NEXT: movt32 a3, a2
94+
; CHECK-NEXT: mov16 a0, a3
95+
; CHECK-NEXT: rts16
96+
%t4 = icmp ule i32 %t0, %t1
97+
%t5 = sub i32 %t2, 10
98+
%t6 = select i1 %t4, i32 %t5, i32 %t3
99+
ret i32 %t6
100+
}
101+
102+
define i32 @select_by_icmp_sle(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
103+
; CHECK-LABEL: select_by_icmp_sle:
104+
; CHECK: # %bb.0:
105+
; CHECK-NEXT: subi16 a2, 10
106+
; CHECK-NEXT: cmplt16 a1, a0
107+
; CHECK-NEXT: movf32 a3, a2
108+
; CHECK-NEXT: mov16 a0, a3
109+
; CHECK-NEXT: rts16
110+
%t4 = icmp sle i32 %t0, %t1
111+
%t5 = sub i32 %t2, 10
112+
%t6 = select i1 %t4, i32 %t5, i32 %t3
113+
ret i32 %t6
114+
}
115+
116+
define i32 @select_by_icmp_ne(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
117+
; CHECK-LABEL: select_by_icmp_ne:
118+
; CHECK: # %bb.0:
119+
; CHECK-NEXT: subi16 a2, 10
120+
; CHECK-NEXT: cmpne16 a0, a1
121+
; CHECK-NEXT: movt32 a3, a2
122+
; CHECK-NEXT: mov16 a0, a3
123+
; CHECK-NEXT: rts16
124+
%t4 = icmp ne i32 %t0, %t1
125+
%t5 = sub i32 %t2, 10
126+
%t6 = select i1 %t4, i32 %t5, i32 %t3
127+
ret i32 %t6
128+
}
129+
130+
define i32 @select_by_icmp_eq(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
131+
; CHECK-LABEL: select_by_icmp_eq:
132+
; CHECK: # %bb.0:
133+
; CHECK-NEXT: subi16 a2, 10
134+
; CHECK-NEXT: cmpne16 a0, a1
135+
; CHECK-NEXT: movf32 a3, a2
136+
; CHECK-NEXT: mov16 a0, a3
137+
; CHECK-NEXT: rts16
138+
%t4 = icmp eq i32 %t0, %t1
139+
%t5 = sub i32 %t2, 10
140+
%t6 = select i1 %t4, i32 %t5, i32 %t3
141+
ret i32 %t6
142+
}
143+
144+
define i32 @select_by_icmp_ugt_imm(i32 %t0, i32 %t2, i32 %t3) {
145+
; CHECK-LABEL: select_by_icmp_ugt_imm:
146+
; CHECK: # %bb.0:
147+
; CHECK-NEXT: subi16 a1, 10
148+
; CHECK-NEXT: movi16 a3, 128
149+
; CHECK-NEXT: cmphs16 a3, a0
150+
; CHECK-NEXT: movf32 a2, a1
151+
; CHECK-NEXT: mov16 a0, a2
152+
; CHECK-NEXT: rts16
153+
%t4 = icmp ugt i32 %t0, 128
154+
%t5 = sub i32 %t2, 10
155+
%t6 = select i1 %t4, i32 %t5, i32 %t3
156+
ret i32 %t6
157+
}
158+
159+
define i32 @select_by_icmp_sgt_imm(i32 %t0, i32 %t2, i32 %t3) {
160+
; CHECK-LABEL: select_by_icmp_sgt_imm:
161+
; CHECK: # %bb.0:
162+
; CHECK-NEXT: subi16 a1, 10
163+
; CHECK-NEXT: movi16 a3, 128
164+
; CHECK-NEXT: cmplt16 a3, a0
165+
; CHECK-NEXT: movt32 a2, a1
166+
; CHECK-NEXT: mov16 a0, a2
167+
; CHECK-NEXT: rts16
168+
%t4 = icmp sgt i32 %t0, 128
169+
%t5 = sub i32 %t2, 10
170+
%t6 = select i1 %t4, i32 %t5, i32 %t3
171+
ret i32 %t6
172+
}
173+
174+
define i32 @select_by_icmp_uge_imm(i32 %t0, i32 %t2, i32 %t3) {
175+
; CHECK-LABEL: select_by_icmp_uge_imm:
176+
; CHECK: # %bb.0:
177+
; CHECK-NEXT: subi16 a1, 10
178+
; CHECK-NEXT: movi16 a3, 127
179+
; CHECK-NEXT: cmphs16 a3, a0
180+
; CHECK-NEXT: movf32 a2, a1
181+
; CHECK-NEXT: mov16 a0, a2
182+
; CHECK-NEXT: rts16
183+
%t4 = icmp uge i32 %t0, 128
184+
%t5 = sub i32 %t2, 10
185+
%t6 = select i1 %t4, i32 %t5, i32 %t3
186+
ret i32 %t6
187+
}
188+
189+
define i32 @select_by_icmp_sge_imm(i32 %t0, i32 %t2, i32 %t3) {
190+
; CHECK-LABEL: select_by_icmp_sge_imm:
191+
; CHECK: # %bb.0:
192+
; CHECK-NEXT: subi16 a1, 10
193+
; CHECK-NEXT: movi16 a3, 127
194+
; CHECK-NEXT: cmplt16 a3, a0
195+
; CHECK-NEXT: movt32 a2, a1
196+
; CHECK-NEXT: mov16 a0, a2
197+
; CHECK-NEXT: rts16
198+
%t4 = icmp sge i32 %t0, 128
199+
%t5 = sub i32 %t2, 10
200+
%t6 = select i1 %t4, i32 %t5, i32 %t3
201+
ret i32 %t6
202+
}
203+
204+
define i32 @select_by_icmp_ult_imm(i32 %t0, i32 %t2, i32 %t3) {
205+
; CHECK-LABEL: select_by_icmp_ult_imm:
206+
; CHECK: # %bb.0:
207+
; CHECK-NEXT: subi16 a1, 10
208+
; CHECK-NEXT: cmphsi32 a0, 128
209+
; CHECK-NEXT: movf32 a2, a1
210+
; CHECK-NEXT: mov16 a0, a2
211+
; CHECK-NEXT: rts16
212+
%t4 = icmp ult i32 %t0, 128
213+
%t5 = sub i32 %t2, 10
214+
%t6 = select i1 %t4, i32 %t5, i32 %t3
215+
ret i32 %t6
216+
}
217+
218+
define i32 @select_by_icmp_slt_imm(i32 %t0, i32 %t2, i32 %t3) {
219+
; CHECK-LABEL: select_by_icmp_slt_imm:
220+
; CHECK: # %bb.0:
221+
; CHECK-NEXT: subi16 a1, 10
222+
; CHECK-NEXT: cmplti32 a0, 128
223+
; CHECK-NEXT: movt32 a2, a1
224+
; CHECK-NEXT: mov16 a0, a2
225+
; CHECK-NEXT: rts16
226+
%t4 = icmp slt i32 %t0, 128
227+
%t5 = sub i32 %t2, 10
228+
%t6 = select i1 %t4, i32 %t5, i32 %t3
229+
ret i32 %t6
230+
}
231+
232+
define i32 @select_by_icmp_ule_imm(i32 %t0, i32 %t2, i32 %t3) {
233+
; CHECK-LABEL: select_by_icmp_ule_imm:
234+
; CHECK: # %bb.0:
235+
; CHECK-NEXT: subi16 a1, 10
236+
; CHECK-NEXT: cmphsi32 a0, 129
237+
; CHECK-NEXT: movf32 a2, a1
238+
; CHECK-NEXT: mov16 a0, a2
239+
; CHECK-NEXT: rts16
240+
%t4 = icmp ule i32 %t0, 128
241+
%t5 = sub i32 %t2, 10
242+
%t6 = select i1 %t4, i32 %t5, i32 %t3
243+
ret i32 %t6
244+
}
245+
246+
define i32 @select_by_icmp_sle_imm(i32 %t0, i32 %t2, i32 %t3) {
247+
; CHECK-LABEL: select_by_icmp_sle_imm:
248+
; CHECK: # %bb.0:
249+
; CHECK-NEXT: subi16 a1, 10
250+
; CHECK-NEXT: cmplti32 a0, 129
251+
; CHECK-NEXT: movt32 a2, a1
252+
; CHECK-NEXT: mov16 a0, a2
253+
; CHECK-NEXT: rts16
254+
%t4 = icmp sle i32 %t0, 128
255+
%t5 = sub i32 %t2, 10
256+
%t6 = select i1 %t4, i32 %t5, i32 %t3
257+
ret i32 %t6
258+
}
259+
260+
define i32 @select_by_icmp_ne_imm(i32 %t0, i32 %t2, i32 %t3) {
261+
; CHECK-LABEL: select_by_icmp_ne_imm:
262+
; CHECK: # %bb.0:
263+
; CHECK-NEXT: subi16 a1, 10
264+
; CHECK-NEXT: cmpnei32 a0, 128
265+
; CHECK-NEXT: movt32 a2, a1
266+
; CHECK-NEXT: mov16 a0, a2
267+
; CHECK-NEXT: rts16
268+
%t4 = icmp ne i32 %t0, 128
269+
%t5 = sub i32 %t2, 10
270+
%t6 = select i1 %t4, i32 %t5, i32 %t3
271+
ret i32 %t6
272+
}
273+
274+
define i32 @select_by_icmp_eq_imm(i32 %t0, i32 %t2, i32 %t3) {
275+
; CHECK-LABEL: select_by_icmp_eq_imm:
276+
; CHECK: # %bb.0:
277+
; CHECK-NEXT: subi16 a1, 10
278+
; CHECK-NEXT: cmpnei32 a0, 128
279+
; CHECK-NEXT: movf32 a2, a1
280+
; CHECK-NEXT: mov16 a0, a2
281+
; CHECK-NEXT: rts16
282+
%t4 = icmp eq i32 %t0, 128
283+
%t5 = sub i32 %t2, 10
284+
%t6 = select i1 %t4, i32 %t5, i32 %t3
285+
ret i32 %t6
286+
}
287+
288+
define i32 @select_by_call_t(i32 %t0, i32 %t1, i32 %t2) {
289+
; CHECK-LABEL: select_by_call_t:
290+
; CHECK: # %bb.0:
291+
; CHECK-NEXT: subi16 sp, sp, 12
292+
; CHECK-NEXT: .cfi_def_cfa_offset 12
293+
; CHECK-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
294+
; CHECK-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
295+
; CHECK-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill
296+
; CHECK-NEXT: .cfi_offset l1, -4
297+
; CHECK-NEXT: .cfi_offset l0, -8
298+
; CHECK-NEXT: .cfi_offset lr, -12
299+
; CHECK-NEXT: .cfi_def_cfa_offset 12
300+
; CHECK-NEXT: mov16 l0, a2
301+
; CHECK-NEXT: mov16 l1, a1
302+
; CHECK-NEXT: jsri32 [.LCPI20_0]
303+
; CHECK-NEXT: subi32 a1, l1, 10
304+
; CHECK-NEXT: btsti16 a0, 0
305+
; CHECK-NEXT: movt32 l0, a1
306+
; CHECK-NEXT: mov16 a0, l0
307+
; CHECK-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload
308+
; CHECK-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload
309+
; CHECK-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
310+
; CHECK-NEXT: addi16 sp, sp, 12
311+
; CHECK-NEXT: rts16
312+
; CHECK-NEXT: .p2align 1
313+
; CHECK-NEXT: # %bb.1:
314+
; CHECK-NEXT: .p2align 2, 0x0
315+
; CHECK-NEXT: .LCPI20_0:
316+
; CHECK-NEXT: .long check_val
317+
%t3 = tail call i1 @check_val(i32 %t0)
318+
%t4 = sub i32 %t1, 10
319+
%t5 = select i1 %t3, i32 %t4, i32 %t2
320+
ret i32 %t5
321+
}
322+
323+
define i32 @select_by_call_f(i32 %t0, i32 %t1, i32 %t2) {
324+
; CHECK-LABEL: select_by_call_f:
325+
; CHECK: # %bb.0:
326+
; CHECK-NEXT: subi16 sp, sp, 12
327+
; CHECK-NEXT: .cfi_def_cfa_offset 12
328+
; CHECK-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
329+
; CHECK-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
330+
; CHECK-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill
331+
; CHECK-NEXT: .cfi_offset l1, -4
332+
; CHECK-NEXT: .cfi_offset l0, -8
333+
; CHECK-NEXT: .cfi_offset lr, -12
334+
; CHECK-NEXT: .cfi_def_cfa_offset 12
335+
; CHECK-NEXT: mov16 l0, a2
336+
; CHECK-NEXT: mov16 l1, a1
337+
; CHECK-NEXT: jsri32 [.LCPI21_0]
338+
; CHECK-NEXT: subi32 a1, l1, 10
339+
; CHECK-NEXT: btsti16 a0, 0
340+
; CHECK-NEXT: movt32 a1, l0
341+
; CHECK-NEXT: mov16 a0, a1
342+
; CHECK-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload
343+
; CHECK-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload
344+
; CHECK-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
345+
; CHECK-NEXT: addi16 sp, sp, 12
346+
; CHECK-NEXT: rts16
347+
; CHECK-NEXT: .p2align 1
348+
; CHECK-NEXT: # %bb.1:
349+
; CHECK-NEXT: .p2align 2, 0x0
350+
; CHECK-NEXT: .LCPI21_0:
351+
; CHECK-NEXT: .long check_val
352+
%t3 = tail call i1 @check_val(i32 %t0)
353+
%t4 = sub i32 %t1, 10
354+
%t5 = select i1 %t3, i32 %t2, i32 %t4
355+
ret i32 %t5
356+
}
357+
358+
declare i1 @check_val(i32)

0 commit comments

Comments
 (0)