GlobalAlias.h revision 7ed47a13356daed2a34cd2209a31f92552e3bdd8
14dccb90e92ba9e4abffe0177493b6db9949678ddTed Kremenek//===-------- llvm/GlobalAlias.h - GlobalAlias class ------------*- C++ -*-===// 2610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek// 3610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek// The LLVM Compiler Infrastructure 494b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek// 594b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek// This file is distributed under the University of Illinois Open Source 6610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek// License. See LICENSE.TXT for details. 7610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek// 8610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek//===----------------------------------------------------------------------===// 9610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek// 10610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek// This file contains the declaration of the GlobalAlias class, which 11610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek// represents a single function or variable alias in the IR. 12610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek// 13610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek//===----------------------------------------------------------------------===// 14610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek 15610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek#ifndef LLVM_GLOBAL_ALIAS_H 16610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek#define LLVM_GLOBAL_ALIAS_H 17610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek 18610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek#include "llvm/GlobalValue.h" 19610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek 2094b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremeneknamespace llvm { 2194b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek 22610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenekclass Module; 23610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenekclass Constant; 24610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenekclass PointerType; 25610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenektemplate<typename ValueSubClass, typename ItemParentClass> 2694b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek class SymbolTableListTraits; 2794b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek 28610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenekclass GlobalAlias : public GlobalValue { 29610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek friend class SymbolTableListTraits<GlobalAlias, Module>; 30610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek void operator=(const GlobalAlias &); // Do not implement 31610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek GlobalAlias(const GlobalAlias &); // Do not implement 3294b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek 3394b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek void setParent(Module *parent); 34610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek 35610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek GlobalAlias *Prev, *Next; 36610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek void setNext(GlobalAlias *N) { Next = N; } 37610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek void setPrev(GlobalAlias *N) { Prev = N; } 3894b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek 39610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek // getNext/Prev - Return the next or previous alias in the list. 40610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek GlobalAlias *getNext() { return Next; } 4194b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek const GlobalAlias *getNext() const { return Next; } 42610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek GlobalAlias *getPrev() { return Prev; } 43610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek const GlobalAlias *getPrev() const { return Prev; } 44610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek 45610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek Use Aliasee; 46610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenekpublic: 47610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek /// GlobalAlias ctor - If a parent module is specified, the alias is 48610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek /// automatically inserted into the end of the specified module's alias list. 49610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek GlobalAlias(const Type *Ty, LinkageTypes Linkage, const std::string &Name = "", 50610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek Constant* Aliasee = 0, Module *Parent = 0); 51610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek 52610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek /// isDeclaration - Is this global variable lacking an initializer? If so, 53610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek /// the global variable is defined in some other translation unit, and is thus 5494b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek /// only a declaration here. 55610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek virtual bool isDeclaration() const; 56610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek 57610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek /// removeFromParent - This method unlinks 'this' from the containing module, 5894b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek /// but does not delete it. 59610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek /// 6094b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek void removeFromParent(); 61610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek 62610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek /// eraseFromParent - This method unlinks 'this' from the containing module 63610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek /// and deletes it. 6494b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek /// 65610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek void eraseFromParent(); 66610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek 67610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek virtual void print(std::ostream &OS) const; 6894b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek void print(std::ostream *OS) const { if (OS) print(*OS); } 69610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek 70610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek /// set/getAliasee - These methods retrive and set alias target. 71610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek void setAliasee(Constant* GV); 7294b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek const Constant* getAliasee() const { 73610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek return cast_or_null<Constant>(getOperand(0)); 74610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek } 75610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek Constant* getAliasee() { 7694b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek return cast_or_null<Constant>(getOperand(0)); 77610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek } 78610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek /// getAliasedGlobal() - Aliasee can be either global or bitcast of 79610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek /// global. This method retrives the global for both aliasee flavours. 8094b1b4d785bc0f09f6af4be394e59d51f35dda60Ted Kremenek const GlobalValue* getAliasedGlobal() const; 81610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek 82610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek // Methods for support type inquiry through isa, cast, and dyn_cast: 83610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek static inline bool classof(const GlobalAlias *) { return true; } 84610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek static inline bool classof(const Value *V) { 85610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek return V->getValueID() == Value::GlobalAliasVal; 86610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek } 87610068c8cd2321f90e147b12cf794e1f840b6405Ted Kremenek}; 88c104e53639de4424b83955acfadc977773b5883dTed Kremenek 89c104e53639de4424b83955acfadc977773b5883dTed Kremenek} // End llvm namespace 90c104e53639de4424b83955acfadc977773b5883dTed Kremenek 91c104e53639de4424b83955acfadc977773b5883dTed Kremenek#endif 92c104e53639de4424b83955acfadc977773b5883dTed Kremenek