X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FCodeGen%2FPseudoSourceValue.h;h=8f52d3bf47d2a832dadfce2718a0a66b6cae47b1;hb=d4f759696d1bd0ba7c0e6eefd7ed8b556840419a;hp=bae7e2317354ae23da6aad7face02d2d67af91cd;hpb=f38dc192dd378903048efbadb95b75cf41abfb63;p=oota-llvm.git diff --git a/include/llvm/CodeGen/PseudoSourceValue.h b/include/llvm/CodeGen/PseudoSourceValue.h index bae7e231735..8f52d3bf47d 100644 --- a/include/llvm/CodeGen/PseudoSourceValue.h +++ b/include/llvm/CodeGen/PseudoSourceValue.h @@ -17,45 +17,91 @@ #include "llvm/Value.h" namespace llvm { + class MachineFrameInfo; + class raw_ostream; + /// PseudoSourceValue - Special value supplied for machine level alias - /// analysis. It indicates that the a memory access references the functions + /// analysis. It indicates that a memory access references the functions /// stack frame (e.g., a spill slot), below the stack frame (e.g., argument /// space), or constant pool. class PseudoSourceValue : public Value { - const char *name; + private: + /// printCustom - Implement printing for PseudoSourceValue. This is called + /// from Value::print or Value's operator<<. + /// + virtual void printCustom(raw_ostream &O) const; + public: - explicit PseudoSourceValue(const char *_name); + explicit PseudoSourceValue(enum ValueTy Subclass = PseudoSourceValueVal); + + /// isConstant - Test whether the memory pointed to by this + /// PseudoSourceValue has a constant value. + /// + virtual bool isConstant(const MachineFrameInfo *) const; - virtual void print(std::ostream &OS) const; + /// isAliased - Test whether the memory pointed to by this + /// PseudoSourceValue may also be pointed to by an LLVM IR Value. + virtual bool isAliased(const MachineFrameInfo *) const; + + /// mayAlias - Return true if the memory pointed to by this + /// PseudoSourceValue can ever alias a LLVM IR Value. + virtual bool mayAlias(const MachineFrameInfo *) const; /// classof - Methods for support type inquiry through isa, cast, and /// dyn_cast: /// - static inline bool classof(const PseudoSourceValue *) { return true; } static inline bool classof(const Value *V) { - return V->getValueID() == PseudoSourceValueVal; + return V->getValueID() == PseudoSourceValueVal || + V->getValueID() == FixedStackPseudoSourceValueVal; } - /// A pseudo source value referencing to the stack frame of a function, + /// A pseudo source value referencing a fixed stack frame entry, /// e.g., a spill slot. - static const PseudoSourceValue FPRel; + static const PseudoSourceValue *getFixedStack(int FI); + + /// A pseudo source value referencing the area below the stack frame of + /// a function, e.g., the argument space. + static const PseudoSourceValue *getStack(); + + /// A pseudo source value referencing the global offset table + /// (or something the like). + static const PseudoSourceValue *getGOT(); + + /// A pseudo source value referencing the constant pool. Since constant + /// pools are constant, this doesn't need to identify a specific constant + /// pool entry. + static const PseudoSourceValue *getConstantPool(); + + /// A pseudo source value referencing a jump table. Since jump tables are + /// 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 Value *V) { + return V->getValueID() == FixedStackPseudoSourceValueVal; + } - /// A source value referencing the area below the stack frame of a function, - /// e.g., the argument space. - static const PseudoSourceValue SPRel; + virtual bool isConstant(const MachineFrameInfo *MFI) const; - /// A source value referencing the global offset table (or something the - /// like). - static const PseudoSourceValue GPRel; + virtual bool isAliased(const MachineFrameInfo *MFI) const; - /// A source value relative to some kind of thread id/pointer. - static const PseudoSourceValue TPRel; + virtual bool mayAlias(const MachineFrameInfo *) const; - /// A SV referencing the constant pool - static const PseudoSourceValue CPRel; + virtual void printCustom(raw_ostream &OS) const; - /// A SV referencing the jump table - static const PseudoSourceValue JTRel; + int getFrameIndex() const { return FI; } }; } // End llvm namespace