@@ -16452,13 +16452,13 @@ bool RISCV::CC_RISCV(const DataLayout &DL, RISCVABI::ABI ABI, unsigned ValNo,
16452
16452
// stack. LowerCall/LowerFormalArguments/LowerReturn must recognise these
16453
16453
// cases.
16454
16454
Register Reg = State.AllocateReg(ArgGPRs);
16455
- LocVT = MVT::i32;
16456
16455
if (!Reg) {
16457
16456
unsigned StackOffset = State.AllocateStack(8, Align(8));
16458
16457
State.addLoc(
16459
16458
CCValAssign::getMem(ValNo, ValVT, StackOffset, LocVT, LocInfo));
16460
16459
return false;
16461
16460
}
16461
+ LocVT = MVT::i32;
16462
16462
if (!State.AllocateReg(ArgGPRs))
16463
16463
State.AllocateStack(4, Align(4));
16464
16464
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
@@ -16777,15 +16777,6 @@ static SDValue unpackF64OnRV32DSoftABI(SelectionDAG &DAG, SDValue Chain,
16777
16777
MachineFrameInfo &MFI = MF.getFrameInfo();
16778
16778
MachineRegisterInfo &RegInfo = MF.getRegInfo();
16779
16779
16780
- if (VA.isMemLoc()) {
16781
- // f64 is passed on the stack.
16782
- int FI =
16783
- MFI.CreateFixedObject(8, VA.getLocMemOffset(), /*IsImmutable=*/true);
16784
- SDValue FIN = DAG.getFrameIndex(FI, MVT::i32);
16785
- return DAG.getLoad(MVT::f64, DL, Chain, FIN,
16786
- MachinePointerInfo::getFixedStack(MF, FI));
16787
- }
16788
-
16789
16780
assert(VA.isRegLoc() && "Expected register VA assignment");
16790
16781
16791
16782
Register LoVReg = RegInfo.createVirtualRegister(&RISCV::GPRRegClass);
@@ -17298,9 +17289,8 @@ SDValue RISCVTargetLowering::LowerCall(CallLoweringInfo &CLI,
17298
17289
ISD::ArgFlagsTy Flags = Outs[i].Flags;
17299
17290
17300
17291
// Handle passing f64 on RV32D with a soft float ABI as a special case.
17301
- bool IsF64OnRV32DSoftABI =
17302
- VA.getLocVT() == MVT::i32 && VA.getValVT() == MVT::f64;
17303
- if (IsF64OnRV32DSoftABI && VA.isRegLoc()) {
17292
+ if (VA.getLocVT() == MVT::i32 && VA.getValVT() == MVT::f64) {
17293
+ assert(VA.isRegLoc() && "Expected register VA assignment");
17304
17294
SDValue SplitF64 = DAG.getNode(
17305
17295
RISCVISD::SplitF64, DL, DAG.getVTList(MVT::i32, MVT::i32), ArgValue);
17306
17296
SDValue Lo = SplitF64.getValue(0);
@@ -17326,9 +17316,6 @@ SDValue RISCVTargetLowering::LowerCall(CallLoweringInfo &CLI,
17326
17316
continue;
17327
17317
}
17328
17318
17329
- // IsF64OnRV32DSoftABI && VA.isMemLoc() is handled below in the same way
17330
- // as any other MemLoc.
17331
-
17332
17319
// Promote the value if needed.
17333
17320
// For now, only handle fully promoted and indirect arguments.
17334
17321
if (VA.getLocInfo() == CCValAssign::Indirect) {
0 commit comments