GlobalAlias.h revision aff167819b8e78424c6de26c90f6d8e1777fe09d
1//===-------- llvm/GlobalAlias.h - GlobalAlias class ------------*- 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 GlobalAlias class, which 11// represents a single function or variable alias in the IR. 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef LLVM_GLOBAL_ALIAS_H 16#define LLVM_GLOBAL_ALIAS_H 17 18#include "llvm/GlobalValue.h" 19 20namespace llvm { 21 22class Module; 23class Constant; 24class PointerType; 25template<typename ValueSubClass, typename ItemParentClass> 26 class SymbolTableListTraits; 27 28class GlobalAlias : public GlobalValue { 29 friend class SymbolTableListTraits<GlobalAlias, Module>; 30 void operator=(const GlobalAlias &); // Do not implement 31 GlobalAlias(const GlobalAlias &); // Do not implement 32 33 void setParent(Module *parent); 34 35 GlobalAlias *Prev, *Next; 36 void setNext(GlobalAlias *N) { Next = N; } 37 void setPrev(GlobalAlias *N) { Prev = N; } 38 39 // getNext/Prev - Return the next or previous alias in the list. 40 GlobalAlias *getNext() { return Next; } 41 const GlobalAlias *getNext() const { return Next; } 42 GlobalAlias *getPrev() { return Prev; } 43 const GlobalAlias *getPrev() const { return Prev; } 44 45 Use Aliasee; 46public: 47 /// GlobalAlias ctor - If a parent module is specified, the alias is 48 /// automatically inserted into the end of the specified module's alias list. 49 GlobalAlias(const Type *Ty, LinkageTypes Linkage, const std::string &Name = "", 50 Constant* Aliasee = 0, Module *Parent = 0); 51 52 /// isDeclaration - Is this global variable lacking an initializer? If so, 53 /// the global variable is defined in some other translation unit, and is thus 54 /// only a declaration here. 55 virtual bool isDeclaration() const; 56 57 /// removeFromParent - This method unlinks 'this' from the containing module, 58 /// but does not delete it. 59 /// 60 void removeFromParent(); 61 62 /// eraseFromParent - This method unlinks 'this' from the containing module 63 /// and deletes it. 64 /// 65 void eraseFromParent(); 66 67 virtual void print(std::ostream &OS) const; 68 void print(std::ostream *OS) const { if (OS) print(*OS); } 69 70 /// set/getAliasee - These methods retrive and set alias target. 71 void setAliasee(Constant* GV); 72 const Constant* getAliasee() const { 73 return cast_or_null<Constant>(getOperand(0)); 74 } 75 Constant* getAliasee() { 76 return cast_or_null<Constant>(getOperand(0)); 77 } 78 /// getAliasedGlobal() - Aliasee can be either global or bitcast of 79 /// global. This method retrives the global for both aliasee flavours. 80 const GlobalValue* getAliasedGlobal() const; 81 82 /// resolveAliasedGlobal() - This method tries to ultimately resolve the alias 83 /// by going through the aliasing chain and trying to find the very last 84 /// global. Returns NULL if a cycle was found. 85 const GlobalValue* resolveAliasedGlobal() const; 86 87 // Methods for support type inquiry through isa, cast, and dyn_cast: 88 static inline bool classof(const GlobalAlias *) { return true; } 89 static inline bool classof(const Value *V) { 90 return V->getValueID() == Value::GlobalAliasVal; 91 } 92}; 93 94} // End llvm namespace 95 96#endif 97