mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-25 00:29:20 +00:00
Make FixedStackPseudoSourceValue a first-class PseudoSourceValue by
making it visible to clients and adding LLVM-style cast capability. This will be used by AsmPrinter to determine when to emit spill comments for an instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@87019 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1251443929
commit
cf62632d83
@ -15,6 +15,7 @@
|
||||
#define LLVM_CODEGEN_PSEUDOSOURCEVALUE_H
|
||||
|
||||
#include "llvm/Value.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
||||
namespace llvm {
|
||||
class MachineFrameInfo;
|
||||
@ -32,7 +33,7 @@ namespace llvm {
|
||||
virtual void printCustom(raw_ostream &O) const;
|
||||
|
||||
public:
|
||||
PseudoSourceValue();
|
||||
PseudoSourceValue(enum ValueTy Subclass = PseudoSourceValueVal);
|
||||
|
||||
/// isConstant - Test whether the memory pointed to by this
|
||||
/// PseudoSourceValue has a constant value.
|
||||
@ -76,6 +77,38 @@ namespace llvm {
|
||||
/// constant, this doesn't need to identify a specific jump table.
|
||||
static const PseudoSourceValue *getJumpTable();
|
||||
};
|
||||
|
||||
/// FixedStackPseudoSourceValue - A specialized PseudoSourceValue
|
||||
/// for holding FixedStack values, which must include a frame
|
||||
/// index.
|
||||
class FixedStackPseudoSourceValue : public PseudoSourceValue {
|
||||
const int FI;
|
||||
public:
|
||||
explicit FixedStackPseudoSourceValue(int fi) :
|
||||
PseudoSourceValue(FixedStackPseudoSourceValueVal), FI(fi) {}
|
||||
|
||||
/// classof - Methods for support type inquiry through isa, cast, and
|
||||
/// dyn_cast:
|
||||
///
|
||||
static inline bool classof(const FixedStackPseudoSourceValue *) {
|
||||
return true;
|
||||
}
|
||||
static inline bool classof(const Value *V) {
|
||||
return V->getValueID() == FixedStackPseudoSourceValueVal;
|
||||
}
|
||||
|
||||
virtual bool isConstant(const MachineFrameInfo *MFI) const;
|
||||
|
||||
virtual bool isAliased(const MachineFrameInfo *MFI) const;
|
||||
|
||||
virtual bool mayAlias(const MachineFrameInfo *) const;
|
||||
|
||||
virtual void printCustom(raw_ostream &OS) const {
|
||||
OS << "FixedStack" << FI;
|
||||
}
|
||||
|
||||
int getFrameIndex(void) const { return FI; }
|
||||
};
|
||||
} // End llvm namespace
|
||||
|
||||
#endif
|
||||
|
@ -43,35 +43,14 @@ static const char *const PSVNames[] = {
|
||||
// Eventually these should be uniqued on LLVMContext rather than in a managed
|
||||
// static. For now, we can safely use the global context for the time being to
|
||||
// squeak by.
|
||||
PseudoSourceValue::PseudoSourceValue() :
|
||||
PseudoSourceValue::PseudoSourceValue(enum ValueTy Subclass) :
|
||||
Value(Type::getInt8PtrTy(getGlobalContext()),
|
||||
PseudoSourceValueVal) {}
|
||||
Subclass) {}
|
||||
|
||||
void PseudoSourceValue::printCustom(raw_ostream &O) const {
|
||||
O << PSVNames[this - *PSVs];
|
||||
}
|
||||
|
||||
namespace {
|
||||
/// FixedStackPseudoSourceValue - A specialized PseudoSourceValue
|
||||
/// for holding FixedStack values, which must include a frame
|
||||
/// index.
|
||||
class FixedStackPseudoSourceValue : public PseudoSourceValue {
|
||||
const int FI;
|
||||
public:
|
||||
explicit FixedStackPseudoSourceValue(int fi) : FI(fi) {}
|
||||
|
||||
virtual bool isConstant(const MachineFrameInfo *MFI) const;
|
||||
|
||||
virtual bool isAliased(const MachineFrameInfo *MFI) const;
|
||||
|
||||
virtual bool mayAlias(const MachineFrameInfo *) const;
|
||||
|
||||
virtual void printCustom(raw_ostream &OS) const {
|
||||
OS << "FixedStack" << FI;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
static ManagedStatic<std::map<int, const PseudoSourceValue *> > FSValues;
|
||||
|
||||
const PseudoSourceValue *PseudoSourceValue::getFixedStack(int FI) {
|
||||
|
Loading…
Reference in New Issue
Block a user