diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Target/X86/X86CallLowering.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/lib/Target/X86/X86CallLowering.cpp | 70 |
1 files changed, 34 insertions, 36 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/X86/X86CallLowering.cpp b/contrib/llvm-project/llvm/lib/Target/X86/X86CallLowering.cpp index 319dc9470604..53f57565d56e 100644 --- a/contrib/llvm-project/llvm/lib/Target/X86/X86CallLowering.cpp +++ b/contrib/llvm-project/llvm/lib/Target/X86/X86CallLowering.cpp @@ -95,15 +95,14 @@ bool X86CallLowering::splitToValueTypes(const ArgInfo &OrigArg, namespace { -struct OutgoingValueHandler : public CallLowering::ValueHandler { - OutgoingValueHandler(MachineIRBuilder &MIRBuilder, MachineRegisterInfo &MRI, - MachineInstrBuilder &MIB, CCAssignFn *AssignFn) - : ValueHandler(MIRBuilder, MRI, AssignFn), MIB(MIB), +struct X86OutgoingValueHandler : public CallLowering::OutgoingValueHandler { + X86OutgoingValueHandler(MachineIRBuilder &MIRBuilder, + MachineRegisterInfo &MRI, MachineInstrBuilder &MIB, + CCAssignFn *AssignFn) + : OutgoingValueHandler(MIRBuilder, MRI, AssignFn), MIB(MIB), DL(MIRBuilder.getMF().getDataLayout()), STI(MIRBuilder.getMF().getSubtarget<X86Subtarget>()) {} - bool isIncomingArgumentHandler() const override { return false; } - Register getStackAddress(uint64_t Size, int64_t Offset, MachinePointerInfo &MPO) override { LLT p0 = LLT::pointer(0, DL.getPointerSizeInBits(0)); @@ -135,9 +134,10 @@ struct OutgoingValueHandler : public CallLowering::ValueHandler { unsigned ValSize = VA.getValVT().getSizeInBits(); unsigned LocSize = VA.getLocVT().getSizeInBits(); if (PhysRegSize > ValSize && LocSize == ValSize) { - assert((PhysRegSize == 128 || PhysRegSize == 80) && "We expect that to be 128 bit"); - auto MIB = MIRBuilder.buildAnyExt(LLT::scalar(PhysRegSize), ValVReg); - ExtReg = MIB.getReg(0); + assert((PhysRegSize == 128 || PhysRegSize == 80) && + "We expect that to be 128 bit"); + ExtReg = + MIRBuilder.buildAnyExt(LLT::scalar(PhysRegSize), ValVReg).getReg(0); } else ExtReg = extendRegister(ValVReg, VA); @@ -149,9 +149,9 @@ struct OutgoingValueHandler : public CallLowering::ValueHandler { MachineFunction &MF = MIRBuilder.getMF(); Register ExtReg = extendRegister(ValVReg, VA); - auto MMO = MF.getMachineMemOperand(MPO, MachineMemOperand::MOStore, - VA.getLocVT().getStoreSize(), - inferAlignFromPtrInfo(MF, MPO)); + auto *MMO = MF.getMachineMemOperand(MPO, MachineMemOperand::MOStore, + VA.getLocVT().getStoreSize(), + inferAlignFromPtrInfo(MF, MPO)); MIRBuilder.buildStore(ExtReg, Addr, *MMO); } @@ -184,9 +184,9 @@ protected: } // end anonymous namespace -bool X86CallLowering::lowerReturn( - MachineIRBuilder &MIRBuilder, const Value *Val, - ArrayRef<Register> VRegs) const { +bool X86CallLowering::lowerReturn(MachineIRBuilder &MIRBuilder, + const Value *Val, ArrayRef<Register> VRegs, + FunctionLoweringInfo &FLI) const { assert(((Val && !VRegs.empty()) || (!Val && VRegs.empty())) && "Return value without a vreg"); auto MIB = MIRBuilder.buildInstrNoInsert(X86::RET).addImm(0); @@ -195,7 +195,7 @@ bool X86CallLowering::lowerReturn( MachineFunction &MF = MIRBuilder.getMF(); const Function &F = MF.getFunction(); MachineRegisterInfo &MRI = MF.getRegInfo(); - auto &DL = MF.getDataLayout(); + const DataLayout &DL = MF.getDataLayout(); LLVMContext &Ctx = Val->getType()->getContext(); const X86TargetLowering &TLI = *getTLI<X86TargetLowering>(); @@ -215,7 +215,7 @@ bool X86CallLowering::lowerReturn( return false; } - OutgoingValueHandler Handler(MIRBuilder, MRI, MIB, RetCC_X86); + X86OutgoingValueHandler Handler(MIRBuilder, MRI, MIB, RetCC_X86); if (!handleAssignments(MIRBuilder, SplitArgs, Handler)) return false; } @@ -226,14 +226,12 @@ bool X86CallLowering::lowerReturn( namespace { -struct IncomingValueHandler : public CallLowering::ValueHandler { - IncomingValueHandler(MachineIRBuilder &MIRBuilder, MachineRegisterInfo &MRI, - CCAssignFn *AssignFn) - : ValueHandler(MIRBuilder, MRI, AssignFn), +struct X86IncomingValueHandler : public CallLowering::IncomingValueHandler { + X86IncomingValueHandler(MachineIRBuilder &MIRBuilder, + MachineRegisterInfo &MRI, CCAssignFn *AssignFn) + : IncomingValueHandler(MIRBuilder, MRI, AssignFn), DL(MIRBuilder.getMF().getDataLayout()) {} - bool isIncomingArgumentHandler() const override { return true; } - Register getStackAddress(uint64_t Size, int64_t Offset, MachinePointerInfo &MPO) override { auto &MFI = MIRBuilder.getMF().getFrameInfo(); @@ -248,7 +246,7 @@ struct IncomingValueHandler : public CallLowering::ValueHandler { void assignValueToAddress(Register ValVReg, Register Addr, uint64_t Size, MachinePointerInfo &MPO, CCValAssign &VA) override { MachineFunction &MF = MIRBuilder.getMF(); - auto MMO = MF.getMachineMemOperand( + auto *MMO = MF.getMachineMemOperand( MPO, MachineMemOperand::MOLoad | MachineMemOperand::MOInvariant, Size, inferAlignFromPtrInfo(MF, MPO)); MIRBuilder.buildLoad(ValVReg, Addr, *MMO); @@ -298,10 +296,10 @@ protected: const DataLayout &DL; }; -struct FormalArgHandler : public IncomingValueHandler { +struct FormalArgHandler : public X86IncomingValueHandler { FormalArgHandler(MachineIRBuilder &MIRBuilder, MachineRegisterInfo &MRI, CCAssignFn *AssignFn) - : IncomingValueHandler(MIRBuilder, MRI, AssignFn) {} + : X86IncomingValueHandler(MIRBuilder, MRI, AssignFn) {} void markPhysRegUsed(unsigned PhysReg) override { MIRBuilder.getMRI()->addLiveIn(PhysReg); @@ -309,10 +307,10 @@ struct FormalArgHandler : public IncomingValueHandler { } }; -struct CallReturnHandler : public IncomingValueHandler { +struct CallReturnHandler : public X86IncomingValueHandler { CallReturnHandler(MachineIRBuilder &MIRBuilder, MachineRegisterInfo &MRI, CCAssignFn *AssignFn, MachineInstrBuilder &MIB) - : IncomingValueHandler(MIRBuilder, MRI, AssignFn), MIB(MIB) {} + : X86IncomingValueHandler(MIRBuilder, MRI, AssignFn), MIB(MIB) {} void markPhysRegUsed(unsigned PhysReg) override { MIB.addDef(PhysReg, RegState::Implicit); @@ -324,9 +322,10 @@ protected: } // end anonymous namespace -bool X86CallLowering::lowerFormalArguments( - MachineIRBuilder &MIRBuilder, const Function &F, - ArrayRef<ArrayRef<Register>> VRegs) const { +bool X86CallLowering::lowerFormalArguments(MachineIRBuilder &MIRBuilder, + const Function &F, + ArrayRef<ArrayRef<Register>> VRegs, + FunctionLoweringInfo &FLI) const { if (F.arg_empty()) return true; @@ -340,8 +339,7 @@ bool X86CallLowering::lowerFormalArguments( SmallVector<ArgInfo, 8> SplitArgs; unsigned Idx = 0; - for (auto &Arg : F.args()) { - + for (const auto &Arg : F.args()) { // TODO: handle not simple cases. if (Arg.hasAttribute(Attribute::ByVal) || Arg.hasAttribute(Attribute::InReg) || @@ -380,10 +378,10 @@ bool X86CallLowering::lowerCall(MachineIRBuilder &MIRBuilder, MachineFunction &MF = MIRBuilder.getMF(); const Function &F = MF.getFunction(); MachineRegisterInfo &MRI = MF.getRegInfo(); - auto &DL = F.getParent()->getDataLayout(); + const DataLayout &DL = F.getParent()->getDataLayout(); const X86Subtarget &STI = MF.getSubtarget<X86Subtarget>(); const TargetInstrInfo &TII = *STI.getInstrInfo(); - auto TRI = STI.getRegisterInfo(); + const X86RegisterInfo *TRI = STI.getRegisterInfo(); // Handle only Linux C, X86_64_SysV calling conventions for now. if (!STI.isTargetLinux() || !(Info.CallConv == CallingConv::C || @@ -421,7 +419,7 @@ bool X86CallLowering::lowerCall(MachineIRBuilder &MIRBuilder, return false; } // Do the actual argument marshalling. - OutgoingValueHandler Handler(MIRBuilder, MRI, MIB, CC_X86); + X86OutgoingValueHandler Handler(MIRBuilder, MRI, MIB, CC_X86); if (!handleAssignments(MIRBuilder, SplitArgs, Handler)) return false; |