eliminateFrameIndex() change.

llvm-svn: 36626
This commit is contained in:
Evan Cheng 2007-05-01 09:13:03 +00:00
parent 8cd28f0fb1
commit 5662b21db1
12 changed files with 25 additions and 14 deletions

View File

@ -689,7 +689,7 @@ unsigned findScratchRegister(RegScavenger *RS, const TargetRegisterClass *RC,
} }
void ARMRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, void ARMRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
RegScavenger *RS) const{ int SPAdj, RegScavenger *RS) const{
unsigned i = 0; unsigned i = 0;
MachineInstr &MI = *II; MachineInstr &MI = *II;
MachineBasicBlock &MBB = *MI.getParent(); MachineBasicBlock &MBB = *MI.getParent();
@ -705,7 +705,7 @@ void ARMRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
unsigned FrameReg = ARM::SP; unsigned FrameReg = ARM::SP;
int FrameIndex = MI.getOperand(i).getFrameIndex(); int FrameIndex = MI.getOperand(i).getFrameIndex();
int Offset = MF.getFrameInfo()->getObjectOffset(FrameIndex) + int Offset = MF.getFrameInfo()->getObjectOffset(FrameIndex) +
MF.getFrameInfo()->getStackSize(); MF.getFrameInfo()->getStackSize() + SPAdj;
if (AFI->isGPRCalleeSavedArea1Frame(FrameIndex)) if (AFI->isGPRCalleeSavedArea1Frame(FrameIndex))
Offset -= AFI->getGPRCalleeSavedArea1Offset(); Offset -= AFI->getGPRCalleeSavedArea1Offset();
@ -714,6 +714,7 @@ void ARMRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
else if (AFI->isDPRCalleeSavedAreaFrame(FrameIndex)) else if (AFI->isDPRCalleeSavedAreaFrame(FrameIndex))
Offset -= AFI->getDPRCalleeSavedAreaOffset(); Offset -= AFI->getDPRCalleeSavedAreaOffset();
else if (hasFP(MF)) { else if (hasFP(MF)) {
assert(SPAdj == 0 && "Unexpected");
// There is alloca()'s in this function, must reference off the frame // There is alloca()'s in this function, must reference off the frame
// pointer instead. // pointer instead.
FrameReg = getFrameRegister(MF); FrameReg = getFrameRegister(MF);
@ -988,7 +989,7 @@ void ARMRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
unsigned ScratchReg = findScratchRegister(RS, &ARM::GPRRegClass, AFI); unsigned ScratchReg = findScratchRegister(RS, &ARM::GPRRegClass, AFI);
if (ScratchReg == 0) if (ScratchReg == 0)
// No register is "free". Scavenge a register. // No register is "free". Scavenge a register.
ScratchReg = RS->scavengeRegister(&ARM::GPRRegClass, II); ScratchReg = RS->scavengeRegister(&ARM::GPRRegClass, II, SPAdj);
emitARMRegPlusImmediate(MBB, II, ScratchReg, FrameReg, emitARMRegPlusImmediate(MBB, II, ScratchReg, FrameReg,
isSub ? -Offset : Offset, TII); isSub ? -Offset : Offset, TII);
MI.getOperand(i).ChangeToRegister(ScratchReg, false, false, true); MI.getOperand(i).ChangeToRegister(ScratchReg, false, false, true);

View File

@ -85,7 +85,7 @@ public:
MachineBasicBlock::iterator I) const; MachineBasicBlock::iterator I) const;
void eliminateFrameIndex(MachineBasicBlock::iterator II, void eliminateFrameIndex(MachineBasicBlock::iterator II,
RegScavenger *RS = NULL) const; int SPAdj, RegScavenger *RS = NULL) const;
void processFunctionBeforeCalleeSavedScan(MachineFunction &MF, void processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
RegScavenger *RS = NULL) const; RegScavenger *RS = NULL) const;

View File

@ -255,7 +255,9 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
//<- SP //<- SP
void AlphaRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, void AlphaRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
RegScavenger *RS) const { int SPAdj, RegScavenger *RS) const {
assert(SPAdj == 0 && "Unexpected");
unsigned i = 0; unsigned i = 0;
MachineInstr &MI = *II; MachineInstr &MI = *II;
MachineBasicBlock &MBB = *MI.getParent(); MachineBasicBlock &MBB = *MI.getParent();

View File

@ -61,7 +61,7 @@ struct AlphaRegisterInfo : public AlphaGenRegisterInfo {
MachineBasicBlock::iterator I) const; MachineBasicBlock::iterator I) const;
void eliminateFrameIndex(MachineBasicBlock::iterator II, void eliminateFrameIndex(MachineBasicBlock::iterator II,
RegScavenger *RS = NULL) const; int SPAdj, RegScavenger *RS = NULL) const;
//void processFunctionBeforeFrameFinalized(MachineFunction &MF) const; //void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;

