1 //===-- llvm/CodeGen/PseudoSourceValue.h ------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file contains the declaration of the PseudoSourceValue class. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_CODEGEN_PSEUDOSOURCEVALUE_H 15 #define LLVM_CODEGEN_PSEUDOSOURCEVALUE_H 16 17 #include "llvm/IR/Value.h" 18 19 namespace llvm { 20 class MachineFrameInfo; 21 class raw_ostream; 22 23 /// PseudoSourceValue - Special value supplied for machine level alias 24 /// analysis. It indicates that a memory access references the functions 25 /// stack frame (e.g., a spill slot), below the stack frame (e.g., argument 26 /// space), or constant pool. 27 class PseudoSourceValue : public Value { 28 private: 29 /// printCustom - Implement printing for PseudoSourceValue. This is called 30 /// from Value::print or Value's operator<<. 31 /// 32 virtual void printCustom(raw_ostream &O) const; 33 34 public: 35 explicit PseudoSourceValue(enum ValueTy Subclass = PseudoSourceValueVal); 36 37 /// isConstant - Test whether the memory pointed to by this 38 /// PseudoSourceValue has a constant value. 39 /// 40 virtual bool isConstant(const MachineFrameInfo *) const; 41 42 /// isAliased - Test whether the memory pointed to by this 43 /// PseudoSourceValue may also be pointed to by an LLVM IR Value. 44 virtual bool isAliased(const MachineFrameInfo *) const; 45 46 /// mayAlias - Return true if the memory pointed to by this 47 /// PseudoSourceValue can ever alias a LLVM IR Value. 48 virtual bool mayAlias(const MachineFrameInfo *) const; 49 50 /// classof - Methods for support type inquiry through isa, cast, and 51 /// dyn_cast: 52 /// 53 static inline bool classof(const Value *V) { 54 return V->getValueID() == PseudoSourceValueVal || 55 V->getValueID() == FixedStackPseudoSourceValueVal; 56 } 57 58 /// A pseudo source value referencing a fixed stack frame entry, 59 /// e.g., a spill slot. 60 static const PseudoSourceValue *getFixedStack(int FI); 61 62 /// A pseudo source value referencing the area below the stack frame of 63 /// a function, e.g., the argument space. 64 static const PseudoSourceValue *getStack(); 65 66 /// A pseudo source value referencing the global offset table 67 /// (or something the like). 68 static const PseudoSourceValue *getGOT(); 69 70 /// A pseudo source value referencing the constant pool. Since constant 71 /// pools are constant, this doesn't need to identify a specific constant 72 /// pool entry. 73 static const PseudoSourceValue *getConstantPool(); 74 75 /// A pseudo source value referencing a jump table. Since jump tables are 76 /// constant, this doesn't need to identify a specific jump table. 77 static const PseudoSourceValue *getJumpTable(); 78 }; 79 80 /// FixedStackPseudoSourceValue - A specialized PseudoSourceValue 81 /// for holding FixedStack values, which must include a frame 82 /// index. 83 class FixedStackPseudoSourceValue : public PseudoSourceValue { 84 const int FI; 85 public: 86 explicit FixedStackPseudoSourceValue(int fi) : 87 PseudoSourceValue(FixedStackPseudoSourceValueVal), FI(fi) {} 88 89 /// classof - Methods for support type inquiry through isa, cast, and 90 /// dyn_cast: 91 /// 92 static inline bool classof(const Value *V) { 93 return V->getValueID() == FixedStackPseudoSourceValueVal; 94 } 95 96 virtual bool isConstant(const MachineFrameInfo *MFI) const; 97 98 virtual bool isAliased(const MachineFrameInfo *MFI) const; 99 100 virtual bool mayAlias(const MachineFrameInfo *) const; 101 102 virtual void printCustom(raw_ostream &OS) const; 103 104 int getFrameIndex() const { return FI; } 105 }; 106 } // End llvm namespace 107 108 #endif 109