xref: /llvm-project/llvm/test/CodeGen/RISCV/GlobalISel/scmp.ll (revision dde5546b79f784ab71cac325e0a0698c67c4dcde)
1e0ea9fd6SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2e0ea9fd6SCraig Topper; RUN: llc < %s -mtriple=riscv32 -global-isel | FileCheck %s --check-prefix=RV32I
3e0ea9fd6SCraig Topper; RUN: llc < %s -mtriple=riscv64 -global-isel | FileCheck %s --check-prefix=RV64I
4e0ea9fd6SCraig Topper
5e0ea9fd6SCraig Topperdefine i8 @scmp.8.8(i8 signext %x, i8 signext %y) nounwind {
6e0ea9fd6SCraig Topper; RV32I-LABEL: scmp.8.8:
7e0ea9fd6SCraig Topper; RV32I:       # %bb.0:
8de1a423cSCraig Topper; RV32I-NEXT:    slt a2, a1, a0
9de1a423cSCraig Topper; RV32I-NEXT:    slt a0, a0, a1
10de1a423cSCraig Topper; RV32I-NEXT:    sub a0, a2, a0
11e0ea9fd6SCraig Topper; RV32I-NEXT:    ret
12e0ea9fd6SCraig Topper;
13e0ea9fd6SCraig Topper; RV64I-LABEL: scmp.8.8:
14e0ea9fd6SCraig Topper; RV64I:       # %bb.0:
15de1a423cSCraig Topper; RV64I-NEXT:    slt a2, a1, a0
16de1a423cSCraig Topper; RV64I-NEXT:    slt a0, a0, a1
17de1a423cSCraig Topper; RV64I-NEXT:    sub a0, a2, a0
18e0ea9fd6SCraig Topper; RV64I-NEXT:    ret
19e0ea9fd6SCraig Topper  %1 = call i8 @llvm.scmp(i8 %x, i8 %y)
20e0ea9fd6SCraig Topper  ret i8 %1
21e0ea9fd6SCraig Topper}
22e0ea9fd6SCraig Topper
23e0ea9fd6SCraig Topperdefine i8 @scmp.8.16(i16 signext %x, i16 signext %y) nounwind {
24e0ea9fd6SCraig Topper; RV32I-LABEL: scmp.8.16:
25e0ea9fd6SCraig Topper; RV32I:       # %bb.0:
26de1a423cSCraig Topper; RV32I-NEXT:    slt a2, a1, a0
27de1a423cSCraig Topper; RV32I-NEXT:    slt a0, a0, a1
28de1a423cSCraig Topper; RV32I-NEXT:    sub a0, a2, a0
29e0ea9fd6SCraig Topper; RV32I-NEXT:    ret
30e0ea9fd6SCraig Topper;
31e0ea9fd6SCraig Topper; RV64I-LABEL: scmp.8.16:
32e0ea9fd6SCraig Topper; RV64I:       # %bb.0:
33de1a423cSCraig Topper; RV64I-NEXT:    slt a2, a1, a0
34de1a423cSCraig Topper; RV64I-NEXT:    slt a0, a0, a1
35de1a423cSCraig Topper; RV64I-NEXT:    sub a0, a2, a0
36e0ea9fd6SCraig Topper; RV64I-NEXT:    ret
37e0ea9fd6SCraig Topper  %1 = call i8 @llvm.scmp(i16 %x, i16 %y)
38e0ea9fd6SCraig Topper  ret i8 %1
39e0ea9fd6SCraig Topper}
40e0ea9fd6SCraig Topper
41e0ea9fd6SCraig Topperdefine i8 @scmp.8.32(i32 %x, i32 %y) nounwind {
42e0ea9fd6SCraig Topper; RV32I-LABEL: scmp.8.32:
43e0ea9fd6SCraig Topper; RV32I:       # %bb.0:
44de1a423cSCraig Topper; RV32I-NEXT:    slt a2, a1, a0
45de1a423cSCraig Topper; RV32I-NEXT:    slt a0, a0, a1
46de1a423cSCraig Topper; RV32I-NEXT:    sub a0, a2, a0
47e0ea9fd6SCraig Topper; RV32I-NEXT:    ret
48e0ea9fd6SCraig Topper;
49e0ea9fd6SCraig Topper; RV64I-LABEL: scmp.8.32:
50e0ea9fd6SCraig Topper; RV64I:       # %bb.0:
51de1a423cSCraig Topper; RV64I-NEXT:    sext.w a0, a0
52e0ea9fd6SCraig Topper; RV64I-NEXT:    sext.w a1, a1
53de1a423cSCraig Topper; RV64I-NEXT:    slt a2, a1, a0
54de1a423cSCraig Topper; RV64I-NEXT:    slt a0, a0, a1
55de1a423cSCraig Topper; RV64I-NEXT:    sub a0, a2, a0
56e0ea9fd6SCraig Topper; RV64I-NEXT:    ret
57e0ea9fd6SCraig Topper  %1 = call i8 @llvm.scmp(i32 %x, i32 %y)
58e0ea9fd6SCraig Topper  ret i8 %1
59e0ea9fd6SCraig Topper}
60e0ea9fd6SCraig Topper
61e0ea9fd6SCraig Topperdefine i8 @scmp.8.64(i64 %x, i64 %y) nounwind {
62e0ea9fd6SCraig Topper; RV32I-LABEL: scmp.8.64:
63e0ea9fd6SCraig Topper; RV32I:       # %bb.0:
64e0ea9fd6SCraig Topper; RV32I-NEXT:    beq a1, a3, .LBB3_2
65e0ea9fd6SCraig Topper; RV32I-NEXT:  # %bb.1:
66e0ea9fd6SCraig Topper; RV32I-NEXT:    slt a4, a3, a1
67de1a423cSCraig Topper; RV32I-NEXT:    slt a0, a1, a3
68de1a423cSCraig Topper; RV32I-NEXT:    sub a0, a4, a0
69de1a423cSCraig Topper; RV32I-NEXT:    ret
70e0ea9fd6SCraig Topper; RV32I-NEXT:  .LBB3_2:
71e0ea9fd6SCraig Topper; RV32I-NEXT:    sltu a4, a2, a0
72e0ea9fd6SCraig Topper; RV32I-NEXT:    sltu a0, a0, a2
73de1a423cSCraig Topper; RV32I-NEXT:    sub a0, a4, a0
74e0ea9fd6SCraig Topper; RV32I-NEXT:    ret
75e0ea9fd6SCraig Topper;
76e0ea9fd6SCraig Topper; RV64I-LABEL: scmp.8.64:
77e0ea9fd6SCraig Topper; RV64I:       # %bb.0:
78de1a423cSCraig Topper; RV64I-NEXT:    slt a2, a1, a0
79de1a423cSCraig Topper; RV64I-NEXT:    slt a0, a0, a1
80de1a423cSCraig Topper; RV64I-NEXT:    sub a0, a2, a0
81e0ea9fd6SCraig Topper; RV64I-NEXT:    ret
82e0ea9fd6SCraig Topper  %1 = call i8 @llvm.scmp(i64 %x, i64 %y)
83e0ea9fd6SCraig Topper  ret i8 %1
84e0ea9fd6SCraig Topper}
85e0ea9fd6SCraig Topper
86e0ea9fd6SCraig Topperdefine i32 @scmp.32.32(i32 %x, i32 %y) nounwind {
87e0ea9fd6SCraig Topper; RV32I-LABEL: scmp.32.32:
88e0ea9fd6SCraig Topper; RV32I:       # %bb.0:
89de1a423cSCraig Topper; RV32I-NEXT:    slt a2, a1, a0
90de1a423cSCraig Topper; RV32I-NEXT:    slt a0, a0, a1
91de1a423cSCraig Topper; RV32I-NEXT:    sub a0, a2, a0
92e0ea9fd6SCraig Topper; RV32I-NEXT:    ret
93e0ea9fd6SCraig Topper;
94e0ea9fd6SCraig Topper; RV64I-LABEL: scmp.32.32:
95e0ea9fd6SCraig Topper; RV64I:       # %bb.0:
96de1a423cSCraig Topper; RV64I-NEXT:    sext.w a0, a0
97e0ea9fd6SCraig Topper; RV64I-NEXT:    sext.w a1, a1
98de1a423cSCraig Topper; RV64I-NEXT:    slt a2, a1, a0
99de1a423cSCraig Topper; RV64I-NEXT:    slt a0, a0, a1
100*dde5546bSLuke Quinn; RV64I-NEXT:    subw a0, a2, a0
101e0ea9fd6SCraig Topper; RV64I-NEXT:    ret
102e0ea9fd6SCraig Topper  %1 = call i32 @llvm.scmp(i32 %x, i32 %y)
103e0ea9fd6SCraig Topper  ret i32 %1
104e0ea9fd6SCraig Topper}
105e0ea9fd6SCraig Topper
106e0ea9fd6SCraig Topperdefine i32 @scmp.32.64(i64 %x, i64 %y) nounwind {
107e0ea9fd6SCraig Topper; RV32I-LABEL: scmp.32.64:
108e0ea9fd6SCraig Topper; RV32I:       # %bb.0:
109e0ea9fd6SCraig Topper; RV32I-NEXT:    beq a1, a3, .LBB5_2
110e0ea9fd6SCraig Topper; RV32I-NEXT:  # %bb.1:
111e0ea9fd6SCraig Topper; RV32I-NEXT:    slt a4, a3, a1
112de1a423cSCraig Topper; RV32I-NEXT:    slt a0, a1, a3
113de1a423cSCraig Topper; RV32I-NEXT:    sub a0, a4, a0
114de1a423cSCraig Topper; RV32I-NEXT:    ret
115e0ea9fd6SCraig Topper; RV32I-NEXT:  .LBB5_2:
116e0ea9fd6SCraig Topper; RV32I-NEXT:    sltu a4, a2, a0
117e0ea9fd6SCraig Topper; RV32I-NEXT:    sltu a0, a0, a2
118de1a423cSCraig Topper; RV32I-NEXT:    sub a0, a4, a0
119e0ea9fd6SCraig Topper; RV32I-NEXT:    ret
120e0ea9fd6SCraig Topper;
121e0ea9fd6SCraig Topper; RV64I-LABEL: scmp.32.64:
122e0ea9fd6SCraig Topper; RV64I:       # %bb.0:
123de1a423cSCraig Topper; RV64I-NEXT:    slt a2, a1, a0
124de1a423cSCraig Topper; RV64I-NEXT:    slt a0, a0, a1
125*dde5546bSLuke Quinn; RV64I-NEXT:    subw a0, a2, a0
126e0ea9fd6SCraig Topper; RV64I-NEXT:    ret
127e0ea9fd6SCraig Topper  %1 = call i32 @llvm.scmp(i64 %x, i64 %y)
128e0ea9fd6SCraig Topper  ret i32 %1
129e0ea9fd6SCraig Topper}
130e0ea9fd6SCraig Topper
131e0ea9fd6SCraig Topperdefine i64 @scmp.64.64(i64 %x, i64 %y) nounwind {
132e0ea9fd6SCraig Topper; RV32I-LABEL: scmp.64.64:
133e0ea9fd6SCraig Topper; RV32I:       # %bb.0:
134e0ea9fd6SCraig Topper; RV32I-NEXT:    beq a1, a3, .LBB6_2
135e0ea9fd6SCraig Topper; RV32I-NEXT:  # %bb.1:
136de1a423cSCraig Topper; RV32I-NEXT:    slt a4, a3, a1
137e0ea9fd6SCraig Topper; RV32I-NEXT:    slt a1, a1, a3
138de1a423cSCraig Topper; RV32I-NEXT:    j .LBB6_3
139de1a423cSCraig Topper; RV32I-NEXT:  .LBB6_2:
140de1a423cSCraig Topper; RV32I-NEXT:    sltu a4, a2, a0
141de1a423cSCraig Topper; RV32I-NEXT:    sltu a1, a0, a2
142de1a423cSCraig Topper; RV32I-NEXT:  .LBB6_3:
143de1a423cSCraig Topper; RV32I-NEXT:    sub a0, a4, a1
144de1a423cSCraig Topper; RV32I-NEXT:    sltu a1, a4, a1
145de1a423cSCraig Topper; RV32I-NEXT:    neg a1, a1
146e0ea9fd6SCraig Topper; RV32I-NEXT:    ret
147e0ea9fd6SCraig Topper;
148e0ea9fd6SCraig Topper; RV64I-LABEL: scmp.64.64:
149e0ea9fd6SCraig Topper; RV64I:       # %bb.0:
150de1a423cSCraig Topper; RV64I-NEXT:    slt a2, a1, a0
151de1a423cSCraig Topper; RV64I-NEXT:    slt a0, a0, a1
152de1a423cSCraig Topper; RV64I-NEXT:    sub a0, a2, a0
153e0ea9fd6SCraig Topper; RV64I-NEXT:    ret
154e0ea9fd6SCraig Topper  %1 = call i64 @llvm.scmp(i64 %x, i64 %y)
155e0ea9fd6SCraig Topper  ret i64 %1
156e0ea9fd6SCraig Topper}
157