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_IR_GLOBALALIAS_H 16#define LLVM_IR_GLOBALALIAS_H 17 18#include "llvm/ADT/ilist_node.h" 19#include "llvm/IR/GlobalIndirectSymbol.h" 20#include "llvm/IR/Value.h" 21 22namespace llvm { 23 24class Twine; 25class Module; 26template <typename ValueSubClass> class SymbolTableListTraits; 27 28class GlobalAlias : public GlobalIndirectSymbol, 29 public ilist_node<GlobalAlias> { 30 friend class SymbolTableListTraits<GlobalAlias>; 31 32 GlobalAlias(Type *Ty, unsigned AddressSpace, LinkageTypes Linkage, 33 const Twine &Name, Constant *Aliasee, Module *Parent); 34 35public: 36 GlobalAlias(const GlobalAlias &) = delete; 37 GlobalAlias &operator=(const GlobalAlias &) = delete; 38 39 /// If a parent module is specified, the alias is automatically inserted into 40 /// the end of the specified module's alias list. 41 static GlobalAlias *create(Type *Ty, unsigned AddressSpace, 42 LinkageTypes Linkage, const Twine &Name, 43 Constant *Aliasee, Module *Parent); 44 45 // Without the Aliasee. 46 static GlobalAlias *create(Type *Ty, unsigned AddressSpace, 47 LinkageTypes Linkage, const Twine &Name, 48 Module *Parent); 49 50 // The module is taken from the Aliasee. 51 static GlobalAlias *create(Type *Ty, unsigned AddressSpace, 52 LinkageTypes Linkage, const Twine &Name, 53 GlobalValue *Aliasee); 54 55 // Type, Parent and AddressSpace taken from the Aliasee. 56 static GlobalAlias *create(LinkageTypes Linkage, const Twine &Name, 57 GlobalValue *Aliasee); 58 59 // Linkage, Type, Parent and AddressSpace taken from the Aliasee. 60 static GlobalAlias *create(const Twine &Name, GlobalValue *Aliasee); 61 62 void copyAttributesFrom(const GlobalValue *Src) { 63 GlobalValue::copyAttributesFrom(Src); 64 } 65 66 /// removeFromParent - This method unlinks 'this' from the containing module, 67 /// but does not delete it. 68 /// 69 void removeFromParent(); 70 71 /// eraseFromParent - This method unlinks 'this' from the containing module 72 /// and deletes it. 73 /// 74 void eraseFromParent(); 75 76 /// These methods retrieve and set alias target. 77 void setAliasee(Constant *Aliasee); 78 const Constant *getAliasee() const { 79 return getIndirectSymbol(); 80 } 81 Constant *getAliasee() { 82 return getIndirectSymbol(); 83 } 84 85 static bool isValidLinkage(LinkageTypes L) { 86 return isExternalLinkage(L) || isLocalLinkage(L) || 87 isWeakLinkage(L) || isLinkOnceLinkage(L); 88 } 89 90 // Methods for support type inquiry through isa, cast, and dyn_cast: 91 static inline bool classof(const Value *V) { 92 return V->getValueID() == Value::GlobalAliasVal; 93 } 94}; 95 96} // end namespace llvm 97 98#endif // LLVM_IR_GLOBALALIAS_H 99