mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Move some more hooks to TargetFrameInfo
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119904 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -764,3 +764,38 @@ X86FrameInfo::getInitialFrameState(std::vector<MachineMove> &Moves) const {
|
||||
MachineLocation CSSrc(RI->getRARegister());
|
||||
Moves.push_back(MachineMove(0, CSDst, CSSrc));
|
||||
}
|
||||
|
||||
int X86FrameInfo::getFrameIndexOffset(const MachineFunction &MF, int FI) const {
|
||||
const X86RegisterInfo *RI =
|
||||
static_cast<const X86RegisterInfo*>(MF.getTarget().getRegisterInfo());
|
||||
const MachineFrameInfo *MFI = MF.getFrameInfo();
|
||||
int Offset = MFI->getObjectOffset(FI) - getOffsetOfLocalArea();
|
||||
uint64_t StackSize = MFI->getStackSize();
|
||||
|
||||
if (RI->needsStackRealignment(MF)) {
|
||||
if (FI < 0) {
|
||||
// Skip the saved EBP.
|
||||
Offset += RI->getSlotSize();
|
||||
} else {
|
||||
unsigned Align = MFI->getObjectAlignment(FI);
|
||||
assert((-(Offset + StackSize)) % Align == 0);
|
||||
Align = 0;
|
||||
return Offset + StackSize;
|
||||
}
|
||||
// FIXME: Support tail calls
|
||||
} else {
|
||||
if (!hasFP(MF))
|
||||
return Offset + StackSize;
|
||||
|
||||
// Skip the saved EBP.
|
||||
Offset += RI->getSlotSize();
|
||||
|
||||
// Skip the RETADDR move area
|
||||
const X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>();
|
||||
int TailCallReturnAddrDelta = X86FI->getTCReturnAddrDelta();
|
||||
if (TailCallReturnAddrDelta < 0)
|
||||
Offset -= TailCallReturnAddrDelta;
|
||||
}
|
||||
|
||||
return Offset;
|
||||
}
|
||||
|
@@ -44,6 +44,7 @@ public:
|
||||
bool hasReservedCallFrame(const MachineFunction &MF) const;
|
||||
|
||||
void getInitialFrameState(std::vector<MachineMove> &Moves) const;
|
||||
int getFrameIndexOffset(const MachineFunction &MF, int FI) const;
|
||||
};
|
||||
|
||||
} // End llvm namespace
|
||||
|
@@ -464,41 +464,6 @@ bool X86RegisterInfo::hasReservedSpillSlot(const MachineFunction &MF,
|
||||
return false;
|
||||
}
|
||||
|
||||
int
|
||||
X86RegisterInfo::getFrameIndexOffset(const MachineFunction &MF, int FI) const {
|
||||
const TargetFrameInfo *TFI = MF.getTarget().getFrameInfo();
|
||||
const MachineFrameInfo *MFI = MF.getFrameInfo();
|
||||
int Offset = MFI->getObjectOffset(FI) - TFI->getOffsetOfLocalArea();
|
||||
uint64_t StackSize = MFI->getStackSize();
|
||||
|
||||
if (needsStackRealignment(MF)) {
|
||||
if (FI < 0) {
|
||||
// Skip the saved EBP.
|
||||
Offset += SlotSize;
|
||||
} else {
|
||||
unsigned Align = MFI->getObjectAlignment(FI);
|
||||
assert((-(Offset + StackSize)) % Align == 0);
|
||||
Align = 0;
|
||||
return Offset + StackSize;
|
||||
}
|
||||
// FIXME: Support tail calls
|
||||
} else {
|
||||
if (!TFI->hasFP(MF))
|
||||
return Offset + StackSize;
|
||||
|
||||
// Skip the saved EBP.
|
||||
Offset += SlotSize;
|
||||
|
||||
// Skip the RETADDR move area
|
||||
const X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>();
|
||||
int TailCallReturnAddrDelta = X86FI->getTCReturnAddrDelta();
|
||||
if (TailCallReturnAddrDelta < 0)
|
||||
Offset -= TailCallReturnAddrDelta;
|
||||
}
|
||||
|
||||
return Offset;
|
||||
}
|
||||
|
||||
static unsigned getSUBriOpcode(unsigned is64Bit, int64_t Imm) {
|
||||
if (is64Bit) {
|
||||
if (isInt<8>(Imm))
|
||||
@@ -631,7 +596,7 @@ X86RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
const MachineFrameInfo *MFI = MF.getFrameInfo();
|
||||
FIOffset = MFI->getObjectOffset(FrameIndex) - TFI->getOffsetOfLocalArea();
|
||||
} else
|
||||
FIOffset = getFrameIndexOffset(MF, FrameIndex);
|
||||
FIOffset = TFI->getFrameIndexOffset(MF, FrameIndex);
|
||||
|
||||
if (MI.getOperand(i+3).isImm()) {
|
||||
// Offset is a 32-bit integer.
|
||||
|
@@ -135,8 +135,6 @@ public:
|
||||
// FIXME: Move to FrameInfok
|
||||
unsigned getSlotSize() const { return SlotSize; }
|
||||
|
||||
int getFrameIndexOffset(const MachineFunction &MF, int FI) const;
|
||||
|
||||
// Exception handling queries.
|
||||
unsigned getEHExceptionRegister() const;
|
||||
unsigned getEHHandlerRegister() const;
|
||||
|
Reference in New Issue
Block a user