Define variables and functions in MipsFunctionInfo.

This is the first of a series of patches that attempt to simplify handling of 
stack frame objects. 

llvm-svn: 131710
This commit is contained in:
Akira Hatanaka 2011-05-20 01:17:58 +00:00
parent 552f8c4819
commit d738c0f7c9
1 changed files with 30 additions and 1 deletions

View File

@ -14,6 +14,7 @@
#ifndef MIPS_MACHINE_FUNCTION_INFO_H #ifndef MIPS_MACHINE_FUNCTION_INFO_H
#define MIPS_MACHINE_FUNCTION_INFO_H #define MIPS_MACHINE_FUNCTION_INFO_H
#include <utility>
#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/VectorExtras.h" #include "llvm/ADT/VectorExtras.h"
#include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunction.h"
@ -83,12 +84,21 @@ private:
/// VarArgsFrameIndex - FrameIndex for start of varargs area. /// VarArgsFrameIndex - FrameIndex for start of varargs area.
int VarArgsFrameIndex; int VarArgsFrameIndex;
// Range of frame object indices.
// InArgFIRange: Range of indices of all frame objects created during call to
// LowerFormalArguments.
// OutArgFIRange: Range of indices of all frame objects created during call to
// LowerCall except for the frame object for restoring $gp.
std::pair<int, int> InArgFIRange, OutArgFIRange;
int GPFI; // Index of the frame object for restoring $gp
bool HasCall; // True if function has a function call.
public: public:
MipsFunctionInfo(MachineFunction& MF) MipsFunctionInfo(MachineFunction& MF)
: FPStackOffset(0), RAStackOffset(0), CPUTopSavedRegOff(0), : FPStackOffset(0), RAStackOffset(0), CPUTopSavedRegOff(0),
FPUTopSavedRegOff(0), GPHolder(-1,-1), HasLoadArgs(false), FPUTopSavedRegOff(0), GPHolder(-1,-1), HasLoadArgs(false),
HasStoreVarArgs(false), SRetReturnReg(0), GlobalBaseReg(0), HasStoreVarArgs(false), SRetReturnReg(0), GlobalBaseReg(0),
VarArgsFrameIndex(0) VarArgsFrameIndex(0), InArgFIRange(std::make_pair(-1, 0)),
OutArgFIRange(std::make_pair(-1, 0)), GPFI(0), HasCall(false)
{} {}
int getFPStackOffset() const { return FPStackOffset; } int getFPStackOffset() const { return FPStackOffset; }
@ -103,11 +113,27 @@ public:
int getFPUTopSavedRegOff() const { return FPUTopSavedRegOff; } int getFPUTopSavedRegOff() const { return FPUTopSavedRegOff; }
void setFPUTopSavedRegOff(int Off) { FPUTopSavedRegOff = Off; } void setFPUTopSavedRegOff(int Off) { FPUTopSavedRegOff = Off; }
bool isInArgFI(int FI) const {
return FI <= InArgFIRange.first && FI >= InArgFIRange.second;
}
void setLastInArgFI(int FI) { InArgFIRange.second = FI; }
bool isOutArgFI(int FI) const {
return FI <= OutArgFIRange.first && FI >= OutArgFIRange.second;
}
void extendOutArgFIRange(int FirstFI, int LastFI) {
if (!OutArgFIRange.second)
// this must be the first time this function was called.
OutArgFIRange.first = FirstFI;
OutArgFIRange.second = LastFI;
}
int getGPStackOffset() const { return GPHolder.SPOffset; } int getGPStackOffset() const { return GPHolder.SPOffset; }
int getGPFI() const { return GPHolder.FI; } int getGPFI() const { return GPHolder.FI; }
void setGPStackOffset(int Off) { GPHolder.SPOffset = Off; } void setGPStackOffset(int Off) { GPHolder.SPOffset = Off; }
void setGPFI(int FI) { GPHolder.FI = FI; } void setGPFI(int FI) { GPHolder.FI = FI; }
bool needGPSaveRestore() const { return GPHolder.SPOffset != -1; } bool needGPSaveRestore() const { return GPHolder.SPOffset != -1; }
bool isGPFI(int FI) const { return GPFI && GPFI == FI; }
bool hasLoadArgs() const { return HasLoadArgs; } bool hasLoadArgs() const { return HasLoadArgs; }
bool hasStoreVarArgs() const { return HasStoreVarArgs; } bool hasStoreVarArgs() const { return HasStoreVarArgs; }
@ -140,6 +166,9 @@ public:
int getVarArgsFrameIndex() const { return VarArgsFrameIndex; } int getVarArgsFrameIndex() const { return VarArgsFrameIndex; }
void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; } void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; }
bool hasCall() const { return HasCall; };
void setHasCall() { HasCall = true; }
}; };
} // end of namespace llvm } // end of namespace llvm