MipsMachineFunction.h [plain text]
#ifndef MIPS_MACHINE_FUNCTION_INFO_H
#define MIPS_MACHINE_FUNCTION_INFO_H
#include "MipsSubtarget.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/ValueMap.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineMemOperand.h"
#include "llvm/CodeGen/PseudoSourceValue.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/Target/TargetFrameLowering.h"
#include "llvm/Target/TargetMachine.h"
#include <utility>
namespace llvm {
class MipsCallEntry : public PseudoSourceValue {
public:
explicit MipsCallEntry(const StringRef &N);
explicit MipsCallEntry(const GlobalValue *V);
virtual bool isConstant(const MachineFrameInfo *) const;
virtual bool isAliased(const MachineFrameInfo *) const;
virtual bool mayAlias(const MachineFrameInfo *) const;
private:
virtual void printCustom(raw_ostream &O) const;
#ifndef NDEBUG
std::string Name;
const GlobalValue *Val;
#endif
};
class MipsFunctionInfo : public MachineFunctionInfo {
public:
MipsFunctionInfo(MachineFunction& MF)
: MF(MF), SRetReturnReg(0), GlobalBaseReg(0), Mips16SPAliasReg(0),
VarArgsFrameIndex(0), CallsEhReturn(false)
{}
~MipsFunctionInfo();
unsigned getSRetReturnReg() const { return SRetReturnReg; }
void setSRetReturnReg(unsigned Reg) { SRetReturnReg = Reg; }
bool globalBaseRegSet() const;
unsigned getGlobalBaseReg();
bool mips16SPAliasRegSet() const;
unsigned getMips16SPAliasReg();
int getVarArgsFrameIndex() const { return VarArgsFrameIndex; }
void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; }
bool hasByvalArg() const { return HasByvalArg; }
void setFormalArgInfo(unsigned Size, bool HasByval) {
IncomingArgSize = Size;
HasByvalArg = HasByval;
}
unsigned getIncomingArgSize() const { return IncomingArgSize; }
bool callsEhReturn() const { return CallsEhReturn; }
void setCallsEhReturn() { CallsEhReturn = true; }
void createEhDataRegsFI();
int getEhDataRegFI(unsigned Reg) const { return EhDataRegFI[Reg]; }
bool isEhDataRegFI(int FI) const;
MachinePointerInfo callPtrInfo(const StringRef &Name);
MachinePointerInfo callPtrInfo(const GlobalValue *Val);
private:
virtual void anchor();
MachineFunction& MF;
unsigned SRetReturnReg;
unsigned GlobalBaseReg;
unsigned Mips16SPAliasReg;
int VarArgsFrameIndex;
bool HasByvalArg;
unsigned IncomingArgSize;
bool CallsEhReturn;
int EhDataRegFI[4];
StringMap<const MipsCallEntry *> ExternalCallEntries;
ValueMap<const GlobalValue *, const MipsCallEntry *> GlobalCallEntries;
};
}
#endif // MIPS_MACHINE_FUNCTION_INFO_H