Index: lib/Target/Mips/MipsISelLowering.h =================================================================== --- lib/Target/Mips/MipsISelLowering.h +++ lib/Target/Mips/MipsISelLowering.h @@ -357,8 +357,7 @@ }; MipsCC(CallingConv::ID CallConv, const MipsSubtarget &Subtarget, - CCState &Info, - SpecialCallingConvType SpecialCallingConv = NoSpecialCallingConv); + CCState &Info); void analyzeCallOperands(const SmallVectorImpl &Outs, bool IsVarArg, bool IsSoftFloat, @@ -393,9 +392,6 @@ /// use of registers to pass byval arguments. bool useRegsForByval() const { return CallConv != CallingConv::Fast; } - /// Return the function that analyzes fixed argument list functions. - llvm::CCAssignFn *fixedArgFn() const; - const MCPhysReg *shadowRegs() const; void allocateRegs(ByValArgInfo &ByVal, unsigned ByValSize, @@ -408,10 +404,11 @@ MVT getRegVT(MVT VT, const Type *OrigTy, const SDNode *CallNode, bool IsSoftFloat) const; + SpecialCallingConvType getSpecialCallingConv(const SDNode *Callee) const; + CCState &CCInfo; CallingConv::ID CallConv; const MipsSubtarget &Subtarget; - SpecialCallingConvType SpecialCallingConv; SmallVector ByValArgs; }; protected: @@ -442,8 +439,6 @@ SDValue getTargetNode(ConstantPoolSDNode *N, EVT Ty, SelectionDAG &DAG, unsigned Flag) const; - MipsCC::SpecialCallingConvType getSpecialCallingConv(SDValue Callee) const; - // Lower Operand helpers SDValue LowerCallResult(SDValue Chain, SDValue InFlag, CallingConv::ID CallConv, bool isVarArg, Index: lib/Target/Mips/MipsISelLowering.cpp =================================================================== --- lib/Target/Mips/MipsISelLowering.cpp +++ lib/Target/Mips/MipsISelLowering.cpp @@ -2548,9 +2548,7 @@ SmallVector ArgLocs; CCState CCInfo(CallConv, IsVarArg, DAG.getMachineFunction(), ArgLocs, *DAG.getContext()); - MipsCC::SpecialCallingConvType SpecialCallingConv = - getSpecialCallingConv(Callee); - MipsCC MipsCCInfo(CallConv, Subtarget, CCInfo, SpecialCallingConv); + MipsCC MipsCCInfo(CallConv, Subtarget, CCInfo); MipsCCInfo.analyzeCallOperands(Outs, IsVarArg, Subtarget.abiUsesSoftFloat(), @@ -3514,11 +3512,12 @@ } MipsTargetLowering::MipsCC::SpecialCallingConvType - MipsTargetLowering::getSpecialCallingConv(SDValue Callee) const { +MipsTargetLowering::MipsCC::getSpecialCallingConv(const SDNode *Callee) const { MipsCC::SpecialCallingConvType SpecialCallingConv = MipsCC::NoSpecialCallingConv; if (Subtarget.inMips16HardFloat()) { - if (GlobalAddressSDNode *G = dyn_cast(Callee)) { + if (const GlobalAddressSDNode *G = + dyn_cast(Callee)) { llvm::StringRef Sym = G->getGlobal()->getName(); Function *F = G->getGlobal()->getParent()->getFunction(Sym); if (F && F->hasFnAttribute("__Mips16RetHelper")) { @@ -3529,11 +3528,10 @@ return SpecialCallingConv; } -MipsTargetLowering::MipsCC::MipsCC( - CallingConv::ID CC, const MipsSubtarget &Subtarget_, CCState &Info, - MipsCC::SpecialCallingConvType SpecialCallingConv_) - : CCInfo(Info), CallConv(CC), Subtarget(Subtarget_), - SpecialCallingConv(SpecialCallingConv_) { +MipsTargetLowering::MipsCC::MipsCC(CallingConv::ID CC, + const MipsSubtarget &Subtarget_, + CCState &Info) + : CCInfo(Info), CallConv(CC), Subtarget(Subtarget_) { // Pre-allocate reserved argument area. CCInfo.AllocateStack(reservedArgArea(), 1); } @@ -3543,11 +3541,16 @@ analyzeCallOperands(const SmallVectorImpl &Args, bool IsVarArg, bool IsSoftFloat, const SDNode *CallNode, std::vector &FuncArgs) { + MipsCC::SpecialCallingConvType SpecialCallingConv = + getSpecialCallingConv(CallNode); assert((CallConv != CallingConv::Fast || !IsVarArg) && "CallingConv::Fast shouldn't be used for vararg functions."); unsigned NumOpnds = Args.size(); - llvm::CCAssignFn *FixedFn = fixedArgFn(); + llvm::CCAssignFn *FixedFn = CC_Mips_FixedArg; + if (CallConv != CallingConv::Fast && + SpecialCallingConv == Mips16RetHelperConv) + FixedFn = CC_Mips16RetHelper; for (unsigned I = 0; I != NumOpnds; ++I) { MVT ArgVT = Args[I].VT; @@ -3581,7 +3584,6 @@ analyzeFormalArguments(const SmallVectorImpl &Args, bool IsSoftFloat, Function::const_arg_iterator FuncArg) { unsigned NumArgs = Args.size(); - llvm::CCAssignFn *FixedFn = fixedArgFn(); unsigned CurArgIdx = 0; for (unsigned I = 0; I != NumArgs; ++I) { @@ -3597,7 +3599,7 @@ MVT RegVT = getRegVT(ArgVT, FuncArg->getType(), nullptr, IsSoftFloat); - if (!FixedFn(I, ArgVT, RegVT, CCValAssign::Full, ArgFlags, CCInfo)) + if (!CC_Mips_FixedArg(I, ArgVT, RegVT, CCValAssign::Full, ArgFlags, CCInfo)) continue; #ifndef NDEBUG @@ -3642,14 +3644,6 @@ return makeArrayRef(Mips64IntRegs); } -llvm::CCAssignFn *MipsTargetLowering::MipsCC::fixedArgFn() const { - if (CallConv != CallingConv::Fast && - SpecialCallingConv == Mips16RetHelperConv) - return CC_Mips16RetHelper; - - return CC_Mips_FixedArg; -} - const MCPhysReg *MipsTargetLowering::MipsCC::shadowRegs() const { return Subtarget.isABI_O32() ? O32IntRegs : Mips64DPRegs; }