@@ -48,10 +48,8 @@ define i8 @ucmp.8.32(i32 %x, i32 %y) nounwind {
48
48
;
49
49
; RV64I-LABEL: ucmp.8.32:
50
50
; RV64I: # %bb.0:
51
- ; RV64I-NEXT: slli a1, a1, 32
52
- ; RV64I-NEXT: srli a1, a1, 32
53
- ; RV64I-NEXT: slli a0, a0, 32
54
- ; RV64I-NEXT: srli a0, a0, 32
51
+ ; RV64I-NEXT: sext.w a1, a1
52
+ ; RV64I-NEXT: sext.w a0, a0
55
53
; RV64I-NEXT: sltu a2, a0, a1
56
54
; RV64I-NEXT: sltu a0, a1, a0
57
55
; RV64I-NEXT: sub a0, a0, a2
@@ -164,10 +162,44 @@ define i32 @ucmp.32.32(i32 %x, i32 %y) nounwind {
164
162
;
165
163
; RV64I-LABEL: ucmp.32.32:
166
164
; RV64I: # %bb.0:
167
- ; RV64I-NEXT: slli a1, a1, 32
168
- ; RV64I-NEXT: srli a1, a1, 32
169
- ; RV64I-NEXT: slli a0, a0, 32
170
- ; RV64I-NEXT: srli a0, a0, 32
165
+ ; RV64I-NEXT: sext.w a1, a1
166
+ ; RV64I-NEXT: sext.w a0, a0
167
+ ; RV64I-NEXT: sltu a2, a0, a1
168
+ ; RV64I-NEXT: sltu a0, a1, a0
169
+ ; RV64I-NEXT: sub a0, a0, a2
170
+ ; RV64I-NEXT: ret
171
+ %1 = call i32 @llvm.ucmp (i32 %x , i32 %y )
172
+ ret i32 %1
173
+ }
174
+
175
+ define i32 @ucmp.32.32_sext (i32 signext %x , i32 signext %y ) nounwind {
176
+ ; RV32I-LABEL: ucmp.32.32_sext:
177
+ ; RV32I: # %bb.0:
178
+ ; RV32I-NEXT: sltu a2, a0, a1
179
+ ; RV32I-NEXT: sltu a0, a1, a0
180
+ ; RV32I-NEXT: sub a0, a0, a2
181
+ ; RV32I-NEXT: ret
182
+ ;
183
+ ; RV64I-LABEL: ucmp.32.32_sext:
184
+ ; RV64I: # %bb.0:
185
+ ; RV64I-NEXT: sltu a2, a0, a1
186
+ ; RV64I-NEXT: sltu a0, a1, a0
187
+ ; RV64I-NEXT: sub a0, a0, a2
188
+ ; RV64I-NEXT: ret
189
+ %1 = call i32 @llvm.ucmp (i32 %x , i32 %y )
190
+ ret i32 %1
191
+ }
192
+
193
+ define i32 @ucmp.32.32_zext (i32 zeroext %x , i32 zeroext %y ) nounwind {
194
+ ; RV32I-LABEL: ucmp.32.32_zext:
195
+ ; RV32I: # %bb.0:
196
+ ; RV32I-NEXT: sltu a2, a0, a1
197
+ ; RV32I-NEXT: sltu a0, a1, a0
198
+ ; RV32I-NEXT: sub a0, a0, a2
199
+ ; RV32I-NEXT: ret
200
+ ;
201
+ ; RV64I-LABEL: ucmp.32.32_zext:
202
+ ; RV64I: # %bb.0:
171
203
; RV64I-NEXT: sltu a2, a0, a1
172
204
; RV64I-NEXT: sltu a0, a1, a0
173
205
; RV64I-NEXT: sub a0, a0, a2
@@ -179,13 +211,13 @@ define i32 @ucmp.32.32(i32 %x, i32 %y) nounwind {
179
211
define i32 @ucmp.32.64 (i64 %x , i64 %y ) nounwind {
180
212
; RV32I-LABEL: ucmp.32.64:
181
213
; RV32I: # %bb.0:
182
- ; RV32I-NEXT: beq a1, a3, .LBB6_2
214
+ ; RV32I-NEXT: beq a1, a3, .LBB8_2
183
215
; RV32I-NEXT: # %bb.1:
184
216
; RV32I-NEXT: sltu a4, a1, a3
185
217
; RV32I-NEXT: sltu a0, a3, a1
186
218
; RV32I-NEXT: sub a0, a0, a4
187
219
; RV32I-NEXT: ret
188
- ; RV32I-NEXT: .LBB6_2 :
220
+ ; RV32I-NEXT: .LBB8_2 :
189
221
; RV32I-NEXT: sltu a4, a0, a2
190
222
; RV32I-NEXT: sltu a0, a2, a0
191
223
; RV32I-NEXT: sub a0, a0, a4
@@ -204,15 +236,15 @@ define i32 @ucmp.32.64(i64 %x, i64 %y) nounwind {
204
236
define i64 @ucmp.64.64 (i64 %x , i64 %y ) nounwind {
205
237
; RV32I-LABEL: ucmp.64.64:
206
238
; RV32I: # %bb.0:
207
- ; RV32I-NEXT: beq a1, a3, .LBB7_2
239
+ ; RV32I-NEXT: beq a1, a3, .LBB9_2
208
240
; RV32I-NEXT: # %bb.1:
209
241
; RV32I-NEXT: sltu a4, a1, a3
210
242
; RV32I-NEXT: sltu a0, a3, a1
211
- ; RV32I-NEXT: j .LBB7_3
212
- ; RV32I-NEXT: .LBB7_2 :
243
+ ; RV32I-NEXT: j .LBB9_3
244
+ ; RV32I-NEXT: .LBB9_2 :
213
245
; RV32I-NEXT: sltu a4, a0, a2
214
246
; RV32I-NEXT: sltu a0, a2, a0
215
- ; RV32I-NEXT: .LBB7_3 :
247
+ ; RV32I-NEXT: .LBB9_3 :
216
248
; RV32I-NEXT: sub a0, a0, a4
217
249
; RV32I-NEXT: srai a1, a0, 31
218
250
; RV32I-NEXT: ret
0 commit comments