Skip to content

Commit 12d0753

Browse files
committed
[RISCV] Use bitsLE instead of strict == MVT::i32 in assertsexti32 and assertzexti32.
The patterns that use this really want to know if the operand has at least 32 sign/zero bits. This increases opportunities to use W instructions when the original source used i8/i16. Not sure how much this matters for performance, but it makes i8/i16 code more consistent with i32.
1 parent f22aa8f commit 12d0753

File tree

5 files changed

+16
-16
lines changed

5 files changed

+16
-16
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfo.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -838,13 +838,13 @@ def IsOrAdd: PatFrag<(ops node:$A, node:$B), (or node:$A, node:$B), [{
838838
return isOrEquivalentToAdd(N);
839839
}]>;
840840
def assertsexti32 : PatFrag<(ops node:$src), (assertsext node:$src), [{
841-
return cast<VTSDNode>(N->getOperand(1))->getVT() == MVT::i32;
841+
return cast<VTSDNode>(N->getOperand(1))->getVT().bitsLE(MVT::i32);
842842
}]>;
843843
def sexti32 : PatFrags<(ops node:$src),
844844
[(sext_inreg node:$src, i32),
845845
(assertsexti32 node:$src)]>;
846846
def assertzexti32 : PatFrag<(ops node:$src), (assertzext node:$src), [{
847-
return cast<VTSDNode>(N->getOperand(1))->getVT() == MVT::i32;
847+
return cast<VTSDNode>(N->getOperand(1))->getVT().bitsLE(MVT::i32);
848848
}]>;
849849
def zexti32 : PatFrags<(ops node:$src),
850850
[(and node:$src, 0xffffffff),

llvm/test/CodeGen/RISCV/double-convert.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ define double @fcvt_d_w_i8(i8 signext %a) nounwind {
281281
;
282282
; RV64IFD-LABEL: fcvt_d_w_i8:
283283
; RV64IFD: # %bb.0:
284-
; RV64IFD-NEXT: fcvt.d.l ft0, a0
284+
; RV64IFD-NEXT: fcvt.d.w ft0, a0
285285
; RV64IFD-NEXT: fmv.x.d a0, ft0
286286
; RV64IFD-NEXT: ret
287287
%1 = sitofp i8 %a to double
@@ -301,7 +301,7 @@ define double @fcvt_d_wu_i8(i8 zeroext %a) nounwind {
301301
;
302302
; RV64IFD-LABEL: fcvt_d_wu_i8:
303303
; RV64IFD: # %bb.0:
304-
; RV64IFD-NEXT: fcvt.d.lu ft0, a0
304+
; RV64IFD-NEXT: fcvt.d.wu ft0, a0
305305
; RV64IFD-NEXT: fmv.x.d a0, ft0
306306
; RV64IFD-NEXT: ret
307307
%1 = uitofp i8 %a to double
@@ -321,7 +321,7 @@ define double @fcvt_d_w_i16(i16 signext %a) nounwind {
321321
;
322322
; RV64IFD-LABEL: fcvt_d_w_i16:
323323
; RV64IFD: # %bb.0:
324-
; RV64IFD-NEXT: fcvt.d.l ft0, a0
324+
; RV64IFD-NEXT: fcvt.d.w ft0, a0
325325
; RV64IFD-NEXT: fmv.x.d a0, ft0
326326
; RV64IFD-NEXT: ret
327327
%1 = sitofp i16 %a to double
@@ -341,7 +341,7 @@ define double @fcvt_d_wu_i16(i16 zeroext %a) nounwind {
341341
;
342342
; RV64IFD-LABEL: fcvt_d_wu_i16:
343343
; RV64IFD: # %bb.0:
344-
; RV64IFD-NEXT: fcvt.d.lu ft0, a0
344+
; RV64IFD-NEXT: fcvt.d.wu ft0, a0
345345
; RV64IFD-NEXT: fmv.x.d a0, ft0
346346
; RV64IFD-NEXT: ret
347347
%1 = uitofp i16 %a to double

llvm/test/CodeGen/RISCV/float-convert.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ define float @fcvt_s_w_i8(i8 signext %a) nounwind {
202202
;
203203
; RV64IF-LABEL: fcvt_s_w_i8:
204204
; RV64IF: # %bb.0:
205-
; RV64IF-NEXT: fcvt.s.l ft0, a0
205+
; RV64IF-NEXT: fcvt.s.w ft0, a0
206206
; RV64IF-NEXT: fmv.x.w a0, ft0
207207
; RV64IF-NEXT: ret
208208
%1 = sitofp i8 %a to float
@@ -218,7 +218,7 @@ define float @fcvt_s_wu_i8(i8 zeroext %a) nounwind {
218218
;
219219
; RV64IF-LABEL: fcvt_s_wu_i8:
220220
; RV64IF: # %bb.0:
221-
; RV64IF-NEXT: fcvt.s.lu ft0, a0
221+
; RV64IF-NEXT: fcvt.s.wu ft0, a0
222222
; RV64IF-NEXT: fmv.x.w a0, ft0
223223
; RV64IF-NEXT: ret
224224
%1 = uitofp i8 %a to float
@@ -234,7 +234,7 @@ define float @fcvt_s_w_i16(i16 signext %a) nounwind {
234234
;
235235
; RV64IF-LABEL: fcvt_s_w_i16:
236236
; RV64IF: # %bb.0:
237-
; RV64IF-NEXT: fcvt.s.l ft0, a0
237+
; RV64IF-NEXT: fcvt.s.w ft0, a0
238238
; RV64IF-NEXT: fmv.x.w a0, ft0
239239
; RV64IF-NEXT: ret
240240
%1 = sitofp i16 %a to float
@@ -250,7 +250,7 @@ define float @fcvt_s_wu_i16(i16 zeroext %a) nounwind {
250250
;
251251
; RV64IF-LABEL: fcvt_s_wu_i16:
252252
; RV64IF: # %bb.0:
253-
; RV64IF-NEXT: fcvt.s.lu ft0, a0
253+
; RV64IF-NEXT: fcvt.s.wu ft0, a0
254254
; RV64IF-NEXT: fmv.x.w a0, ft0
255255
; RV64IF-NEXT: ret
256256
%1 = uitofp i16 %a to float

llvm/test/CodeGen/RISCV/half-convert.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -213,12 +213,12 @@ define half @fcvt_h_si_signext(i16 signext %a) nounwind {
213213
;
214214
; RV64IZFH-LABEL: fcvt_h_si_signext:
215215
; RV64IZFH: # %bb.0:
216-
; RV64IZFH-NEXT: fcvt.h.l fa0, a0
216+
; RV64IZFH-NEXT: fcvt.h.w fa0, a0
217217
; RV64IZFH-NEXT: ret
218218
;
219219
; RV64IDZFH-LABEL: fcvt_h_si_signext:
220220
; RV64IDZFH: # %bb.0:
221-
; RV64IDZFH-NEXT: fcvt.h.l fa0, a0
221+
; RV64IDZFH-NEXT: fcvt.h.w fa0, a0
222222
; RV64IDZFH-NEXT: ret
223223
%1 = sitofp i16 %a to half
224224
ret half %1
@@ -273,12 +273,12 @@ define half @fcvt_h_ui_zeroext(i16 zeroext %a) nounwind {
273273
;
274274
; RV64IZFH-LABEL: fcvt_h_ui_zeroext:
275275
; RV64IZFH: # %bb.0:
276-
; RV64IZFH-NEXT: fcvt.h.lu fa0, a0
276+
; RV64IZFH-NEXT: fcvt.h.wu fa0, a0
277277
; RV64IZFH-NEXT: ret
278278
;
279279
; RV64IDZFH-LABEL: fcvt_h_ui_zeroext:
280280
; RV64IDZFH: # %bb.0:
281-
; RV64IDZFH-NEXT: fcvt.h.lu fa0, a0
281+
; RV64IDZFH-NEXT: fcvt.h.wu fa0, a0
282282
; RV64IDZFH-NEXT: ret
283283
%1 = uitofp i16 %a to half
284284
ret half %1

llvm/test/CodeGen/RISCV/rv64m-exhaustive-w-insts.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,7 +1091,7 @@ define zeroext i32 @zext_remw_zext_zext(i32 zeroext %a, i32 zeroext %b) nounwind
10911091
define signext i8 @sext_remw_sext_sext_i8(i8 signext %a, i8 signext %b) nounwind {
10921092
; RV64IM-LABEL: sext_remw_sext_sext_i8:
10931093
; RV64IM: # %bb.0:
1094-
; RV64IM-NEXT: rem a0, a0, a1
1094+
; RV64IM-NEXT: remw a0, a0, a1
10951095
; RV64IM-NEXT: slli a0, a0, 56
10961096
; RV64IM-NEXT: srai a0, a0, 56
10971097
; RV64IM-NEXT: ret
@@ -1102,7 +1102,7 @@ define signext i8 @sext_remw_sext_sext_i8(i8 signext %a, i8 signext %b) nounwind
11021102
define signext i16 @sext_remw_sext_sext_i16(i16 signext %a, i16 signext %b) nounwind {
11031103
; RV64IM-LABEL: sext_remw_sext_sext_i16:
11041104
; RV64IM: # %bb.0:
1105-
; RV64IM-NEXT: rem a0, a0, a1
1105+
; RV64IM-NEXT: remw a0, a0, a1
11061106
; RV64IM-NEXT: slli a0, a0, 48
11071107
; RV64IM-NEXT: srai a0, a0, 48
11081108
; RV64IM-NEXT: ret

0 commit comments

Comments
 (0)