@@ -540,6 +540,7 @@ bool Z80CallLowering::lowerTailCall(MachineIRBuilder &MIRBuilder,
540540 // by -tailcallopt. For sibcalls, the memory operands for the call are
541541 // already available in the caller's incoming argument space.
542542 unsigned NumBytes = 0 ;
543+ OutgoingValueAssigner CalleeAssigner (CC_Z80);
543544 if (!IsSibCall) {
544545 // We aren't sibcalling, so we need to compute FPDiff. We need to do this
545546 // before handling assignments, because FPDiff must be known for memory
@@ -548,21 +549,19 @@ bool Z80CallLowering::lowerTailCall(MachineIRBuilder &MIRBuilder,
548549 SmallVector<CCValAssign, 16 > OutLocs;
549550 CCState OutInfo (Info.CallConv , false , MF, OutLocs, F.getContext ());
550551
551- OutgoingValueAssigner CalleeAssigner (CC_Z80);
552- determineAssignments (CalleeAssigner, OutArgs, OutInfo) ;
552+ if (! determineAssignments (CalleeAssigner, OutArgs, OutInfo))
553+ return false ;
553554
554555 // FPDiff will be negative if this tail call requires more space than we
555556 // would automatically have in our incoming argument space. Positive if we
556557 // actually shrink the stack.
557558 FPDiff = NumReusableBytes - NumBytes;
558559 }
559560
560- OutgoingValueAssigner Assigner (CC_Z80);
561561 // Do the actual argument marshalling.
562- SmallVector<unsigned , 8 > PhysRegs;
563562 TailCallArgHandler Handler (MIRBuilder, MRI, MIB, FPDiff);
564- if (!determineAndHandleAssignments (Handler, Assigner , OutArgs, MIRBuilder ,
565- Info.CallConv , Info.IsVarArg ))
563+ if (!determineAndHandleAssignments (Handler, CalleeAssigner , OutArgs,
564+ MIRBuilder, Info.CallConv , Info.IsVarArg ))
566565 return false ;
567566
568567 // If we have -tailcallopt, we need to adjust the stack. We'll do the call
@@ -684,23 +683,11 @@ bool Z80CallLowering::lowerCall(MachineIRBuilder &MIRBuilder,
684683 // implicit-define of the call instruction.
685684
686685 if (!InArgs.empty ()) {
687- SmallVector<Register, 8 > NewRegs;
688-
689686 OutgoingValueAssigner Assigner (RetCC_Z80);
690687 CallReturnHandler Handler (MIRBuilder, MRI, MIB);
691688 if (!determineAndHandleAssignments (Handler, Assigner, InArgs, MIRBuilder,
692689 Info.CallConv , Info.IsVarArg ))
693690 return false ;
694-
695- if (!NewRegs.empty ()) {
696- SmallVector<uint64_t , 8 > Indices;
697- uint64_t Index = 0 ;
698- for (Register Reg : NewRegs) {
699- Indices.push_back (Index);
700- Index += MRI.getType (Reg).getSizeInBits ();
701- }
702- MIRBuilder.buildSequence (Info.OrigRet .Regs [0 ], NewRegs, Indices);
703- }
704691 }
705692
706693 CallSeqStart.addImm (Handler.getFrameSize ())
0 commit comments