forked from OSchip/llvm-project
Change the Value argument to eliminateFrameIndex to a type-tagged value. This
is preparatory to having PEI's scavenged frame index value reuse logic properly distinguish types of frame values (e.g., whether the value is stack-pointer relative or frame-pointer relative). No functionality change. llvm-svn: 98086
This commit is contained in:
parent
15804db55c
commit
fae913adf8
|
@ -682,8 +682,9 @@ public:
|
|||
/// When -enable-frame-index-scavenging is enabled, the virtual register
|
||||
/// allocated for this frame index is returned and its value is stored in
|
||||
/// *Value.
|
||||
typedef std::pair<unsigned, int> FrameIndexValue;
|
||||
virtual unsigned eliminateFrameIndex(MachineBasicBlock::iterator MI,
|
||||
int SPAdj, int *Value = NULL,
|
||||
int SPAdj, FrameIndexValue *Value = NULL,
|
||||
RegScavenger *RS=NULL) const = 0;
|
||||
|
||||
/// emitProlog/emitEpilog - These methods insert prolog and epilog code into
|
||||
|
|
|
@ -685,7 +685,7 @@ void PEI::replaceFrameIndices(MachineFunction &Fn) {
|
|||
// If this instruction has a FrameIndex operand, we need to
|
||||
// use that target machine register info object to eliminate
|
||||
// it.
|
||||
int Value;
|
||||
TargetRegisterInfo::FrameIndexValue Value;
|
||||
unsigned VReg =
|
||||
TRI.eliminateFrameIndex(MI, SPAdj, &Value,
|
||||
FrameIndexVirtualScavenging ? NULL : RS);
|
||||
|
@ -693,7 +693,8 @@ void PEI::replaceFrameIndices(MachineFunction &Fn) {
|
|||
assert (FrameIndexVirtualScavenging &&
|
||||
"Not scavenging, but virtual returned from "
|
||||
"eliminateFrameIndex()!");
|
||||
FrameConstantRegMap[VReg] = FrameConstantEntry(Value, SPAdj);
|
||||
FrameConstantRegMap[VReg] = FrameConstantEntry(Value.second,
|
||||
SPAdj);
|
||||
}
|
||||
|
||||
// Reset the iterator if we were at the beginning of the BB.
|
||||
|
|
|
@ -1153,7 +1153,7 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
|
|||
|
||||
unsigned
|
||||
ARMBaseRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value,
|
||||
int SPAdj, FrameIndexValue *Value,
|
||||
RegScavenger *RS) const {
|
||||
unsigned i = 0;
|
||||
MachineInstr &MI = *II;
|
||||
|
@ -1205,7 +1205,10 @@ ARMBaseRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
|||
MI.getOperand(i).ChangeToRegister(FrameReg, false, false, false);
|
||||
else {
|
||||
ScratchReg = MF.getRegInfo().createVirtualRegister(ARM::GPRRegisterClass);
|
||||
if (Value) *Value = Offset;
|
||||
if (Value) {
|
||||
Value->first = FrameReg; // use the frame register as a kind indicator
|
||||
Value->second = Offset;
|
||||
}
|
||||
if (!AFI->isThumbFunction())
|
||||
emitARMRegPlusImmediate(MBB, II, MI.getDebugLoc(), ScratchReg, FrameReg,
|
||||
Offset, Pred, PredReg, TII);
|
||||
|
|
|
@ -145,7 +145,7 @@ public:
|
|||
MachineBasicBlock::iterator I) const;
|
||||
|
||||
virtual unsigned eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value = NULL,
|
||||
int SPAdj, FrameIndexValue *Value = NULL,
|
||||
RegScavenger *RS = NULL) const;
|
||||
|
||||
virtual void emitPrologue(MachineFunction &MF) const;
|
||||
|
|
|
@ -429,7 +429,7 @@ Thumb1RegisterInfo::saveScavengerRegister(MachineBasicBlock &MBB,
|
|||
|
||||
unsigned
|
||||
Thumb1RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value,
|
||||
int SPAdj, FrameIndexValue *Value,
|
||||
RegScavenger *RS) const{
|
||||
unsigned VReg = 0;
|
||||
unsigned i = 0;
|
||||
|
@ -641,9 +641,10 @@ Thumb1RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
|||
} else if (Desc.mayStore()) {
|
||||
VReg = MF.getRegInfo().createVirtualRegister(ARM::tGPRRegisterClass);
|
||||
assert (Value && "Frame index virtual allocated, but Value arg is NULL!");
|
||||
*Value = Offset;
|
||||
bool UseRR = false;
|
||||
bool TrackVReg = FrameReg == ARM::SP;
|
||||
Value->first = FrameReg; // use the frame register as a kind indicator
|
||||
Value->second = Offset;
|
||||
|
||||
if (Opcode == ARM::tSpill) {
|
||||
if (FrameReg == ARM::SP)
|
||||
|
|
|
@ -59,7 +59,7 @@ public:
|
|||
const TargetRegisterClass *RC,
|
||||
unsigned Reg) const;
|
||||
unsigned eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value = NULL,
|
||||
int SPAdj, FrameIndexValue *Value = NULL,
|
||||
RegScavenger *RS = NULL) const;
|
||||
|
||||
void emitPrologue(MachineFunction &MF) const;
|
||||
|
|
|
@ -153,7 +153,7 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
|
|||
|
||||
unsigned
|
||||
AlphaRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value,
|
||||
int SPAdj, FrameIndexValue *Value,
|
||||
RegScavenger *RS) const {
|
||||
assert(SPAdj == 0 && "Unexpected");
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ struct AlphaRegisterInfo : public AlphaGenRegisterInfo {
|
|||
MachineBasicBlock::iterator I) const;
|
||||
|
||||
unsigned eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value = NULL,
|
||||
int SPAdj, FrameIndexValue *Value = NULL,
|
||||
RegScavenger *RS = NULL) const;
|
||||
|
||||
//void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;
|
||||
|
|
|
@ -221,7 +221,7 @@ static unsigned findScratchRegister(MachineBasicBlock::iterator II,
|
|||
|
||||
unsigned
|
||||
BlackfinRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value,
|
||||
int SPAdj, FrameIndexValue *Value,
|
||||
RegScavenger *RS) const {
|
||||
MachineInstr &MI = *II;
|
||||
MachineBasicBlock &MBB = *MI.getParent();
|
||||
|
|
|
@ -65,7 +65,7 @@ namespace llvm {
|
|||
MachineBasicBlock::iterator I) const;
|
||||
|
||||
unsigned eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value = NULL,
|
||||
int SPAdj, FrameIndexValue *Value = NULL,
|
||||
RegScavenger *RS = NULL) const;
|
||||
|
||||
void processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
|
|
|
@ -328,7 +328,8 @@ SPURegisterInfo::eliminateCallFramePseudoInstr(MachineFunction &MF,
|
|||
|
||||
unsigned
|
||||
SPURegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj,
|
||||
int *Value, RegScavenger *RS) const
|
||||
FrameIndexValue *Value,
|
||||
RegScavenger *RS) const
|
||||
{
|
||||
unsigned i = 0;
|
||||
MachineInstr &MI = *II;
|
||||
|
|
|
@ -64,7 +64,7 @@ namespace llvm {
|
|||
MachineBasicBlock::iterator I) const;
|
||||
//! Convert frame indicies into machine operands
|
||||
unsigned eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj,
|
||||
int *Value = NULL,
|
||||
FrameIndexValue *Value = NULL,
|
||||
RegScavenger *RS = NULL) const;
|
||||
//! Determine the frame's layour
|
||||
void determineFrameLayout(MachineFunction &MF) const;
|
||||
|
|
|
@ -260,7 +260,7 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
|
|||
// direct reference.
|
||||
unsigned MBlazeRegisterInfo::
|
||||
eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj,
|
||||
int *Value, RegScavenger *RS) const {
|
||||
FrameIndexValue *Value, RegScavenger *RS) const {
|
||||
MachineInstr &MI = *II;
|
||||
MachineFunction &MF = *MI.getParent()->getParent();
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ struct MBlazeRegisterInfo : public MBlazeGenRegisterInfo {
|
|||
|
||||
/// Stack Frame Processing Methods
|
||||
unsigned eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value = NULL,
|
||||
int SPAdj, FrameIndexValue *Value = NULL,
|
||||
RegScavenger *RS = NULL) const;
|
||||
|
||||
void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;
|
||||
|
|
|
@ -207,7 +207,7 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
|
|||
|
||||
unsigned
|
||||
MSP430RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value,
|
||||
int SPAdj, FrameIndexValue *Value,
|
||||
RegScavenger *RS) const {
|
||||
assert(SPAdj == 0 && "Unexpected");
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ public:
|
|||
MachineBasicBlock::iterator I) const;
|
||||
|
||||
unsigned eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value = NULL,
|
||||
int SPAdj, FrameIndexValue *Value = NULL,
|
||||
RegScavenger *RS = NULL) const;
|
||||
|
||||
void emitPrologue(MachineFunction &MF) const;
|
||||
|
|
|
@ -355,7 +355,7 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
|
|||
// direct reference.
|
||||
unsigned MipsRegisterInfo::
|
||||
eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj,
|
||||
int *Value, RegScavenger *RS) const
|
||||
FrameIndexValue *Value, RegScavenger *RS) const
|
||||
{
|
||||
MachineInstr &MI = *II;
|
||||
MachineFunction &MF = *MI.getParent()->getParent();
|
||||
|
|
|
@ -64,7 +64,7 @@ struct MipsRegisterInfo : public MipsGenRegisterInfo {
|
|||
|
||||
/// Stack Frame Processing Methods
|
||||
unsigned eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value = NULL,
|
||||
int SPAdj, FrameIndexValue *Value = NULL,
|
||||
RegScavenger *RS = NULL) const;
|
||||
|
||||
void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;
|
||||
|
|
|
@ -53,7 +53,7 @@ bool PIC16RegisterInfo::hasFP(const MachineFunction &MF) const {
|
|||
|
||||
unsigned PIC16RegisterInfo::
|
||||
eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj,
|
||||
int *Value, RegScavenger *RS) const
|
||||
FrameIndexValue *Value, RegScavenger *RS) const
|
||||
{
|
||||
/* NOT YET IMPLEMENTED */
|
||||
return 0;
|
||||
|
|
|
@ -49,7 +49,7 @@ class PIC16RegisterInfo : public PIC16GenRegisterInfo {
|
|||
virtual bool hasFP(const MachineFunction &MF) const;
|
||||
|
||||
virtual unsigned eliminateFrameIndex(MachineBasicBlock::iterator MI,
|
||||
int SPAdj, int *Value = NULL,
|
||||
int SPAdj, FrameIndexValue *Value = NULL,
|
||||
RegScavenger *RS=NULL) const;
|
||||
|
||||
void eliminateCallFramePseudoInstr(MachineFunction &MF,
|
||||
|
|
|
@ -713,7 +713,7 @@ void PPCRegisterInfo::lowerCRSpilling(MachineBasicBlock::iterator II,
|
|||
|
||||
unsigned
|
||||
PPCRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value,
|
||||
int SPAdj, FrameIndexValue *Value,
|
||||
RegScavenger *RS) const {
|
||||
assert(SPAdj == 0 && "Unexpected");
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ public:
|
|||
void lowerCRSpilling(MachineBasicBlock::iterator II, unsigned FrameIndex,
|
||||
int SPAdj, RegScavenger *RS) const;
|
||||
unsigned eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value = NULL,
|
||||
int SPAdj, FrameIndexValue *Value = NULL,
|
||||
RegScavenger *RS = NULL) const;
|
||||
|
||||
/// determineFrameLayout - Determine the size of the frame and maximum call
|
||||
|
|
|
@ -78,7 +78,7 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
|
|||
|
||||
unsigned
|
||||
SparcRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value,
|
||||
int SPAdj, FrameIndexValue *Value,
|
||||
RegScavenger *RS) const {
|
||||
assert(SPAdj == 0 && "Unexpected");
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ struct SparcRegisterInfo : public SparcGenRegisterInfo {
|
|||
MachineBasicBlock::iterator I) const;
|
||||
|
||||
unsigned eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value = NULL,
|
||||
int SPAdj, FrameIndexValue *Value = NULL,
|
||||
RegScavenger *RS = NULL) const;
|
||||
|
||||
void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;
|
||||
|
|
|
@ -110,7 +110,7 @@ int SystemZRegisterInfo::getFrameIndexOffset(const MachineFunction &MF,
|
|||
|
||||
unsigned
|
||||
SystemZRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value,
|
||||
int SPAdj, FrameIndexValue *Value,
|
||||
RegScavenger *RS) const {
|
||||
assert(SPAdj == 0 && "Unxpected");
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ struct SystemZRegisterInfo : public SystemZGenRegisterInfo {
|
|||
MachineBasicBlock::iterator I) const;
|
||||
|
||||
unsigned eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value = NULL,
|
||||
int SPAdj, FrameIndexValue *Value = NULL,
|
||||
RegScavenger *RS = NULL) const;
|
||||
|
||||
|
||||
|
|
|
@ -589,7 +589,7 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
|
|||
|
||||
unsigned
|
||||
X86RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value,
|
||||
int SPAdj, FrameIndexValue *Value,
|
||||
RegScavenger *RS) const{
|
||||
assert(SPAdj == 0 && "Unexpected");
|
||||
|
||||
|
|
|
@ -143,7 +143,7 @@ public:
|
|||
MachineBasicBlock::iterator MI) const;
|
||||
|
||||
unsigned eliminateFrameIndex(MachineBasicBlock::iterator MI,
|
||||
int SPAdj, int *Value = NULL,
|
||||
int SPAdj, FrameIndexValue *Value = NULL,
|
||||
RegScavenger *RS = NULL) const;
|
||||
|
||||
void processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
|
|
|
@ -173,7 +173,7 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
|
|||
|
||||
unsigned
|
||||
XCoreRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value,
|
||||
int SPAdj, FrameIndexValue *Value,
|
||||
RegScavenger *RS) const {
|
||||
assert(SPAdj == 0 && "Unexpected");
|
||||
MachineInstr &MI = *II;
|
||||
|
|
|
@ -58,7 +58,7 @@ public:
|
|||
MachineBasicBlock::iterator I) const;
|
||||
|
||||
unsigned eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, int *Value = NULL,
|
||||
int SPAdj, FrameIndexValue *Value = NULL,
|
||||
RegScavenger *RS = NULL) const;
|
||||
|
||||
void processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
|
|
Loading…
Reference in New Issue