mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-08 18:31:23 +00:00
Custom-lower FRAMEADDR. Patch by Sasa Stankovic.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132444 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7c6a5a2c39
commit
2e591477af
@ -84,7 +84,8 @@ using namespace llvm;
|
||||
// if frame pointer elimination is disabled.
|
||||
bool MipsFrameLowering::hasFP(const MachineFunction &MF) const {
|
||||
const MachineFrameInfo *MFI = MF.getFrameInfo();
|
||||
return DisableFramePointerElim(MF) || MFI->hasVarSizedObjects();
|
||||
return DisableFramePointerElim(MF) || MFI->hasVarSizedObjects()
|
||||
|| MFI->isFrameAddressTaken();
|
||||
}
|
||||
|
||||
bool MipsFrameLowering::targetHandlesStackFrameRounding() const {
|
||||
|
@ -523,6 +523,7 @@ LowerOperation(SDValue Op, SelectionDAG &DAG) const
|
||||
case ISD::SELECT: return LowerSELECT(Op, DAG);
|
||||
case ISD::VASTART: return LowerVASTART(Op, DAG);
|
||||
case ISD::FCOPYSIGN: return LowerFCOPYSIGN(Op, DAG);
|
||||
case ISD::FRAMEADDR: return LowerFRAMEADDR(Op, DAG);
|
||||
}
|
||||
return SDValue();
|
||||
}
|
||||
@ -1551,6 +1552,19 @@ SDValue MipsTargetLowering::LowerFCOPYSIGN(SDValue Op, SelectionDAG &DAG)
|
||||
return LowerFCOPYSIGN64(Op, DAG, Subtarget->isLittle());
|
||||
}
|
||||
|
||||
SDValue MipsTargetLowering::
|
||||
LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const {
|
||||
unsigned Depth = cast<ConstantSDNode>(Op.getOperand(0))->getZExtValue();
|
||||
assert((Depth == 0) && "Frame address can only be determined for current frame.");
|
||||
|
||||
MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo();
|
||||
MFI->setFrameAddressIsTaken(true);
|
||||
EVT VT = Op.getValueType();
|
||||
DebugLoc dl = Op.getDebugLoc();
|
||||
SDValue FrameAddr = DAG.getCopyFromReg(DAG.getEntryNode(), dl, Mips::FP, VT);
|
||||
return FrameAddr;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Calling Convention Implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -125,6 +125,7 @@ namespace llvm {
|
||||
SDValue LowerSELECT(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerFCOPYSIGN(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const;
|
||||
|
||||
virtual SDValue
|
||||
LowerFormalArguments(SDValue Chain,
|
||||
|
Loading…
Reference in New Issue
Block a user