xref: /llvm-project/llvm/test/CodeGen/AArch64/scmp.ll (revision de1a423c2356d2040cab74e657ed024bf9ce8517)
1995835feSPoseydon42; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
22d2d6853SThorsten Schütt; RUN: llc -mtriple=aarch64 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD
3823eab2bSDavid Green; RUN: llc -mtriple=aarch64 -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI
4995835feSPoseydon42
5995835feSPoseydon42define i8 @scmp.8.8(i8 %x, i8 %y) nounwind {
62d2d6853SThorsten Schütt; CHECK-SD-LABEL: scmp.8.8:
72d2d6853SThorsten Schütt; CHECK-SD:       // %bb.0:
82d2d6853SThorsten Schütt; CHECK-SD-NEXT:    sxtb w8, w0
92d2d6853SThorsten Schütt; CHECK-SD-NEXT:    cmp w8, w1, sxtb
102d2d6853SThorsten Schütt; CHECK-SD-NEXT:    cset w8, gt
112d2d6853SThorsten Schütt; CHECK-SD-NEXT:    csinv w0, w8, wzr, ge
122d2d6853SThorsten Schütt; CHECK-SD-NEXT:    ret
132d2d6853SThorsten Schütt;
142d2d6853SThorsten Schütt; CHECK-GI-LABEL: scmp.8.8:
152d2d6853SThorsten Schütt; CHECK-GI:       // %bb.0:
162d2d6853SThorsten Schütt; CHECK-GI-NEXT:    sxtb w8, w0
172d2d6853SThorsten Schütt; CHECK-GI-NEXT:    sxtb w9, w1
182d2d6853SThorsten Schütt; CHECK-GI-NEXT:    cmp w8, w9
192d2d6853SThorsten Schütt; CHECK-GI-NEXT:    cset w8, gt
202d2d6853SThorsten Schütt; CHECK-GI-NEXT:    csinv w0, w8, wzr, ge
212d2d6853SThorsten Schütt; CHECK-GI-NEXT:    ret
22995835feSPoseydon42  %1 = call i8 @llvm.scmp(i8 %x, i8 %y)
23995835feSPoseydon42  ret i8 %1
24995835feSPoseydon42}
25995835feSPoseydon42
26995835feSPoseydon42define i8 @scmp.8.16(i16 %x, i16 %y) nounwind {
272d2d6853SThorsten Schütt; CHECK-SD-LABEL: scmp.8.16:
282d2d6853SThorsten Schütt; CHECK-SD:       // %bb.0:
292d2d6853SThorsten Schütt; CHECK-SD-NEXT:    sxth w8, w0
302d2d6853SThorsten Schütt; CHECK-SD-NEXT:    cmp w8, w1, sxth
312d2d6853SThorsten Schütt; CHECK-SD-NEXT:    cset w8, gt
322d2d6853SThorsten Schütt; CHECK-SD-NEXT:    csinv w0, w8, wzr, ge
332d2d6853SThorsten Schütt; CHECK-SD-NEXT:    ret
342d2d6853SThorsten Schütt;
352d2d6853SThorsten Schütt; CHECK-GI-LABEL: scmp.8.16:
362d2d6853SThorsten Schütt; CHECK-GI:       // %bb.0:
372d2d6853SThorsten Schütt; CHECK-GI-NEXT:    sxth w8, w0
382d2d6853SThorsten Schütt; CHECK-GI-NEXT:    sxth w9, w1
392d2d6853SThorsten Schütt; CHECK-GI-NEXT:    cmp w8, w9
402d2d6853SThorsten Schütt; CHECK-GI-NEXT:    cset w8, gt
412d2d6853SThorsten Schütt; CHECK-GI-NEXT:    csinv w0, w8, wzr, ge
422d2d6853SThorsten Schütt; CHECK-GI-NEXT:    ret
43995835feSPoseydon42  %1 = call i8 @llvm.scmp(i16 %x, i16 %y)
44995835feSPoseydon42  ret i8 %1
45995835feSPoseydon42}
46995835feSPoseydon42
47995835feSPoseydon42define i8 @scmp.8.32(i32 %x, i32 %y) nounwind {
48995835feSPoseydon42; CHECK-LABEL: scmp.8.32:
49995835feSPoseydon42; CHECK:       // %bb.0:
50995835feSPoseydon42; CHECK-NEXT:    cmp w0, w1
51995835feSPoseydon42; CHECK-NEXT:    cset w8, gt
52995835feSPoseydon42; CHECK-NEXT:    csinv w0, w8, wzr, ge
53995835feSPoseydon42; CHECK-NEXT:    ret
54995835feSPoseydon42  %1 = call i8 @llvm.scmp(i32 %x, i32 %y)
55995835feSPoseydon42  ret i8 %1
56995835feSPoseydon42}
57995835feSPoseydon42
58995835feSPoseydon42define i8 @scmp.8.64(i64 %x, i64 %y) nounwind {
59995835feSPoseydon42; CHECK-LABEL: scmp.8.64:
60995835feSPoseydon42; CHECK:       // %bb.0:
61995835feSPoseydon42; CHECK-NEXT:    cmp x0, x1
62995835feSPoseydon42; CHECK-NEXT:    cset w8, gt
63995835feSPoseydon42; CHECK-NEXT:    csinv w0, w8, wzr, ge
64995835feSPoseydon42; CHECK-NEXT:    ret
65995835feSPoseydon42  %1 = call i8 @llvm.scmp(i64 %x, i64 %y)
66995835feSPoseydon42  ret i8 %1
67995835feSPoseydon42}
68995835feSPoseydon42
69995835feSPoseydon42define i8 @scmp.8.128(i128 %x, i128 %y) nounwind {
702d2d6853SThorsten Schütt; CHECK-SD-LABEL: scmp.8.128:
712d2d6853SThorsten Schütt; CHECK-SD:       // %bb.0:
722d2d6853SThorsten Schütt; CHECK-SD-NEXT:    cmp x2, x0
732d2d6853SThorsten Schütt; CHECK-SD-NEXT:    sbcs xzr, x3, x1
742d2d6853SThorsten Schütt; CHECK-SD-NEXT:    cset w8, lt
752d2d6853SThorsten Schütt; CHECK-SD-NEXT:    cmp x0, x2
762d2d6853SThorsten Schütt; CHECK-SD-NEXT:    sbcs xzr, x1, x3
772d2d6853SThorsten Schütt; CHECK-SD-NEXT:    csinv w0, w8, wzr, ge
782d2d6853SThorsten Schütt; CHECK-SD-NEXT:    ret
792d2d6853SThorsten Schütt;
802d2d6853SThorsten Schütt; CHECK-GI-LABEL: scmp.8.128:
812d2d6853SThorsten Schütt; CHECK-GI:       // %bb.0:
822d2d6853SThorsten Schütt; CHECK-GI-NEXT:    cmp x0, x2
837ece560aSCraig Topper; CHECK-GI-NEXT:    cset w8, hi
842d2d6853SThorsten Schütt; CHECK-GI-NEXT:    cmp x1, x3
857ece560aSCraig Topper; CHECK-GI-NEXT:    cset w9, gt
867ece560aSCraig Topper; CHECK-GI-NEXT:    csel w8, w8, w9, eq
872d2d6853SThorsten Schütt; CHECK-GI-NEXT:    cmp x0, x2
887ece560aSCraig Topper; CHECK-GI-NEXT:    cset w9, lo
892d2d6853SThorsten Schütt; CHECK-GI-NEXT:    cmp x1, x3
907ece560aSCraig Topper; CHECK-GI-NEXT:    cset w10, lt
917ece560aSCraig Topper; CHECK-GI-NEXT:    csel w9, w9, w10, eq
92*de1a423cSCraig Topper; CHECK-GI-NEXT:    tst w8, #0x1
93*de1a423cSCraig Topper; CHECK-GI-NEXT:    cset w8, ne
942d2d6853SThorsten Schütt; CHECK-GI-NEXT:    tst w9, #0x1
952d2d6853SThorsten Schütt; CHECK-GI-NEXT:    csinv w0, w8, wzr, eq
962d2d6853SThorsten Schütt; CHECK-GI-NEXT:    ret
97995835feSPoseydon42  %1 = call i8 @llvm.scmp(i128 %x, i128 %y)
98995835feSPoseydon42  ret i8 %1
99995835feSPoseydon42}
100995835feSPoseydon42
101995835feSPoseydon42define i32 @scmp.32.32(i32 %x, i32 %y) nounwind {
102995835feSPoseydon42; CHECK-LABEL: scmp.32.32:
103995835feSPoseydon42; CHECK:       // %bb.0:
104995835feSPoseydon42; CHECK-NEXT:    cmp w0, w1
105995835feSPoseydon42; CHECK-NEXT:    cset w8, gt
106995835feSPoseydon42; CHECK-NEXT:    csinv w0, w8, wzr, ge
107995835feSPoseydon42; CHECK-NEXT:    ret
108995835feSPoseydon42  %1 = call i32 @llvm.scmp(i32 %x, i32 %y)
109995835feSPoseydon42  ret i32 %1
110995835feSPoseydon42}
111995835feSPoseydon42
112995835feSPoseydon42define i32 @scmp.32.64(i64 %x, i64 %y) nounwind {
113995835feSPoseydon42; CHECK-LABEL: scmp.32.64:
114995835feSPoseydon42; CHECK:       // %bb.0:
115995835feSPoseydon42; CHECK-NEXT:    cmp x0, x1
116995835feSPoseydon42; CHECK-NEXT:    cset w8, gt
117995835feSPoseydon42; CHECK-NEXT:    csinv w0, w8, wzr, ge
118995835feSPoseydon42; CHECK-NEXT:    ret
119995835feSPoseydon42  %1 = call i32 @llvm.scmp(i64 %x, i64 %y)
120995835feSPoseydon42  ret i32 %1
121995835feSPoseydon42}
122995835feSPoseydon42
123995835feSPoseydon42define i64 @scmp.64.64(i64 %x, i64 %y) nounwind {
124995835feSPoseydon42; CHECK-LABEL: scmp.64.64:
125995835feSPoseydon42; CHECK:       // %bb.0:
126995835feSPoseydon42; CHECK-NEXT:    cmp x0, x1
127995835feSPoseydon42; CHECK-NEXT:    cset x8, gt
128995835feSPoseydon42; CHECK-NEXT:    csinv x0, x8, xzr, ge
129995835feSPoseydon42; CHECK-NEXT:    ret
130995835feSPoseydon42  %1 = call i64 @llvm.scmp(i64 %x, i64 %y)
131995835feSPoseydon42  ret i64 %1
132995835feSPoseydon42}
133823eab2bSDavid Green
134823eab2bSDavid Greendefine <8 x i8> @s_v8i8(<8 x i8> %a, <8 x i8> %b) {
135*de1a423cSCraig Topper; CHECK-LABEL: s_v8i8:
136*de1a423cSCraig Topper; CHECK:       // %bb.0: // %entry
137*de1a423cSCraig Topper; CHECK-NEXT:    cmgt v2.8b, v0.8b, v1.8b
138*de1a423cSCraig Topper; CHECK-NEXT:    cmgt v0.8b, v1.8b, v0.8b
139*de1a423cSCraig Topper; CHECK-NEXT:    sub v0.8b, v0.8b, v2.8b
140*de1a423cSCraig Topper; CHECK-NEXT:    ret
141823eab2bSDavid Greenentry:
142823eab2bSDavid Green  %c = call <8 x i8> @llvm.scmp(<8 x i8> %a, <8 x i8> %b)
143823eab2bSDavid Green  ret <8 x i8> %c
144823eab2bSDavid Green}
145823eab2bSDavid Green
146823eab2bSDavid Greendefine <16 x i8> @s_v16i8(<16 x i8> %a, <16 x i8> %b) {
147*de1a423cSCraig Topper; CHECK-LABEL: s_v16i8:
148*de1a423cSCraig Topper; CHECK:       // %bb.0: // %entry
149*de1a423cSCraig Topper; CHECK-NEXT:    cmgt v2.16b, v0.16b, v1.16b
150*de1a423cSCraig Topper; CHECK-NEXT:    cmgt v0.16b, v1.16b, v0.16b
151*de1a423cSCraig Topper; CHECK-NEXT:    sub v0.16b, v0.16b, v2.16b
152*de1a423cSCraig Topper; CHECK-NEXT:    ret
153823eab2bSDavid Greenentry:
154823eab2bSDavid Green  %c = call <16 x i8> @llvm.scmp(<16 x i8> %a, <16 x i8> %b)
155823eab2bSDavid Green  ret <16 x i8> %c
156823eab2bSDavid Green}
157823eab2bSDavid Green
158823eab2bSDavid Greendefine <4 x i16> @s_v4i16(<4 x i16> %a, <4 x i16> %b) {
159*de1a423cSCraig Topper; CHECK-LABEL: s_v4i16:
160*de1a423cSCraig Topper; CHECK:       // %bb.0: // %entry
161*de1a423cSCraig Topper; CHECK-NEXT:    cmgt v2.4h, v0.4h, v1.4h
162*de1a423cSCraig Topper; CHECK-NEXT:    cmgt v0.4h, v1.4h, v0.4h
163*de1a423cSCraig Topper; CHECK-NEXT:    sub v0.4h, v0.4h, v2.4h
164*de1a423cSCraig Topper; CHECK-NEXT:    ret
165823eab2bSDavid Greenentry:
166823eab2bSDavid Green  %c = call <4 x i16> @llvm.scmp(<4 x i16> %a, <4 x i16> %b)
167823eab2bSDavid Green  ret <4 x i16> %c
168823eab2bSDavid Green}
169823eab2bSDavid Green
170823eab2bSDavid Greendefine <8 x i16> @s_v8i16(<8 x i16> %a, <8 x i16> %b) {
171*de1a423cSCraig Topper; CHECK-LABEL: s_v8i16:
172*de1a423cSCraig Topper; CHECK:       // %bb.0: // %entry
173*de1a423cSCraig Topper; CHECK-NEXT:    cmgt v2.8h, v0.8h, v1.8h
174*de1a423cSCraig Topper; CHECK-NEXT:    cmgt v0.8h, v1.8h, v0.8h
175*de1a423cSCraig Topper; CHECK-NEXT:    sub v0.8h, v0.8h, v2.8h
176*de1a423cSCraig Topper; CHECK-NEXT:    ret
177823eab2bSDavid Greenentry:
178823eab2bSDavid Green  %c = call <8 x i16> @llvm.scmp(<8 x i16> %a, <8 x i16> %b)
179823eab2bSDavid Green  ret <8 x i16> %c
180823eab2bSDavid Green}
181823eab2bSDavid Green
182823eab2bSDavid Greendefine <16 x i16> @s_v16i16(<16 x i16> %a, <16 x i16> %b) {
183823eab2bSDavid Green; CHECK-SD-LABEL: s_v16i16:
184823eab2bSDavid Green; CHECK-SD:       // %bb.0: // %entry
185960c975aSDavid Green; CHECK-SD-NEXT:    cmgt v4.8h, v1.8h, v3.8h
186823eab2bSDavid Green; CHECK-SD-NEXT:    cmgt v5.8h, v0.8h, v2.8h
187823eab2bSDavid Green; CHECK-SD-NEXT:    cmgt v0.8h, v2.8h, v0.8h
188823eab2bSDavid Green; CHECK-SD-NEXT:    cmgt v1.8h, v3.8h, v1.8h
189960c975aSDavid Green; CHECK-SD-NEXT:    sub v0.8h, v0.8h, v5.8h
190960c975aSDavid Green; CHECK-SD-NEXT:    sub v1.8h, v1.8h, v4.8h
191823eab2bSDavid Green; CHECK-SD-NEXT:    ret
192823eab2bSDavid Green;
193823eab2bSDavid Green; CHECK-GI-LABEL: s_v16i16:
194823eab2bSDavid Green; CHECK-GI:       // %bb.0: // %entry
195*de1a423cSCraig Topper; CHECK-GI-NEXT:    cmgt v4.8h, v0.8h, v2.8h
196*de1a423cSCraig Topper; CHECK-GI-NEXT:    cmgt v5.8h, v1.8h, v3.8h
197823eab2bSDavid Green; CHECK-GI-NEXT:    cmgt v0.8h, v2.8h, v0.8h
198823eab2bSDavid Green; CHECK-GI-NEXT:    cmgt v1.8h, v3.8h, v1.8h
199*de1a423cSCraig Topper; CHECK-GI-NEXT:    sub v0.8h, v0.8h, v4.8h
200*de1a423cSCraig Topper; CHECK-GI-NEXT:    sub v1.8h, v1.8h, v5.8h
201823eab2bSDavid Green; CHECK-GI-NEXT:    ret
202823eab2bSDavid Greenentry:
203823eab2bSDavid Green  %c = call <16 x i16> @llvm.scmp(<16 x i16> %a, <16 x i16> %b)
204823eab2bSDavid Green  ret <16 x i16> %c
205823eab2bSDavid Green}
206823eab2bSDavid Green
207823eab2bSDavid Greendefine <2 x i32> @s_v2i32(<2 x i32> %a, <2 x i32> %b) {
208*de1a423cSCraig Topper; CHECK-LABEL: s_v2i32:
209*de1a423cSCraig Topper; CHECK:       // %bb.0: // %entry
210*de1a423cSCraig Topper; CHECK-NEXT:    cmgt v2.2s, v0.2s, v1.2s
211*de1a423cSCraig Topper; CHECK-NEXT:    cmgt v0.2s, v1.2s, v0.2s
212*de1a423cSCraig Topper; CHECK-NEXT:    sub v0.2s, v0.2s, v2.2s
213*de1a423cSCraig Topper; CHECK-NEXT:    ret
214823eab2bSDavid Greenentry:
215823eab2bSDavid Green  %c = call <2 x i32> @llvm.scmp(<2 x i32> %a, <2 x i32> %b)
216823eab2bSDavid Green  ret <2 x i32> %c
217823eab2bSDavid Green}
218823eab2bSDavid Green
219823eab2bSDavid Greendefine <4 x i32> @s_v4i32(<4 x i32> %a, <4 x i32> %b) {
220*de1a423cSCraig Topper; CHECK-LABEL: s_v4i32:
221*de1a423cSCraig Topper; CHECK:       // %bb.0: // %entry
222*de1a423cSCraig Topper; CHECK-NEXT:    cmgt v2.4s, v0.4s, v1.4s
223*de1a423cSCraig Topper; CHECK-NEXT:    cmgt v0.4s, v1.4s, v0.4s
224*de1a423cSCraig Topper; CHECK-NEXT:    sub v0.4s, v0.4s, v2.4s
225*de1a423cSCraig Topper; CHECK-NEXT:    ret
226823eab2bSDavid Greenentry:
227823eab2bSDavid Green  %c = call <4 x i32> @llvm.scmp(<4 x i32> %a, <4 x i32> %b)
228823eab2bSDavid Green  ret <4 x i32> %c
229823eab2bSDavid Green}
230823eab2bSDavid Green
231823eab2bSDavid Greendefine <8 x i32> @s_v8i32(<8 x i32> %a, <8 x i32> %b) {
232823eab2bSDavid Green; CHECK-SD-LABEL: s_v8i32:
233823eab2bSDavid Green; CHECK-SD:       // %bb.0: // %entry
234960c975aSDavid Green; CHECK-SD-NEXT:    cmgt v4.4s, v1.4s, v3.4s
235823eab2bSDavid Green; CHECK-SD-NEXT:    cmgt v5.4s, v0.4s, v2.4s
236823eab2bSDavid Green; CHECK-SD-NEXT:    cmgt v0.4s, v2.4s, v0.4s
237823eab2bSDavid Green; CHECK-SD-NEXT:    cmgt v1.4s, v3.4s, v1.4s
238960c975aSDavid Green; CHECK-SD-NEXT:    sub v0.4s, v0.4s, v5.4s
239960c975aSDavid Green; CHECK-SD-NEXT:    sub v1.4s, v1.4s, v4.4s
240823eab2bSDavid Green; CHECK-SD-NEXT:    ret
241823eab2bSDavid Green;
242823eab2bSDavid Green; CHECK-GI-LABEL: s_v8i32:
243823eab2bSDavid Green; CHECK-GI:       // %bb.0: // %entry
244*de1a423cSCraig Topper; CHECK-GI-NEXT:    cmgt v4.4s, v0.4s, v2.4s
245*de1a423cSCraig Topper; CHECK-GI-NEXT:    cmgt v5.4s, v1.4s, v3.4s
246823eab2bSDavid Green; CHECK-GI-NEXT:    cmgt v0.4s, v2.4s, v0.4s
247823eab2bSDavid Green; CHECK-GI-NEXT:    cmgt v1.4s, v3.4s, v1.4s
248*de1a423cSCraig Topper; CHECK-GI-NEXT:    sub v0.4s, v0.4s, v4.4s
249*de1a423cSCraig Topper; CHECK-GI-NEXT:    sub v1.4s, v1.4s, v5.4s
250823eab2bSDavid Green; CHECK-GI-NEXT:    ret
251823eab2bSDavid Greenentry:
252823eab2bSDavid Green  %c = call <8 x i32> @llvm.scmp(<8 x i32> %a, <8 x i32> %b)
253823eab2bSDavid Green  ret <8 x i32> %c
254823eab2bSDavid Green}
255823eab2bSDavid Green
256823eab2bSDavid Greendefine <2 x i64> @s_v2i64(<2 x i64> %a, <2 x i64> %b) {
257*de1a423cSCraig Topper; CHECK-LABEL: s_v2i64:
258*de1a423cSCraig Topper; CHECK:       // %bb.0: // %entry
259*de1a423cSCraig Topper; CHECK-NEXT:    cmgt v2.2d, v0.2d, v1.2d
260*de1a423cSCraig Topper; CHECK-NEXT:    cmgt v0.2d, v1.2d, v0.2d
261*de1a423cSCraig Topper; CHECK-NEXT:    sub v0.2d, v0.2d, v2.2d
262*de1a423cSCraig Topper; CHECK-NEXT:    ret
263823eab2bSDavid Greenentry:
264823eab2bSDavid Green  %c = call <2 x i64> @llvm.scmp(<2 x i64> %a, <2 x i64> %b)
265823eab2bSDavid Green  ret <2 x i64> %c
266823eab2bSDavid Green}
267823eab2bSDavid Green
268823eab2bSDavid Greendefine <4 x i64> @s_v4i64(<4 x i64> %a, <4 x i64> %b) {
269823eab2bSDavid Green; CHECK-SD-LABEL: s_v4i64:
270823eab2bSDavid Green; CHECK-SD:       // %bb.0: // %entry
271960c975aSDavid Green; CHECK-SD-NEXT:    cmgt v4.2d, v1.2d, v3.2d
272960c975aSDavid Green; CHECK-SD-NEXT:    cmgt v5.2d, v0.2d, v2.2d
273823eab2bSDavid Green; CHECK-SD-NEXT:    cmgt v0.2d, v2.2d, v0.2d
274823eab2bSDavid Green; CHECK-SD-NEXT:    cmgt v1.2d, v3.2d, v1.2d
275960c975aSDavid Green; CHECK-SD-NEXT:    sub v0.2d, v0.2d, v5.2d
276960c975aSDavid Green; CHECK-SD-NEXT:    sub v1.2d, v1.2d, v4.2d
277823eab2bSDavid Green; CHECK-SD-NEXT:    ret
278823eab2bSDavid Green;
279823eab2bSDavid Green; CHECK-GI-LABEL: s_v4i64:
280823eab2bSDavid Green; CHECK-GI:       // %bb.0: // %entry
281823eab2bSDavid Green; CHECK-GI-NEXT:    cmgt v4.2d, v0.2d, v2.2d
282*de1a423cSCraig Topper; CHECK-GI-NEXT:    cmgt v5.2d, v1.2d, v3.2d
283823eab2bSDavid Green; CHECK-GI-NEXT:    cmgt v0.2d, v2.2d, v0.2d
284823eab2bSDavid Green; CHECK-GI-NEXT:    cmgt v1.2d, v3.2d, v1.2d
285*de1a423cSCraig Topper; CHECK-GI-NEXT:    sub v0.2d, v0.2d, v4.2d
286*de1a423cSCraig Topper; CHECK-GI-NEXT:    sub v1.2d, v1.2d, v5.2d
287823eab2bSDavid Green; CHECK-GI-NEXT:    ret
288823eab2bSDavid Greenentry:
289823eab2bSDavid Green  %c = call <4 x i64> @llvm.scmp(<4 x i64> %a, <4 x i64> %b)
290823eab2bSDavid Green  ret <4 x i64> %c
291823eab2bSDavid Green}
292823eab2bSDavid Green
293823eab2bSDavid Greendefine <16 x i8> @signOf_neon_scmp(<8 x i16> %s0_lo, <8 x i16> %s0_hi, <8 x i16> %s1_lo, <8 x i16> %s1_hi) {
294823eab2bSDavid Green; CHECK-SD-LABEL: signOf_neon_scmp:
295823eab2bSDavid Green; CHECK-SD:       // %bb.0: // %entry
296823eab2bSDavid Green; CHECK-SD-NEXT:    cmgt v4.8h, v1.8h, v3.8h
297823eab2bSDavid Green; CHECK-SD-NEXT:    cmgt v1.8h, v3.8h, v1.8h
298960c975aSDavid Green; CHECK-SD-NEXT:    cmgt v3.8h, v0.8h, v2.8h
299960c975aSDavid Green; CHECK-SD-NEXT:    cmgt v0.8h, v2.8h, v0.8h
300960c975aSDavid Green; CHECK-SD-NEXT:    sub v1.8h, v1.8h, v4.8h
301960c975aSDavid Green; CHECK-SD-NEXT:    sub v0.8h, v0.8h, v3.8h
302960c975aSDavid Green; CHECK-SD-NEXT:    uzp1 v0.16b, v0.16b, v1.16b
303823eab2bSDavid Green; CHECK-SD-NEXT:    ret
304823eab2bSDavid Green;
305823eab2bSDavid Green; CHECK-GI-LABEL: signOf_neon_scmp:
306823eab2bSDavid Green; CHECK-GI:       // %bb.0: // %entry
307823eab2bSDavid Green; CHECK-GI-NEXT:    cmgt v4.8h, v0.8h, v2.8h
308823eab2bSDavid Green; CHECK-GI-NEXT:    cmgt v5.8h, v1.8h, v3.8h
309823eab2bSDavid Green; CHECK-GI-NEXT:    cmgt v0.8h, v2.8h, v0.8h
310823eab2bSDavid Green; CHECK-GI-NEXT:    cmgt v1.8h, v3.8h, v1.8h
311823eab2bSDavid Green; CHECK-GI-NEXT:    uzp1 v0.16b, v0.16b, v1.16b
312*de1a423cSCraig Topper; CHECK-GI-NEXT:    uzp1 v1.16b, v4.16b, v5.16b
313823eab2bSDavid Green; CHECK-GI-NEXT:    shl v0.16b, v0.16b, #7
314*de1a423cSCraig Topper; CHECK-GI-NEXT:    shl v1.16b, v1.16b, #7
315823eab2bSDavid Green; CHECK-GI-NEXT:    sshr v0.16b, v0.16b, #7
316*de1a423cSCraig Topper; CHECK-GI-NEXT:    sshr v1.16b, v1.16b, #7
317*de1a423cSCraig Topper; CHECK-GI-NEXT:    sub v0.16b, v0.16b, v1.16b
318823eab2bSDavid Green; CHECK-GI-NEXT:    ret
319823eab2bSDavid Greenentry:
320823eab2bSDavid Green  %0 = shufflevector <8 x i16> %s0_lo, <8 x i16> %s0_hi, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
321823eab2bSDavid Green  %1 = shufflevector <8 x i16> %s1_lo, <8 x i16> %s1_hi, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
322823eab2bSDavid Green  %or.i = tail call <16 x i8> @llvm.scmp.v16i8.v16i16(<16 x i16> %0, <16 x i16> %1)
323823eab2bSDavid Green  ret <16 x i8> %or.i
324823eab2bSDavid Green}
325