Skip to content

Commit 1888dc9

Browse files
committed
[AArch64] Add tests for i128 comparison; NFC
Baseline tests for D135302.
1 parent 54cdc03 commit 1888dc9

File tree

1 file changed

+371
-0
lines changed

1 file changed

+371
-0
lines changed

llvm/test/CodeGen/AArch64/i128-cmp.ll

Lines changed: 371 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,371 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -mtriple=aarch64-uknown-uknown -verify-machineinstrs -o - %s | FileCheck %s
3+
4+
declare void @call()
5+
6+
define i1 @cmp_i128_eq(i128 %a, i128 %b) {
7+
; CHECK-LABEL: cmp_i128_eq:
8+
; CHECK: // %bb.0:
9+
; CHECK-NEXT: eor x8, x1, x3
10+
; CHECK-NEXT: eor x9, x0, x2
11+
; CHECK-NEXT: orr x8, x9, x8
12+
; CHECK-NEXT: cmp x8, #0
13+
; CHECK-NEXT: cset w0, eq
14+
; CHECK-NEXT: ret
15+
%cmp = icmp eq i128 %a, %b
16+
ret i1 %cmp
17+
}
18+
19+
define i1 @cmp_i128_ne(i128 %a, i128 %b) {
20+
; CHECK-LABEL: cmp_i128_ne:
21+
; CHECK: // %bb.0:
22+
; CHECK-NEXT: eor x8, x1, x3
23+
; CHECK-NEXT: eor x9, x0, x2
24+
; CHECK-NEXT: orr x8, x9, x8
25+
; CHECK-NEXT: cmp x8, #0
26+
; CHECK-NEXT: cset w0, ne
27+
; CHECK-NEXT: ret
28+
%cmp = icmp ne i128 %a, %b
29+
ret i1 %cmp
30+
}
31+
32+
define i1 @cmp_i128_ugt(i128 %a, i128 %b) {
33+
; CHECK-LABEL: cmp_i128_ugt:
34+
; CHECK: // %bb.0:
35+
; CHECK-NEXT: cmp x0, x2
36+
; CHECK-NEXT: cset w8, hi
37+
; CHECK-NEXT: cmp x1, x3
38+
; CHECK-NEXT: cset w9, hi
39+
; CHECK-NEXT: csel w0, w8, w9, eq
40+
; CHECK-NEXT: ret
41+
%cmp = icmp ugt i128 %a, %b
42+
ret i1 %cmp
43+
}
44+
45+
define i1 @cmp_i128_uge(i128 %a, i128 %b) {
46+
; CHECK-LABEL: cmp_i128_uge:
47+
; CHECK: // %bb.0:
48+
; CHECK-NEXT: cmp x0, x2
49+
; CHECK-NEXT: cset w8, hs
50+
; CHECK-NEXT: cmp x1, x3
51+
; CHECK-NEXT: cset w9, hs
52+
; CHECK-NEXT: csel w0, w8, w9, eq
53+
; CHECK-NEXT: ret
54+
%cmp = icmp uge i128 %a, %b
55+
ret i1 %cmp
56+
}
57+
58+
define i1 @cmp_i128_ult(i128 %a, i128 %b) {
59+
; CHECK-LABEL: cmp_i128_ult:
60+
; CHECK: // %bb.0:
61+
; CHECK-NEXT: cmp x0, x2
62+
; CHECK-NEXT: cset w8, lo
63+
; CHECK-NEXT: cmp x1, x3
64+
; CHECK-NEXT: cset w9, lo
65+
; CHECK-NEXT: csel w0, w8, w9, eq
66+
; CHECK-NEXT: ret
67+
%cmp = icmp ult i128 %a, %b
68+
ret i1 %cmp
69+
}
70+
71+
define i1 @cmp_i128_ule(i128 %a, i128 %b) {
72+
; CHECK-LABEL: cmp_i128_ule:
73+
; CHECK: // %bb.0:
74+
; CHECK-NEXT: cmp x0, x2
75+
; CHECK-NEXT: cset w8, ls
76+
; CHECK-NEXT: cmp x1, x3
77+
; CHECK-NEXT: cset w9, ls
78+
; CHECK-NEXT: csel w0, w8, w9, eq
79+
; CHECK-NEXT: ret
80+
%cmp = icmp ule i128 %a, %b
81+
ret i1 %cmp
82+
}
83+
84+
define i1 @cmp_i128_sgt(i128 %a, i128 %b) {
85+
; CHECK-LABEL: cmp_i128_sgt:
86+
; CHECK: // %bb.0:
87+
; CHECK-NEXT: cmp x0, x2
88+
; CHECK-NEXT: cset w8, hi
89+
; CHECK-NEXT: cmp x1, x3
90+
; CHECK-NEXT: cset w9, gt
91+
; CHECK-NEXT: csel w0, w8, w9, eq
92+
; CHECK-NEXT: ret
93+
%cmp = icmp sgt i128 %a, %b
94+
ret i1 %cmp
95+
}
96+
97+
define i1 @cmp_i128_sge(i128 %a, i128 %b) {
98+
; CHECK-LABEL: cmp_i128_sge:
99+
; CHECK: // %bb.0:
100+
; CHECK-NEXT: cmp x0, x2
101+
; CHECK-NEXT: cset w8, hs
102+
; CHECK-NEXT: cmp x1, x3
103+
; CHECK-NEXT: cset w9, ge
104+
; CHECK-NEXT: csel w0, w8, w9, eq
105+
; CHECK-NEXT: ret
106+
%cmp = icmp sge i128 %a, %b
107+
ret i1 %cmp
108+
}
109+
110+
define i1 @cmp_i128_slt(i128 %a, i128 %b) {
111+
; CHECK-LABEL: cmp_i128_slt:
112+
; CHECK: // %bb.0:
113+
; CHECK-NEXT: cmp x0, x2
114+
; CHECK-NEXT: cset w8, lo
115+
; CHECK-NEXT: cmp x1, x3
116+
; CHECK-NEXT: cset w9, lt
117+
; CHECK-NEXT: csel w0, w8, w9, eq
118+
; CHECK-NEXT: ret
119+
%cmp = icmp slt i128 %a, %b
120+
ret i1 %cmp
121+
}
122+
123+
define i1 @cmp_i128_sle(i128 %a, i128 %b) {
124+
; CHECK-LABEL: cmp_i128_sle:
125+
; CHECK: // %bb.0:
126+
; CHECK-NEXT: cmp x0, x2
127+
; CHECK-NEXT: cset w8, ls
128+
; CHECK-NEXT: cmp x1, x3
129+
; CHECK-NEXT: cset w9, le
130+
; CHECK-NEXT: csel w0, w8, w9, eq
131+
; CHECK-NEXT: ret
132+
%cmp = icmp sle i128 %a, %b
133+
ret i1 %cmp
134+
}
135+
136+
define void @br_on_cmp_i128_eq(i128 %a, i128 %b) nounwind {
137+
; CHECK-LABEL: br_on_cmp_i128_eq:
138+
; CHECK: // %bb.0:
139+
; CHECK-NEXT: eor x8, x1, x3
140+
; CHECK-NEXT: eor x9, x0, x2
141+
; CHECK-NEXT: orr x8, x9, x8
142+
; CHECK-NEXT: cbnz x8, .LBB10_2
143+
; CHECK-NEXT: // %bb.1: // %call
144+
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
145+
; CHECK-NEXT: bl call
146+
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
147+
; CHECK-NEXT: .LBB10_2: // %exit
148+
; CHECK-NEXT: ret
149+
%cmp = icmp eq i128 %a, %b
150+
br i1 %cmp, label %call, label %exit
151+
call:
152+
call void @call()
153+
br label %exit
154+
exit:
155+
ret void
156+
}
157+
158+
define void @br_on_cmp_i128_ne(i128 %a, i128 %b) nounwind {
159+
; CHECK-LABEL: br_on_cmp_i128_ne:
160+
; CHECK: // %bb.0:
161+
; CHECK-NEXT: eor x8, x1, x3
162+
; CHECK-NEXT: eor x9, x0, x2
163+
; CHECK-NEXT: orr x8, x9, x8
164+
; CHECK-NEXT: cbz x8, .LBB11_2
165+
; CHECK-NEXT: // %bb.1: // %call
166+
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
167+
; CHECK-NEXT: bl call
168+
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
169+
; CHECK-NEXT: .LBB11_2: // %exit
170+
; CHECK-NEXT: ret
171+
%cmp = icmp ne i128 %a, %b
172+
br i1 %cmp, label %call, label %exit
173+
call:
174+
call void @call()
175+
br label %exit
176+
exit:
177+
ret void
178+
}
179+
180+
define void @br_on_cmp_i128_ugt(i128 %a, i128 %b) nounwind {
181+
; CHECK-LABEL: br_on_cmp_i128_ugt:
182+
; CHECK: // %bb.0:
183+
; CHECK-NEXT: cmp x0, x2
184+
; CHECK-NEXT: cset w8, ls
185+
; CHECK-NEXT: cmp x1, x3
186+
; CHECK-NEXT: cset w9, ls
187+
; CHECK-NEXT: csel w8, w8, w9, eq
188+
; CHECK-NEXT: tbnz w8, #0, .LBB12_2
189+
; CHECK-NEXT: // %bb.1: // %call
190+
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
191+
; CHECK-NEXT: bl call
192+
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
193+
; CHECK-NEXT: .LBB12_2: // %exit
194+
; CHECK-NEXT: ret
195+
%cmp = icmp ugt i128 %a, %b
196+
br i1 %cmp, label %call, label %exit
197+
call:
198+
call void @call()
199+
br label %exit
200+
exit:
201+
ret void
202+
}
203+
204+
define void @br_on_cmp_i128_uge(i128 %a, i128 %b) nounwind {
205+
; CHECK-LABEL: br_on_cmp_i128_uge:
206+
; CHECK: // %bb.0:
207+
; CHECK-NEXT: cmp x0, x2
208+
; CHECK-NEXT: cset w8, lo
209+
; CHECK-NEXT: cmp x1, x3
210+
; CHECK-NEXT: cset w9, lo
211+
; CHECK-NEXT: csel w8, w8, w9, eq
212+
; CHECK-NEXT: tbnz w8, #0, .LBB13_2
213+
; CHECK-NEXT: // %bb.1: // %call
214+
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
215+
; CHECK-NEXT: bl call
216+
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
217+
; CHECK-NEXT: .LBB13_2: // %exit
218+
; CHECK-NEXT: ret
219+
%cmp = icmp uge i128 %a, %b
220+
br i1 %cmp, label %call, label %exit
221+
call:
222+
call void @call()
223+
br label %exit
224+
exit:
225+
ret void
226+
}
227+
228+
define void @br_on_cmp_i128_ult(i128 %a, i128 %b) nounwind {
229+
; CHECK-LABEL: br_on_cmp_i128_ult:
230+
; CHECK: // %bb.0:
231+
; CHECK-NEXT: cmp x0, x2
232+
; CHECK-NEXT: cset w8, hs
233+
; CHECK-NEXT: cmp x1, x3
234+
; CHECK-NEXT: cset w9, hs
235+
; CHECK-NEXT: csel w8, w8, w9, eq
236+
; CHECK-NEXT: tbnz w8, #0, .LBB14_2
237+
; CHECK-NEXT: // %bb.1: // %call
238+
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
239+
; CHECK-NEXT: bl call
240+
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
241+
; CHECK-NEXT: .LBB14_2: // %exit
242+
; CHECK-NEXT: ret
243+
%cmp = icmp ult i128 %a, %b
244+
br i1 %cmp, label %call, label %exit
245+
call:
246+
call void @call()
247+
br label %exit
248+
exit:
249+
ret void
250+
}
251+
252+
define void @br_on_cmp_i128_ule(i128 %a, i128 %b) nounwind {
253+
; CHECK-LABEL: br_on_cmp_i128_ule:
254+
; CHECK: // %bb.0:
255+
; CHECK-NEXT: cmp x0, x2
256+
; CHECK-NEXT: cset w8, hi
257+
; CHECK-NEXT: cmp x1, x3
258+
; CHECK-NEXT: cset w9, hi
259+
; CHECK-NEXT: csel w8, w8, w9, eq
260+
; CHECK-NEXT: tbnz w8, #0, .LBB15_2
261+
; CHECK-NEXT: // %bb.1: // %call
262+
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
263+
; CHECK-NEXT: bl call
264+
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
265+
; CHECK-NEXT: .LBB15_2: // %exit
266+
; CHECK-NEXT: ret
267+
%cmp = icmp ule i128 %a, %b
268+
br i1 %cmp, label %call, label %exit
269+
call:
270+
call void @call()
271+
br label %exit
272+
exit:
273+
ret void
274+
}
275+
276+
define void @br_on_cmp_i128_sgt(i128 %a, i128 %b) nounwind {
277+
; CHECK-LABEL: br_on_cmp_i128_sgt:
278+
; CHECK: // %bb.0:
279+
; CHECK-NEXT: cmp x0, x2
280+
; CHECK-NEXT: cset w8, ls
281+
; CHECK-NEXT: cmp x1, x3
282+
; CHECK-NEXT: cset w9, le
283+
; CHECK-NEXT: csel w8, w8, w9, eq
284+
; CHECK-NEXT: tbnz w8, #0, .LBB16_2
285+
; CHECK-NEXT: // %bb.1: // %call
286+
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
287+
; CHECK-NEXT: bl call
288+
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
289+
; CHECK-NEXT: .LBB16_2: // %exit
290+
; CHECK-NEXT: ret
291+
%cmp = icmp sgt i128 %a, %b
292+
br i1 %cmp, label %call, label %exit
293+
call:
294+
call void @call()
295+
br label %exit
296+
exit:
297+
ret void
298+
}
299+
300+
define void @br_on_cmp_i128_sge(i128 %a, i128 %b) nounwind {
301+
; CHECK-LABEL: br_on_cmp_i128_sge:
302+
; CHECK: // %bb.0:
303+
; CHECK-NEXT: cmp x0, x2
304+
; CHECK-NEXT: cset w8, lo
305+
; CHECK-NEXT: cmp x1, x3
306+
; CHECK-NEXT: cset w9, lt
307+
; CHECK-NEXT: csel w8, w8, w9, eq
308+
; CHECK-NEXT: tbnz w8, #0, .LBB17_2
309+
; CHECK-NEXT: // %bb.1: // %call
310+
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
311+
; CHECK-NEXT: bl call
312+
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
313+
; CHECK-NEXT: .LBB17_2: // %exit
314+
; CHECK-NEXT: ret
315+
%cmp = icmp sge i128 %a, %b
316+
br i1 %cmp, label %call, label %exit
317+
call:
318+
call void @call()
319+
br label %exit
320+
exit:
321+
ret void
322+
}
323+
324+
define void @br_on_cmp_i128_slt(i128 %a, i128 %b) nounwind {
325+
; CHECK-LABEL: br_on_cmp_i128_slt:
326+
; CHECK: // %bb.0:
327+
; CHECK-NEXT: cmp x0, x2
328+
; CHECK-NEXT: cset w8, hs
329+
; CHECK-NEXT: cmp x1, x3
330+
; CHECK-NEXT: cset w9, ge
331+
; CHECK-NEXT: csel w8, w8, w9, eq
332+
; CHECK-NEXT: tbnz w8, #0, .LBB18_2
333+
; CHECK-NEXT: // %bb.1: // %call
334+
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
335+
; CHECK-NEXT: bl call
336+
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
337+
; CHECK-NEXT: .LBB18_2: // %exit
338+
; CHECK-NEXT: ret
339+
%cmp = icmp slt i128 %a, %b
340+
br i1 %cmp, label %call, label %exit
341+
call:
342+
call void @call()
343+
br label %exit
344+
exit:
345+
ret void
346+
}
347+
348+
define void @br_on_cmp_i128_sle(i128 %a, i128 %b) nounwind {
349+
; CHECK-LABEL: br_on_cmp_i128_sle:
350+
; CHECK: // %bb.0:
351+
; CHECK-NEXT: cmp x0, x2
352+
; CHECK-NEXT: cset w8, hi
353+
; CHECK-NEXT: cmp x1, x3
354+
; CHECK-NEXT: cset w9, gt
355+
; CHECK-NEXT: csel w8, w8, w9, eq
356+
; CHECK-NEXT: tbnz w8, #0, .LBB19_2
357+
; CHECK-NEXT: // %bb.1: // %call
358+
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
359+
; CHECK-NEXT: bl call
360+
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
361+
; CHECK-NEXT: .LBB19_2: // %exit
362+
; CHECK-NEXT: ret
363+
%cmp = icmp sle i128 %a, %b
364+
br i1 %cmp, label %call, label %exit
365+
call:
366+
call void @call()
367+
br label %exit
368+
exit:
369+
ret void
370+
}
371+

0 commit comments

Comments
 (0)