View File

@ -177,7 +177,9 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
} }
void IA64RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, void IA64RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
RegScavenger *RS)const{ int SPAdj, RegScavenger *RS)const{
assert(SPAdj == 0 && "Unexpected");
unsigned i = 0; unsigned i = 0;
MachineInstr &MI = *II; MachineInstr &MI = *II;
MachineBasicBlock &MBB = *MI.getParent(); MachineBasicBlock &MBB = *MI.getParent();

View File

@ -60,7 +60,7 @@ struct IA64RegisterInfo : public IA64GenRegisterInfo {
MachineBasicBlock::iterator MI) const; MachineBasicBlock::iterator MI) const;
void eliminateFrameIndex(MachineBasicBlock::iterator MI, void eliminateFrameIndex(MachineBasicBlock::iterator MI,
RegScavenger *RS = NULL) const; int SPAdj, RegScavenger *RS = NULL) const;
void emitPrologue(MachineFunction &MF) const; void emitPrologue(MachineFunction &MF) const;
void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const;

View File

@ -589,7 +589,9 @@ void PPCRegisterInfo::lowerDynamicAlloc(MachineBasicBlock::iterator II) const {
} }
void PPCRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, void PPCRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
RegScavenger *RS) const { int SPAdj, RegScavenger *RS) const {
assert(SPAdj == 0 && "Unexpected");
// Get the instruction. // Get the instruction.
MachineInstr &MI = *II; MachineInstr &MI = *II;
// Get the instruction's basic block. // Get the instruction's basic block.

View File

@ -80,7 +80,7 @@ public:
void lowerDynamicAlloc(MachineBasicBlock::iterator II) const; void lowerDynamicAlloc(MachineBasicBlock::iterator II) const;
void eliminateFrameIndex(MachineBasicBlock::iterator II, void eliminateFrameIndex(MachineBasicBlock::iterator II,
RegScavenger *RS = NULL) const; int SPAdj, RegScavenger *RS = NULL) const;
/// determineFrameLayout - Determine the size of the frame and maximum call /// determineFrameLayout - Determine the size of the frame and maximum call
/// frame size. /// frame size.

View File

@ -165,7 +165,9 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
} }
void SparcRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, void SparcRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
RegScavenger *RS) const { int SPAdj, RegScavenger *RS) const {
assert(SPAdj == 0 && "Unexpected");
unsigned i = 0; unsigned i = 0;
MachineInstr &MI = *II; MachineInstr &MI = *II;
while (!MI.getOperand(i).isFrameIndex()) { while (!MI.getOperand(i).isFrameIndex()) {

View File

@ -64,7 +64,7 @@ struct SparcRegisterInfo : public SparcGenRegisterInfo {
MachineBasicBlock::iterator I) const; MachineBasicBlock::iterator I) const;
void eliminateFrameIndex(MachineBasicBlock::iterator II, void eliminateFrameIndex(MachineBasicBlock::iterator II,
RegScavenger *RS = NULL) const; int SPAdj, RegScavenger *RS = NULL) const;
void processFunctionBeforeFrameFinalized(MachineFunction &MF) const; void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;

View File

@ -986,7 +986,9 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
} }
void X86RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, void X86RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
RegScavenger *RS) const{ int SPAdj, RegScavenger *RS) const{
assert(SPAdj == 0 && "Unexpected");
unsigned i = 0; unsigned i = 0;
MachineInstr &MI = *II; MachineInstr &MI = *II;
MachineFunction &MF = *MI.getParent()->getParent(); MachineFunction &MF = *MI.getParent()->getParent();

View File

@ -94,7 +94,7 @@ public:
MachineBasicBlock::iterator MI) const; MachineBasicBlock::iterator MI) const;
void eliminateFrameIndex(MachineBasicBlock::iterator MI, void eliminateFrameIndex(MachineBasicBlock::iterator MI,
RegScavenger *RS = NULL) const; int SPAdj, RegScavenger *RS = NULL) const;
void processFunctionBeforeFrameFinalized(MachineFunction &MF) const; void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;