xref: /llvm-project/llvm/test/CodeGen/RISCV/scmp.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 @scmp.8.8(i8 signext %x, i8 signext %y) nounwind {
6e094abdeSVolodymyr Vasylkun; RV32I-LABEL: scmp.8.8:
7e094abdeSVolodymyr Vasylkun; RV32I:       # %bb.0:
8e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    slt a2, a0, a1
9e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    slt a0, a1, a0
10e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a0, a2
11e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
12e094abdeSVolodymyr Vasylkun;
13e094abdeSVolodymyr Vasylkun; RV64I-LABEL: scmp.8.8:
14e094abdeSVolodymyr Vasylkun; RV64I:       # %bb.0:
15e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    slt a2, a0, a1
16e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    slt a0, a1, a0
17e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sub a0, a0, a2
18e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    ret
19e094abdeSVolodymyr Vasylkun  %1 = call i8 @llvm.scmp(i8 %x, i8 %y)
20e094abdeSVolodymyr Vasylkun  ret i8 %1
21e094abdeSVolodymyr Vasylkun}
22e094abdeSVolodymyr Vasylkun
23e094abdeSVolodymyr Vasylkundefine i8 @scmp.8.16(i16 signext %x, i16 signext %y) nounwind {
24e094abdeSVolodymyr Vasylkun; RV32I-LABEL: scmp.8.16:
25e094abdeSVolodymyr Vasylkun; RV32I:       # %bb.0:
26e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    slt a2, a0, a1
27e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    slt a0, a1, a0
28e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a0, a2
29e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
30e094abdeSVolodymyr Vasylkun;
31e094abdeSVolodymyr Vasylkun; RV64I-LABEL: scmp.8.16:
32e094abdeSVolodymyr Vasylkun; RV64I:       # %bb.0:
33e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    slt a2, a0, a1
34e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    slt a0, a1, a0
35e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sub a0, a0, a2
36e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    ret
37e094abdeSVolodymyr Vasylkun  %1 = call i8 @llvm.scmp(i16 %x, i16 %y)
38e094abdeSVolodymyr Vasylkun  ret i8 %1
39e094abdeSVolodymyr Vasylkun}
40e094abdeSVolodymyr Vasylkun
41e094abdeSVolodymyr Vasylkundefine i8 @scmp.8.32(i32 %x, i32 %y) nounwind {
42e094abdeSVolodymyr Vasylkun; RV32I-LABEL: scmp.8.32:
43e094abdeSVolodymyr Vasylkun; RV32I:       # %bb.0:
44e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    slt a2, a0, a1
45e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    slt a0, a1, a0
46e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a0, a2
47e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
48e094abdeSVolodymyr Vasylkun;
49e094abdeSVolodymyr Vasylkun; RV64I-LABEL: scmp.8.32:
50e094abdeSVolodymyr Vasylkun; RV64I:       # %bb.0:
51e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sext.w a1, a1
52e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sext.w a0, a0
53e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    slt a2, a0, a1
54e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    slt a0, a1, a0
55e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sub a0, a0, a2
56e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    ret
57e094abdeSVolodymyr Vasylkun  %1 = call i8 @llvm.scmp(i32 %x, i32 %y)
58e094abdeSVolodymyr Vasylkun  ret i8 %1
59e094abdeSVolodymyr Vasylkun}
60e094abdeSVolodymyr Vasylkun
61e094abdeSVolodymyr Vasylkundefine i8 @scmp.8.64(i64 %x, i64 %y) nounwind {
62e094abdeSVolodymyr Vasylkun; RV32I-LABEL: scmp.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:    slt a4, a1, a3
67e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    slt 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: scmp.8.64:
77e094abdeSVolodymyr Vasylkun; RV64I:       # %bb.0:
78e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    slt a2, a0, a1
79e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    slt a0, a1, a0
80e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sub a0, a0, a2
81e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    ret
82e094abdeSVolodymyr Vasylkun  %1 = call i8 @llvm.scmp(i64 %x, i64 %y)
83e094abdeSVolodymyr Vasylkun  ret i8 %1
84e094abdeSVolodymyr Vasylkun}
85e094abdeSVolodymyr Vasylkun
86e094abdeSVolodymyr Vasylkundefine i8 @scmp.8.128(i128 %x, i128 %y) nounwind {
87e094abdeSVolodymyr Vasylkun; RV32I-LABEL: scmp.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:    slt 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:    slt 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: scmp.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:    slt a4, a1, a3
143e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    slt 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.scmp(i128 %x, i128 %y)
152e094abdeSVolodymyr Vasylkun  ret i8 %1
153e094abdeSVolodymyr Vasylkun}
154e094abdeSVolodymyr Vasylkun
155e094abdeSVolodymyr Vasylkundefine i32 @scmp.32.32(i32 %x, i32 %y) nounwind {
156e094abdeSVolodymyr Vasylkun; RV32I-LABEL: scmp.32.32:
157e094abdeSVolodymyr Vasylkun; RV32I:       # %bb.0:
158e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    slt a2, a0, a1
159e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    slt a0, a1, a0
160e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a0, a2
161e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
162e094abdeSVolodymyr Vasylkun;
163e094abdeSVolodymyr Vasylkun; RV64I-LABEL: scmp.32.32:
164e094abdeSVolodymyr Vasylkun; RV64I:       # %bb.0:
165e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sext.w a1, a1
166e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sext.w a0, a0
167e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    slt a2, a0, a1
168e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    slt a0, a1, a0
169e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sub a0, a0, a2
170e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    ret
171e094abdeSVolodymyr Vasylkun  %1 = call i32 @llvm.scmp(i32 %x, i32 %y)
172e094abdeSVolodymyr Vasylkun  ret i32 %1
173e094abdeSVolodymyr Vasylkun}
174e094abdeSVolodymyr Vasylkun
175e094abdeSVolodymyr Vasylkundefine i32 @scmp.32.64(i64 %x, i64 %y) nounwind {
176e094abdeSVolodymyr Vasylkun; RV32I-LABEL: scmp.32.64:
177e094abdeSVolodymyr Vasylkun; RV32I:       # %bb.0:
178e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    beq a1, a3, .LBB6_2
179e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  # %bb.1:
180e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    slt a4, a1, a3
181e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    slt a0, a3, a1
182e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a0, a4
183e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
184e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  .LBB6_2:
185e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a4, a0, a2
186e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a0, a2, a0
187e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a0, a4
188e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
189e094abdeSVolodymyr Vasylkun;
190e094abdeSVolodymyr Vasylkun; RV64I-LABEL: scmp.32.64:
191e094abdeSVolodymyr Vasylkun; RV64I:       # %bb.0:
192e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    slt a2, a0, a1
193e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    slt a0, a1, a0
194e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sub a0, a0, a2
195e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    ret
196e094abdeSVolodymyr Vasylkun  %1 = call i32 @llvm.scmp(i64 %x, i64 %y)
197e094abdeSVolodymyr Vasylkun  ret i32 %1
198e094abdeSVolodymyr Vasylkun}
199e094abdeSVolodymyr Vasylkun
200e094abdeSVolodymyr Vasylkundefine i64 @scmp.64.64(i64 %x, i64 %y) nounwind {
201e094abdeSVolodymyr Vasylkun; RV32I-LABEL: scmp.64.64:
202e094abdeSVolodymyr Vasylkun; RV32I:       # %bb.0:
203e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    beq a1, a3, .LBB7_2
204e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  # %bb.1:
205e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    slt a4, a1, a3
206e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    slt a0, a3, a1
207e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    j .LBB7_3
208e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  .LBB7_2:
209e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a4, a0, a2
210e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sltu a0, a2, a0
211e094abdeSVolodymyr Vasylkun; RV32I-NEXT:  .LBB7_3:
212e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    sub a0, a0, a4
213e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    srai a1, a0, 31
214e094abdeSVolodymyr Vasylkun; RV32I-NEXT:    ret
215e094abdeSVolodymyr Vasylkun;
216e094abdeSVolodymyr Vasylkun; RV64I-LABEL: scmp.64.64:
217e094abdeSVolodymyr Vasylkun; RV64I:       # %bb.0:
218e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    slt a2, a0, a1
219e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    slt a0, a1, a0
220e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    sub a0, a0, a2
221e094abdeSVolodymyr Vasylkun; RV64I-NEXT:    ret
222e094abdeSVolodymyr Vasylkun  %1 = call i64 @llvm.scmp(i64 %x, i64 %y)
223e094abdeSVolodymyr Vasylkun  ret i64 %1
224e094abdeSVolodymyr Vasylkun}
225