@@ -388,47 +388,39 @@ static bool isSupportedReturnType(Type *T, const RISCVSubtarget &Subtarget,
388
388
return false ;
389
389
}
390
390
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
-
424
391
bool RISCVCallLowering::lowerReturn (MachineIRBuilder &MIRBuilder,
425
392
const Value *Val, ArrayRef<Register> VRegs,
426
393
FunctionLoweringInfo &FLI) const {
427
394
assert (!Val == VRegs.empty () && " Return value without a vreg" );
428
395
MachineInstrBuilder Ret = MIRBuilder.buildInstrNoInsert (RISCV::PseudoRET);
429
396
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
+ }
432
424
433
425
MIRBuilder.insertInstr (Ret);
434
426
return true ;
0 commit comments