Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / LoongArch / ir-instruction / icmp.ll
blobfabfbc3beeda5d22df54c494dafb893e7a42632a
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA32
3 ; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA64
5 ;; Exercise the 'icmp' LLVM IR: https://llvm.org/docs/LangRef.html#icmp-instruction
7 define i1 @icmp_eq(i32 signext %a, i32 signext %b) {
8 ; LA32-LABEL: icmp_eq:
9 ; LA32:       # %bb.0:
10 ; LA32-NEXT:    xor $a0, $a0, $a1
11 ; LA32-NEXT:    sltui $a0, $a0, 1
12 ; LA32-NEXT:    ret
14 ; LA64-LABEL: icmp_eq:
15 ; LA64:       # %bb.0:
16 ; LA64-NEXT:    xor $a0, $a0, $a1
17 ; LA64-NEXT:    sltui $a0, $a0, 1
18 ; LA64-NEXT:    ret
19   %res = icmp eq i32 %a, %b
20   ret i1 %res
23 define i1 @icmp_ne(i32 signext %a, i32 signext %b) {
24 ; LA32-LABEL: icmp_ne:
25 ; LA32:       # %bb.0:
26 ; LA32-NEXT:    xor $a0, $a0, $a1
27 ; LA32-NEXT:    sltu $a0, $zero, $a0
28 ; LA32-NEXT:    ret
30 ; LA64-LABEL: icmp_ne:
31 ; LA64:       # %bb.0:
32 ; LA64-NEXT:    xor $a0, $a0, $a1
33 ; LA64-NEXT:    sltu $a0, $zero, $a0
34 ; LA64-NEXT:    ret
35   %res = icmp ne i32 %a, %b
36   ret i1 %res
39 define i1 @icmp_ugt(i32 signext %a, i32 signext %b) {
40 ; LA32-LABEL: icmp_ugt:
41 ; LA32:       # %bb.0:
42 ; LA32-NEXT:    sltu $a0, $a1, $a0
43 ; LA32-NEXT:    ret
45 ; LA64-LABEL: icmp_ugt:
46 ; LA64:       # %bb.0:
47 ; LA64-NEXT:    sltu $a0, $a1, $a0
48 ; LA64-NEXT:    ret
49   %res = icmp ugt i32 %a, %b
50   ret i1 %res
53 define i1 @icmp_uge(i32 signext %a, i32 signext %b) {
54 ; LA32-LABEL: icmp_uge:
55 ; LA32:       # %bb.0:
56 ; LA32-NEXT:    sltu $a0, $a0, $a1
57 ; LA32-NEXT:    xori $a0, $a0, 1
58 ; LA32-NEXT:    ret
60 ; LA64-LABEL: icmp_uge:
61 ; LA64:       # %bb.0:
62 ; LA64-NEXT:    sltu $a0, $a0, $a1
63 ; LA64-NEXT:    xori $a0, $a0, 1
64 ; LA64-NEXT:    ret
65   %res = icmp uge i32 %a, %b
66   ret i1 %res
69 define i1 @icmp_ult(i32 signext %a, i32 signext %b) {
70 ; LA32-LABEL: icmp_ult:
71 ; LA32:       # %bb.0:
72 ; LA32-NEXT:    sltu $a0, $a0, $a1
73 ; LA32-NEXT:    ret
75 ; LA64-LABEL: icmp_ult:
76 ; LA64:       # %bb.0:
77 ; LA64-NEXT:    sltu $a0, $a0, $a1
78 ; LA64-NEXT:    ret
79   %res = icmp ult i32 %a, %b
80   ret i1 %res
83 define i1 @icmp_ule(i32 signext %a, i32 signext %b) {
84 ; LA32-LABEL: icmp_ule:
85 ; LA32:       # %bb.0:
86 ; LA32-NEXT:    sltu $a0, $a1, $a0
87 ; LA32-NEXT:    xori $a0, $a0, 1
88 ; LA32-NEXT:    ret
90 ; LA64-LABEL: icmp_ule:
91 ; LA64:       # %bb.0:
92 ; LA64-NEXT:    sltu $a0, $a1, $a0
93 ; LA64-NEXT:    xori $a0, $a0, 1
94 ; LA64-NEXT:    ret
95   %res = icmp ule i32 %a, %b
96   ret i1 %res
99 define i1 @icmp_sgt(i32 signext %a, i32 signext %b) {
100 ; LA32-LABEL: icmp_sgt:
101 ; LA32:       # %bb.0:
102 ; LA32-NEXT:    slt $a0, $a1, $a0
103 ; LA32-NEXT:    ret
105 ; LA64-LABEL: icmp_sgt:
106 ; LA64:       # %bb.0:
107 ; LA64-NEXT:    slt $a0, $a1, $a0
108 ; LA64-NEXT:    ret
109   %res = icmp sgt i32 %a, %b
110   ret i1 %res
113 define i1 @icmp_sge(i32 signext %a, i32 signext %b) {
114 ; LA32-LABEL: icmp_sge:
115 ; LA32:       # %bb.0:
116 ; LA32-NEXT:    slt $a0, $a0, $a1
117 ; LA32-NEXT:    xori $a0, $a0, 1
118 ; LA32-NEXT:    ret
120 ; LA64-LABEL: icmp_sge:
121 ; LA64:       # %bb.0:
122 ; LA64-NEXT:    slt $a0, $a0, $a1
123 ; LA64-NEXT:    xori $a0, $a0, 1
124 ; LA64-NEXT:    ret
125   %res = icmp sge i32 %a, %b
126   ret i1 %res
129 define i1 @icmp_slt(i32 signext %a, i32 signext %b) {
130 ; LA32-LABEL: icmp_slt:
131 ; LA32:       # %bb.0:
132 ; LA32-NEXT:    slt $a0, $a0, $a1
133 ; LA32-NEXT:    ret
135 ; LA64-LABEL: icmp_slt:
136 ; LA64:       # %bb.0:
137 ; LA64-NEXT:    slt $a0, $a0, $a1
138 ; LA64-NEXT:    ret
139   %res = icmp slt i32 %a, %b
140   ret i1 %res
143 define i1 @icmp_sle(i32 signext %a, i32 signext %b) {
144 ; LA32-LABEL: icmp_sle:
145 ; LA32:       # %bb.0:
146 ; LA32-NEXT:    slt $a0, $a1, $a0
147 ; LA32-NEXT:    xori $a0, $a0, 1
148 ; LA32-NEXT:    ret
150 ; LA64-LABEL: icmp_sle:
151 ; LA64:       # %bb.0:
152 ; LA64-NEXT:    slt $a0, $a1, $a0
153 ; LA64-NEXT:    xori $a0, $a0, 1
154 ; LA64-NEXT:    ret
155   %res = icmp sle i32 %a, %b
156   ret i1 %res
159 define i1 @icmp_slt_3(i32 signext %a) {
160 ; LA32-LABEL: icmp_slt_3:
161 ; LA32:       # %bb.0:
162 ; LA32-NEXT:    slti $a0, $a0, 3
163 ; LA32-NEXT:    ret
165 ; LA64-LABEL: icmp_slt_3:
166 ; LA64:       # %bb.0:
167 ; LA64-NEXT:    slti $a0, $a0, 3
168 ; LA64-NEXT:    ret
169   %res = icmp slt i32 %a, 3
170   ret i1 %res
173 define i1 @icmp_ult_3(i32 signext %a) {
174 ; LA32-LABEL: icmp_ult_3:
175 ; LA32:       # %bb.0:
176 ; LA32-NEXT:    sltui $a0, $a0, 3
177 ; LA32-NEXT:    ret
179 ; LA64-LABEL: icmp_ult_3:
180 ; LA64:       # %bb.0:
181 ; LA64-NEXT:    sltui $a0, $a0, 3
182 ; LA64-NEXT:    ret
183   %res = icmp ult i32 %a, 3
184   ret i1 %res
187 define i1 @icmp_eq_0(i32 signext %a) {
188 ; LA32-LABEL: icmp_eq_0:
189 ; LA32:       # %bb.0:
190 ; LA32-NEXT:    sltui $a0, $a0, 1
191 ; LA32-NEXT:    ret
193 ; LA64-LABEL: icmp_eq_0:
194 ; LA64:       # %bb.0:
195 ; LA64-NEXT:    sltui $a0, $a0, 1
196 ; LA64-NEXT:    ret
197   %res = icmp eq i32 %a, 0
198   ret i1 %res
201 define i1 @icmp_eq_3(i32 signext %a) {
202 ; LA32-LABEL: icmp_eq_3:
203 ; LA32:       # %bb.0:
204 ; LA32-NEXT:    addi.w $a0, $a0, -3
205 ; LA32-NEXT:    sltui $a0, $a0, 1
206 ; LA32-NEXT:    ret
208 ; LA64-LABEL: icmp_eq_3:
209 ; LA64:       # %bb.0:
210 ; LA64-NEXT:    addi.d $a0, $a0, -3
211 ; LA64-NEXT:    sltui $a0, $a0, 1
212 ; LA64-NEXT:    ret
213   %res = icmp eq i32 %a, 3
214   ret i1 %res
217 define i1 @icmp_ne_0(i32 signext %a) {
218 ; LA32-LABEL: icmp_ne_0:
219 ; LA32:       # %bb.0:
220 ; LA32-NEXT:    sltu $a0, $zero, $a0
221 ; LA32-NEXT:    ret
223 ; LA64-LABEL: icmp_ne_0:
224 ; LA64:       # %bb.0:
225 ; LA64-NEXT:    sltu $a0, $zero, $a0
226 ; LA64-NEXT:    ret
227   %res = icmp ne i32 %a, 0
228   ret i1 %res
231 define i1 @icmp_ne_3(i32 signext %a) {
232 ; LA32-LABEL: icmp_ne_3:
233 ; LA32:       # %bb.0:
234 ; LA32-NEXT:    addi.w $a0, $a0, -3
235 ; LA32-NEXT:    sltu $a0, $zero, $a0
236 ; LA32-NEXT:    ret
238 ; LA64-LABEL: icmp_ne_3:
239 ; LA64:       # %bb.0:
240 ; LA64-NEXT:    addi.d $a0, $a0, -3
241 ; LA64-NEXT:    sltu $a0, $zero, $a0
242 ; LA64-NEXT:    ret
243   %res = icmp ne i32 %a, 3
244   ret i1 %res