diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Target/M68k/GISel/M68kCallLowering.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/Target/M68k/GISel/M68kCallLowering.cpp | 40 | 
1 files changed, 30 insertions, 10 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/M68k/GISel/M68kCallLowering.cpp b/contrib/llvm-project/llvm/lib/Target/M68k/GISel/M68kCallLowering.cpp index b0ada29d1cea..e7e629516494 100644 --- a/contrib/llvm-project/llvm/lib/Target/M68k/GISel/M68kCallLowering.cpp +++ b/contrib/llvm-project/llvm/lib/Target/M68k/GISel/M68kCallLowering.cpp @@ -25,6 +25,27 @@  using namespace llvm; +namespace { + +struct M68kFormalArgHandler : public M68kIncomingValueHandler { +  M68kFormalArgHandler(MachineIRBuilder &MIRBuilder, MachineRegisterInfo &MRI) +      : M68kIncomingValueHandler(MIRBuilder, MRI) {} +}; + +struct CallReturnHandler : public M68kIncomingValueHandler { +  CallReturnHandler(MachineIRBuilder &MIRBuilder, MachineRegisterInfo &MRI, +                    MachineInstrBuilder &MIB) +      : M68kIncomingValueHandler(MIRBuilder, MRI), MIB(MIB) {} + +private: +  void assignValueToReg(Register ValVReg, Register PhysReg, +                        const CCValAssign &VA) override; + +  MachineInstrBuilder &MIB; +}; + +} // end anonymous namespace +  M68kCallLowering::M68kCallLowering(const M68kTargetLowering &TLI)      : CallLowering(&TLI) {} @@ -36,14 +57,15 @@ struct M68kOutgoingArgHandler : public CallLowering::OutgoingValueHandler {          STI(MIRBuilder.getMF().getSubtarget<M68kSubtarget>()) {}    void assignValueToReg(Register ValVReg, Register PhysReg, -                        CCValAssign VA) override { +                        const CCValAssign &VA) override {      MIB.addUse(PhysReg, RegState::Implicit);      Register ExtReg = extendRegister(ValVReg, VA);      MIRBuilder.buildCopy(PhysReg, ExtReg);    }    void assignValueToAddress(Register ValVReg, Register Addr, LLT MemTy, -                            MachinePointerInfo &MPO, CCValAssign &VA) override { +                            const MachinePointerInfo &MPO, +                            const CCValAssign &VA) override {      MachineFunction &MF = MIRBuilder.getMF();      Register ExtReg = extendRegister(ValVReg, VA); @@ -118,7 +140,7 @@ bool M68kCallLowering::lowerFormalArguments(MachineIRBuilder &MIRBuilder,    CCAssignFn *AssignFn =        TLI.getCCAssignFn(F.getCallingConv(), false, F.isVarArg());    IncomingValueAssigner ArgAssigner(AssignFn); -  FormalArgHandler ArgHandler(MIRBuilder, MRI); +  M68kFormalArgHandler ArgHandler(MIRBuilder, MRI);    return determineAndHandleAssignments(ArgHandler, ArgAssigner, SplitArgs,                                         MIRBuilder, F.getCallingConv(),                                         F.isVarArg()); @@ -126,17 +148,15 @@ bool M68kCallLowering::lowerFormalArguments(MachineIRBuilder &MIRBuilder,  void M68kIncomingValueHandler::assignValueToReg(Register ValVReg,                                                  Register PhysReg, -                                                CCValAssign VA) { +                                                const CCValAssign &VA) {    MIRBuilder.getMRI()->addLiveIn(PhysReg);    MIRBuilder.getMBB().addLiveIn(PhysReg);    IncomingValueHandler::assignValueToReg(ValVReg, PhysReg, VA);  } -void M68kIncomingValueHandler::assignValueToAddress(Register ValVReg, -                                                    Register Addr, -                                                    LLT MemTy, -                                                    MachinePointerInfo &MPO, -                                                    CCValAssign &VA) { +void M68kIncomingValueHandler::assignValueToAddress( +    Register ValVReg, Register Addr, LLT MemTy, const MachinePointerInfo &MPO, +    const CCValAssign &VA) {    MachineFunction &MF = MIRBuilder.getMF();    auto *MMO = MF.getMachineMemOperand(MPO, MachineMemOperand::MOLoad, MemTy,                                        inferAlignFromPtrInfo(MF, MPO)); @@ -161,7 +181,7 @@ Register M68kIncomingValueHandler::getStackAddress(uint64_t Size,  }  void CallReturnHandler::assignValueToReg(Register ValVReg, Register PhysReg, -                                         CCValAssign VA) { +                                         const CCValAssign &VA) {    MIB.addDef(PhysReg, RegState::Implicit);    MIRBuilder.buildCopy(ValVReg, PhysReg);  }  | 
