xref: /llvm-project/llvm/test/CodeGen/RISCV/ucmp.ll (revision 14c4f28ec109ec84158d60a74d3d1b7bfa411c77)
1e094abdeSVolodymyr Vasylkun; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2e094abdeSVolodymyr Vasylkun; RUN: llc < %s -mtriple=riscv32 | FileCheck %s --check-prefix=RV32I
3e094abdeSVolodymyr Vasylkun; RUN: llc < %s -mtriple=riscv64 | FileCheck %s --check-prefix=RV64I
4e094abdeSVolodymyr Vasylkun
5e094abdeSVolodymyr Vasylkundefine i8 @ucmp.8.8(i8 zeroext %x, i8 zeroext %y) nounwind {
6e094abdeSVolodymyr Vasylkun; RV32I-LABEL: ucmp.8.8:
7e094abdeSVolodymyr Vasylkun; RV32I:       # %bb.0:
8e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a2, a0, a1
9e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a0, a1, a0
10e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a0, a2
11e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
12e094abdeSVolodymyr Vasylkun;
13e094abdeSVolodymyr Vasylkun; RV64I-LABEL: ucmp.8.8:
14e094abdeSVolodymyr Vasylkun; RV64I:       # %bb.0:
15e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a2, a0, a1
16e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a0, a1, a0
17e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sub a0, a0, a2
18e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    ret
19e094abdeSVolodymyr Vasylkun  %1 = call i8 @llvm.ucmp(i8 %x, i8 %y)
20e094abdeSVolodymyr Vasylkun  ret i8 %1
21e094abdeSVolodymyr Vasylkun}
22e094abdeSVolodymyr Vasylkun
23e094abdeSVolodymyr Vasylkundefine i8 @ucmp.8.16(i16 zeroext %x, i16 zeroext %y) nounwind {
24e094abdeSVolodymyr Vasylkun; RV32I-LABEL: ucmp.8.16:
25e094abdeSVolodymyr Vasylkun; RV32I:       # %bb.0:
26e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a2, a0, a1
27e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a0, a1, a0
28e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a0, a2
29e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
30e094abdeSVolodymyr Vasylkun;
31e094abdeSVolodymyr Vasylkun; RV64I-LABEL: ucmp.8.16:
32e094abdeSVolodymyr Vasylkun; RV64I:       # %bb.0:
33e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a2, a0, a1
34e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a0, a1, a0
35e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sub a0, a0, a2
36e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    ret
37e094abdeSVolodymyr Vasylkun  %1 = call i8 @llvm.ucmp(i16 %x, i16 %y)
38e094abdeSVolodymyr Vasylkun  ret i8 %1
39e094abdeSVolodymyr Vasylkun}
40e094abdeSVolodymyr Vasylkun
41e094abdeSVolodymyr Vasylkundefine i8 @ucmp.8.32(i32 %x, i32 %y) nounwind {
42e094abdeSVolodymyr Vasylkun; RV32I-LABEL: ucmp.8.32:
43e094abdeSVolodymyr Vasylkun; RV32I:       # %bb.0:
44e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a2, a0, a1
45e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a0, a1, a0
46e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a0, a2
47e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
48e094abdeSVolodymyr Vasylkun;
49e094abdeSVolodymyr Vasylkun; RV64I-LABEL: ucmp.8.32:
50e094abdeSVolodymyr Vasylkun; RV64I:       # %bb.0:
51307d1249SCraig Topper; RV64I-NEXT:    sext.w a1, a1
52307d1249SCraig Topper; RV64I-NEXT:    sext.w a0, a0
53e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a2, a0, a1
54e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a0, a1, a0
55e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sub a0, a0, a2
56e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    ret
57e094abdeSVolodymyr Vasylkun  %1 = call i8 @llvm.ucmp(i32 %x, i32 %y)
58e094abdeSVolodymyr Vasylkun  ret i8 %1
59e094abdeSVolodymyr Vasylkun}
60e094abdeSVolodymyr Vasylkun
61e094abdeSVolodymyr Vasylkundefine i8 @ucmp.8.64(i64 %x, i64 %y) nounwind {
62e094abdeSVolodymyr Vasylkun; RV32I-LABEL: ucmp.8.64:
63e094abdeSVolodymyr Vasylkun; RV32I:       # %bb.0:
64e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    beq a1, a3, .LBB3_2
65e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  # %bb.1:
66e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a4, a1, a3
67e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a0, a3, a1
68e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a0, a4
69e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
70e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  .LBB3_2:
71e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a4, a0, a2
72e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a0, a2, a0
73e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a0, a4
74e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
75e094abdeSVolodymyr Vasylkun;
76e094abdeSVolodymyr Vasylkun; RV64I-LABEL: ucmp.8.64:
77e094abdeSVolodymyr Vasylkun; RV64I:       # %bb.0:
78e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a2, a0, a1
79e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a0, a1, a0
80e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sub a0, a0, a2
81e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    ret
82e094abdeSVolodymyr Vasylkun  %1 = call i8 @llvm.ucmp(i64 %x, i64 %y)
83e094abdeSVolodymyr Vasylkun  ret i8 %1
84e094abdeSVolodymyr Vasylkun}
85e094abdeSVolodymyr Vasylkun
86e094abdeSVolodymyr Vasylkundefine i8 @ucmp.8.128(i128 %x, i128 %y) nounwind {
87e094abdeSVolodymyr Vasylkun; RV32I-LABEL: ucmp.8.128:
88e094abdeSVolodymyr Vasylkun; RV32I:       # %bb.0:
89e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    lw a2, 4(a1)
90e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    lw a4, 8(a1)
91e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    lw a5, 12(a1)
92e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    lw a6, 12(a0)
93*14c4f28eSAlex Bradbury; RV32I-NEXT:    lw a3, 4(a0)
94e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    lw a7, 8(a0)
95e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    beq a6, a5, .LBB4_2
96e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  # %bb.1:
97e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu t2, a6, a5
98e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    j .LBB4_3
99e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  .LBB4_2:
100e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu t2, a7, a4
101e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  .LBB4_3:
102e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    lw a1, 0(a1)
103e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    lw t0, 0(a0)
104e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    beq a3, a2, .LBB4_5
105e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  # %bb.4:
106e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a0, a3, a2
107e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    j .LBB4_6
108e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  .LBB4_5:
109e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a0, t0, a1
110e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  .LBB4_6:
111e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    xor t1, a6, a5
112e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    xor t3, a7, a4
113e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    or t1, t3, t1
114e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    beqz t1, .LBB4_8
115e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  # %bb.7:
116e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    mv a0, t2
117e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  .LBB4_8:
118e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    beq a6, a5, .LBB4_11
119e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  # %bb.9:
120e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a4, a5, a6
121e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    bne a3, a2, .LBB4_12
122e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  .LBB4_10:
123e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a1, a1, t0
124e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    bnez t1, .LBB4_13
125e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    j .LBB4_14
126e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  .LBB4_11:
127e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a4, a4, a7
128e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    beq a3, a2, .LBB4_10
129e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  .LBB4_12:
130e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a1, a2, a3
131e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    beqz t1, .LBB4_14
132e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  .LBB4_13:
133e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    mv a1, a4
134e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  .LBB4_14:
135e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a1, a0
136e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
137e094abdeSVolodymyr Vasylkun;
138e094abdeSVolodymyr Vasylkun; RV64I-LABEL: ucmp.8.128:
139e094abdeSVolodymyr Vasylkun; RV64I:       # %bb.0:
140e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    beq a1, a3, .LBB4_2
141e094abdeSVolodymyr Vasylkun; RV64I-NEXT:  # %bb.1:
142e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a4, a1, a3
143e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a0, a3, a1
144e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sub a0, a0, a4
145e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    ret
146e094abdeSVolodymyr Vasylkun; RV64I-NEXT:  .LBB4_2:
147e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a4, a0, a2
148e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a0, a2, a0
149e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sub a0, a0, a4
150e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    ret
151e094abdeSVolodymyr Vasylkun  %1 = call i8 @llvm.ucmp(i128 %x, i128 %y)
152e094abdeSVolodymyr Vasylkun  ret i8 %1
153e094abdeSVolodymyr Vasylkun}
154e094abdeSVolodymyr Vasylkun
155e094abdeSVolodymyr Vasylkundefine i32 @ucmp.32.32(i32 %x, i32 %y) nounwind {
156e094abdeSVolodymyr Vasylkun; RV32I-LABEL: ucmp.32.32:
157e094abdeSVolodymyr Vasylkun; RV32I:       # %bb.0:
158e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a2, a0, a1
159e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a0, a1, a0
160e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a0, a2
161e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
162e094abdeSVolodymyr Vasylkun;
163e094abdeSVolodymyr Vasylkun; RV64I-LABEL: ucmp.32.32:
164e094abdeSVolodymyr Vasylkun; RV64I:       # %bb.0:
165307d1249SCraig Topper; RV64I-NEXT:    sext.w a1, a1
166307d1249SCraig Topper; RV64I-NEXT:    sext.w a0, a0
167307d1249SCraig Topper; RV64I-NEXT:    sltu a2, a0, a1
168307d1249SCraig Topper; RV64I-NEXT:    sltu a0, a1, a0
169307d1249SCraig Topper; RV64I-NEXT:    sub a0, a0, a2
170307d1249SCraig Topper; RV64I-NEXT:    ret
171307d1249SCraig Topper  %1 = call i32 @llvm.ucmp(i32 %x, i32 %y)
172307d1249SCraig Topper  ret i32 %1
173307d1249SCraig Topper}
174307d1249SCraig Topper
175307d1249SCraig Topperdefine i32 @ucmp.32.32_sext(i32 signext %x, i32 signext %y) nounwind {
176307d1249SCraig Topper; RV32I-LABEL: ucmp.32.32_sext:
177307d1249SCraig Topper; RV32I:       # %bb.0:
178307d1249SCraig Topper; RV32I-NEXT:    sltu a2, a0, a1
179307d1249SCraig Topper; RV32I-NEXT:    sltu a0, a1, a0
180307d1249SCraig Topper; RV32I-NEXT:    sub a0, a0, a2
181307d1249SCraig Topper; RV32I-NEXT:    ret
182307d1249SCraig Topper;
183307d1249SCraig Topper; RV64I-LABEL: ucmp.32.32_sext:
184307d1249SCraig Topper; RV64I:       # %bb.0:
185307d1249SCraig Topper; RV64I-NEXT:    sltu a2, a0, a1
186307d1249SCraig Topper; RV64I-NEXT:    sltu a0, a1, a0
187307d1249SCraig Topper; RV64I-NEXT:    sub a0, a0, a2
188307d1249SCraig Topper; RV64I-NEXT:    ret
189307d1249SCraig Topper  %1 = call i32 @llvm.ucmp(i32 %x, i32 %y)
190307d1249SCraig Topper  ret i32 %1
191307d1249SCraig Topper}
192307d1249SCraig Topper
193307d1249SCraig Topperdefine i32 @ucmp.32.32_zext(i32 zeroext %x, i32 zeroext %y) nounwind {
194307d1249SCraig Topper; RV32I-LABEL: ucmp.32.32_zext:
195307d1249SCraig Topper; RV32I:       # %bb.0:
196307d1249SCraig Topper; RV32I-NEXT:    sltu a2, a0, a1
197307d1249SCraig Topper; RV32I-NEXT:    sltu a0, a1, a0
198307d1249SCraig Topper; RV32I-NEXT:    sub a0, a0, a2
199307d1249SCraig Topper; RV32I-NEXT:    ret
200307d1249SCraig Topper;
201307d1249SCraig Topper; RV64I-LABEL: ucmp.32.32_zext:
202307d1249SCraig Topper; RV64I:       # %bb.0:
203e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a2, a0, a1
204e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a0, a1, a0
205e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sub a0, a0, a2
206e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    ret
207e094abdeSVolodymyr Vasylkun  %1 = call i32 @llvm.ucmp(i32 %x, i32 %y)
208e094abdeSVolodymyr Vasylkun  ret i32 %1
209e094abdeSVolodymyr Vasylkun}
210e094abdeSVolodymyr Vasylkun
211e094abdeSVolodymyr Vasylkundefine i32 @ucmp.32.64(i64 %x, i64 %y) nounwind {
212e094abdeSVolodymyr Vasylkun; RV32I-LABEL: ucmp.32.64:
213e094abdeSVolodymyr Vasylkun; RV32I:       # %bb.0:
214307d1249SCraig Topper; RV32I-NEXT:    beq a1, a3, .LBB8_2
215e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  # %bb.1:
216e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a4, a1, a3
217e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a0, a3, a1
218e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a0, a4
219e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
220307d1249SCraig Topper; RV32I-NEXT:  .LBB8_2:
221e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a4, a0, a2
222e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a0, a2, a0
223e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a0, a4
224e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
225e094abdeSVolodymyr Vasylkun;
226e094abdeSVolodymyr Vasylkun; RV64I-LABEL: ucmp.32.64:
227e094abdeSVolodymyr Vasylkun; RV64I:       # %bb.0:
228e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a2, a0, a1
229e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a0, a1, a0
230e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sub a0, a0, a2
231e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    ret
232e094abdeSVolodymyr Vasylkun  %1 = call i32 @llvm.ucmp(i64 %x, i64 %y)
233e094abdeSVolodymyr Vasylkun  ret i32 %1
234e094abdeSVolodymyr Vasylkun}
235e094abdeSVolodymyr Vasylkun
236e094abdeSVolodymyr Vasylkundefine i64 @ucmp.64.64(i64 %x, i64 %y) nounwind {
237e094abdeSVolodymyr Vasylkun; RV32I-LABEL: ucmp.64.64:
238e094abdeSVolodymyr Vasylkun; RV32I:       # %bb.0:
239307d1249SCraig Topper; RV32I-NEXT:    beq a1, a3, .LBB9_2
240e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  # %bb.1:
241e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a4, a1, a3
242e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a0, a3, a1
243307d1249SCraig Topper; RV32I-NEXT:    j .LBB9_3
244307d1249SCraig Topper; RV32I-NEXT:  .LBB9_2:
245e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a4, a0, a2
246e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a0, a2, a0
247307d1249SCraig Topper; RV32I-NEXT:  .LBB9_3:
248e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a0, a4
249e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    srai a1, a0, 31
250e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
251e094abdeSVolodymyr Vasylkun;
252e094abdeSVolodymyr Vasylkun; RV64I-LABEL: ucmp.64.64:
253e094abdeSVolodymyr Vasylkun; RV64I:       # %bb.0:
254e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a2, a0, a1
255e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sltu a0, a1, a0
256e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sub a0, a0, a2
257e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    ret
258e094abdeSVolodymyr Vasylkun  %1 = call i64 @llvm.ucmp(i64 %x, i64 %y)
259e094abdeSVolodymyr Vasylkun  ret i64 %1
260e094abdeSVolodymyr Vasylkun}
261