Skip to content

Commit 5899f5e

Browse files
committed
fixup! Use computeNumSignBits.
1 parent 69746ca commit 5899f5e

File tree

3 files changed

+33
-62
lines changed

3 files changed

+33
-62
lines changed

llvm/lib/Target/RISCV/GISel/RISCVInstructionSelector.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,15 +259,18 @@ RISCVInstructionSelector::selectSExtBits(MachineOperand &Root,
259259
unsigned Bits) const {
260260
if (!Root.isReg())
261261
return std::nullopt;
262-
MachineInstr *RootDef = MRI->getVRegDef(Root.getReg());
262+
Register RootReg = Root.getReg();
263+
MachineInstr *RootDef = MRI->getVRegDef(RootReg);
263264

264265
if (RootDef->getOpcode() == TargetOpcode::G_SEXT_INREG &&
265266
RootDef->getOperand(2).getImm() == Bits) {
266267
return {
267268
{[=](MachineInstrBuilder &MIB) { MIB.add(RootDef->getOperand(1)); }}};
268269
}
269270

270-
// TODO: Use computeNumSignBits.
271+
unsigned Size = MRI->getType(RootReg).getScalarSizeInBits();
272+
if ((Size - KB->computeNumSignBits(RootReg)) < Bits)
273+
return {{[=](MachineInstrBuilder &MIB) { MIB.add(Root); }}};
271274

272275
return std::nullopt;
273276
}

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

Lines changed: 14 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -78,17 +78,11 @@ define double @fcvt_d_w(i32 %a) nounwind {
7878
}
7979

