mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-08 21:32:39 +00:00
Define variables and functions in MipsFunctionInfo.
This is the first of a series of patches that attempt to simplify handling of stack frame objects. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131710 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a166089f36
commit
da0a3571d6
@ -14,6 +14,7 @@
|
||||
#ifndef MIPS_MACHINE_FUNCTION_INFO_H
|
||||
#define MIPS_MACHINE_FUNCTION_INFO_H
|
||||
|
||||
#include <utility>
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/ADT/VectorExtras.h"
|
||||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
@ -83,12 +84,21 @@ private:
|
||||
/// VarArgsFrameIndex - FrameIndex for start of varargs area.
|
||||
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:
|
||||
MipsFunctionInfo(MachineFunction& MF)
|
||||
: FPStackOffset(0), RAStackOffset(0), CPUTopSavedRegOff(0),
|
||||
FPUTopSavedRegOff(0), GPHolder(-1,-1), HasLoadArgs(false),
|
||||
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; }
|
||||
@ -103,11 +113,27 @@ public:
|
||||
int getFPUTopSavedRegOff() const { return FPUTopSavedRegOff; }
|
||||
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 getGPFI() const { return GPHolder.FI; }
|
||||
void setGPStackOffset(int Off) { GPHolder.SPOffset = Off; }
|
||||
void setGPFI(int FI) { GPHolder.FI = FI; }
|
||||
bool needGPSaveRestore() const { return GPHolder.SPOffset != -1; }
|
||||
bool isGPFI(int FI) const { return GPFI && GPFI == FI; }
|
||||
|
||||
bool hasLoadArgs() const { return HasLoadArgs; }
|
||||
bool hasStoreVarArgs() const { return HasStoreVarArgs; }
|
||||
@ -140,6 +166,9 @@ public:
|
||||
|
||||
int getVarArgsFrameIndex() const { return VarArgsFrameIndex; }
|
||||
void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; }
|
||||
|
||||
bool hasCall() const { return HasCall; };
|
||||
void setHasCall() { HasCall = true; }
|
||||
};
|
||||
|
||||
} // end of namespace llvm
|
||||
|
Loading…
x
Reference in New Issue
Block a user