@@ -388,47 +388,39 @@ static bool isSupportedReturnType(Type *T, const RISCVSubtarget &Subtarget,
388388 return false ;
389389}
390390
391- bool RISCVCallLowering::lowerReturnVal (MachineIRBuilder &MIRBuilder,
392- const Value *Val,
393- ArrayRef<Register> VRegs,
394- MachineInstrBuilder &Ret) const {
395- if (!Val)
396- return true ;
397-
398- const RISCVSubtarget &Subtarget =
399- MIRBuilder.getMF ().getSubtarget <RISCVSubtarget>();
400- if (!isSupportedReturnType (Val->getType (), Subtarget, /* IsLowerRetVal=*/ true ))
401- return false ;
402-
403- MachineFunction &MF = MIRBuilder.getMF ();
404- const DataLayout &DL = MF.getDataLayout ();
405- const Function &F = MF.getFunction ();
406- CallingConv::ID CC = F.getCallingConv ();
407-
408- ArgInfo OrigRetInfo (VRegs, Val->getType (), 0 );
409- setArgFlags (OrigRetInfo, AttributeList::ReturnIndex, DL, F);
410-
411- SmallVector<ArgInfo, 4 > SplitRetInfos;
412- splitToValueTypes (OrigRetInfo, SplitRetInfos, DL, CC);
413-
414- RVVArgDispatcher Dispatcher{&MF, getTLI<RISCVTargetLowering>(),
415- ArrayRef (F.getReturnType ())};
416- RISCVOutgoingValueAssigner Assigner (
417- CC == CallingConv::Fast ? RISCV::CC_RISCV_FastCC : RISCV::CC_RISCV,
418- /* IsRet=*/ true , Dispatcher);
419- RISCVOutgoingValueHandler Handler (MIRBuilder, MF.getRegInfo (), Ret);
420- return determineAndHandleAssignments (Handler, Assigner, SplitRetInfos,
421- MIRBuilder, CC, F.isVarArg ());
422- }
423-
424391bool RISCVCallLowering::lowerReturn (MachineIRBuilder &MIRBuilder,
425392 const Value *Val, ArrayRef<Register> VRegs,
426393 FunctionLoweringInfo &FLI) const {
427394 assert (!Val == VRegs.empty () && " Return value without a vreg" );
428395 MachineInstrBuilder Ret = MIRBuilder.buildInstrNoInsert (RISCV::PseudoRET);
429396
430- if (!lowerReturnVal (MIRBuilder, Val, VRegs, Ret))
431- return false ;
397+ if (!VRegs.empty ()) {
398+ const RISCVSubtarget &Subtarget =
399+ MIRBuilder.getMF ().getSubtarget <RISCVSubtarget>();
400+ if (!isSupportedReturnType (Val->getType (), Subtarget, /* IsLowerRetVal=*/ true ))
401+ return false ;
402+
403+ MachineFunction &MF = MIRBuilder.getMF ();
404+ const DataLayout &DL = MF.getDataLayout ();
405+ const Function &F = MF.getFunction ();
406+ CallingConv::ID CC = F.getCallingConv ();
407+
408+ ArgInfo OrigRetInfo (VRegs, Val->getType (), 0 );
409+ setArgFlags (OrigRetInfo, AttributeList::ReturnIndex, DL, F);
410+
411+ SmallVector<ArgInfo, 4 > SplitRetInfos;
412+ splitToValueTypes (OrigRetInfo, SplitRetInfos, DL, CC);
413+
414+ RVVArgDispatcher Dispatcher{&MF, getTLI<RISCVTargetLowering>(),
415+ ArrayRef (F.getReturnType ())};
416+ RISCVOutgoingValueAssigner Assigner (
417+ CC == CallingConv::Fast ? RISCV::CC_RISCV_FastCC : RISCV::CC_RISCV,
418+ /* IsRet=*/ true , Dispatcher);
419+ RISCVOutgoingValueHandler Handler (MIRBuilder, MF.getRegInfo (), Ret);
420+ if (!determineAndHandleAssignments (Handler, Assigner, SplitRetInfos,
421+ MIRBuilder, CC, F.isVarArg ()))
422+ return false ;
423+ }
432424
433425 MIRBuilder.insertInstr (Ret);
434426 return true ;
0 commit comments