8080
define double @fcvt_d_w_load(ptr %p) nounwind {
81-
; RV32IFD-LABEL: fcvt_d_w_load:
82-
; RV32IFD: # %bb.0:
83-
; RV32IFD-NEXT: lw a0, 0(a0)
84-
; RV32IFD-NEXT: fcvt.d.w fa0, a0
85-
; RV32IFD-NEXT: ret
86-
;
87-
; RV64IFD-LABEL: fcvt_d_w_load:
88-
; RV64IFD: # %bb.0:
89-
; RV64IFD-NEXT: lw a0, 0(a0)
90-
; RV64IFD-NEXT: fcvt.d.l fa0, a0
91-
; RV64IFD-NEXT: ret
81+
; CHECKIFD-LABEL: fcvt_d_w_load:
82+
; CHECKIFD: # %bb.0:
83+
; CHECKIFD-NEXT: lw a0, 0(a0)
84+
; CHECKIFD-NEXT: fcvt.d.w fa0, a0
85+
; CHECKIFD-NEXT: ret
9286
%a = load i32, ptr %p
9387
%1 = sitofp i32 %a to double
9488
ret double %1
@@ -242,15 +236,10 @@ define double @fmv_d_x(i64 %a, i64 %b) nounwind {
242236
}
243237

244238
define double @fcvt_d_w_i8(i8 signext %a) nounwind {
245-
; RV32IFD-LABEL: fcvt_d_w_i8:
246-
; RV32IFD: # %bb.0:
247-
; RV32IFD-NEXT: fcvt.d.w fa0, a0
248-
; RV32IFD-NEXT: ret
249-
;
250-
; RV64IFD-LABEL: fcvt_d_w_i8:
251-
; RV64IFD: # %bb.0:
252-
; RV64IFD-NEXT: fcvt.d.l fa0, a0
253-
; RV64IFD-NEXT: ret
239+
; CHECKIFD-LABEL: fcvt_d_w_i8:
240+
; CHECKIFD: # %bb.0:
241+
; CHECKIFD-NEXT: fcvt.d.w fa0, a0
242+
; CHECKIFD-NEXT: ret
254243
%1 = sitofp i8 %a to double
255244
ret double %1
256245
}
@@ -265,15 +254,10 @@ define double @fcvt_d_wu_i8(i8 zeroext %a) nounwind {
265254
}
266255

267256
define double @fcvt_d_w_i16(i16 signext %a) nounwind {
268-
; RV32IFD-LABEL: fcvt_d_w_i16:
269-
; RV32IFD: # %bb.0:
270-
; RV32IFD-NEXT: fcvt.d.w fa0, a0
271-
; RV32IFD-NEXT: ret
272-
;
273-
; RV64IFD-LABEL: fcvt_d_w_i16:
274-
; RV64IFD: # %bb.0:
275-
; RV64IFD-NEXT: fcvt.d.l fa0, a0
276-
; RV64IFD-NEXT: ret
257+
; CHECKIFD-LABEL: fcvt_d_w_i16:
258+
; CHECKIFD: # %bb.0:
259+
; CHECKIFD-NEXT: fcvt.d.w fa0, a0
260+
; CHECKIFD-NEXT: ret
277261
%1 = sitofp i16 %a to double
278262
ret double %1
279263
}
@@ -298,7 +282,7 @@ define signext i32 @fcvt_d_w_demanded_bits(i32 signext %0, ptr %1) nounwind {
298282
; RV64IFD-LABEL: fcvt_d_w_demanded_bits:
299283
; RV64IFD: # %bb.0:
300284
; RV64IFD-NEXT: addiw a0, a0, 1
301-
; RV64IFD-NEXT: fcvt.d.l fa5, a0
285+
; RV64IFD-NEXT: fcvt.d.w fa5, a0
302286
; RV64IFD-NEXT: fsd fa5, 0(a1)
303287
; RV64IFD-NEXT: ret
304288
%3 = add i32 %0, 1

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

Lines changed: 14 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -81,17 +81,11 @@ define float @fcvt_s_w(i32 %a) nounwind {
8181
}
8282

8383
define float @fcvt_s_w_load(ptr %p) nounwind {
84-
; RV32IF-LABEL: fcvt_s_w_load:
85-
; RV32IF: # %bb.0:
86-
; RV32IF-NEXT: lw a0, 0(a0)
87-
; RV32IF-NEXT: fcvt.s.w fa0, a0
88-
; RV32IF-NEXT: ret
89-
;
90-
; RV64IF-LABEL: fcvt_s_w_load:
91-
; RV64IF: # %bb.0:
92-
; RV64IF-NEXT: lw a0, 0(a0)
93-
; RV64IF-NEXT: fcvt.s.l fa0, a0
94-
; RV64IF-NEXT: ret
84+
; CHECKIF-LABEL: fcvt_s_w_load:
85+
; CHECKIF: # %bb.0:
86+
; CHECKIF-NEXT: lw a0, 0(a0)
87+
; CHECKIF-NEXT: fcvt.s.w fa0, a0
88+
; CHECKIF-NEXT: ret
9589
%a = load i32, ptr %p
9690
%1 = sitofp i32 %a to float
9791
ret float %1
@@ -212,15 +206,10 @@ define float @fcvt_s_lu(i64 %a) nounwind {
212206
}
213207

214208
define float @fcvt_s_w_i8(i8 signext %a) nounwind {
215-
; RV32IF-LABEL: fcvt_s_w_i8:
216-
; RV32IF: # %bb.0:
217-
; RV32IF-NEXT: fcvt.s.w fa0, a0
218-
; RV32IF-NEXT: ret
219-
;
220-
; RV64IF-LABEL: fcvt_s_w_i8:
221-
; RV64IF: # %bb.0:
222-
; RV64IF-NEXT: fcvt.s.l fa0, a0
223-
; RV64IF-NEXT: ret
209+
; CHECKIF-LABEL: fcvt_s_w_i8:
210+
; CHECKIF: # %bb.0:
211+
; CHECKIF-NEXT: fcvt.s.w fa0, a0
212+
; CHECKIF-NEXT: ret
224213
%1 = sitofp i8 %a to float
225214
ret float %1
226215
}
@@ -235,15 +224,10 @@ define float @fcvt_s_wu_i8(i8 zeroext %a) nounwind {
235224
}
236225

237226
define float @fcvt_s_w_i16(i16 signext %a) nounwind {
238-
; RV32IF-LABEL: fcvt_s_w_i16:
239-
; RV32IF: # %bb.0:
240-
; RV32IF-NEXT: fcvt.s.w fa0, a0
241-
; RV32IF-NEXT: ret
242-
;
243-
; RV64IF-LABEL: fcvt_s_w_i16:
244-
; RV64IF: # %bb.0:
245-
; RV64IF-NEXT: fcvt.s.l fa0, a0
246-
; RV64IF-NEXT: ret
227+
; CHECKIF-LABEL: fcvt_s_w_i16:
228+
; CHECKIF: # %bb.0:
229+
; CHECKIF-NEXT: fcvt.s.w fa0, a0
230+
; CHECKIF-NEXT: ret
247231
%1 = sitofp i16 %a to float
248232
ret float %1
249233
}
@@ -269,7 +253,7 @@ define signext i32 @fcvt_s_w_demanded_bits(i32 signext %0, ptr %1) nounwind {
269253
; RV64IF-LABEL: fcvt_s_w_demanded_bits:
270254
; RV64IF: # %bb.0:
271255
; RV64IF-NEXT: addiw a0, a0, 1
272-
; RV64IF-NEXT: fcvt.s.l fa5, a0
256+
; RV64IF-NEXT: fcvt.s.w fa5, a0
273257
; RV64IF-NEXT: fsw fa5, 0(a1)
274258
; RV64IF-NEXT: ret
275259
%3 = add i32 %0, 1

0 commit comments

Comments
 (0)