X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FGlobalValue.h;h=b897f9f6bba0cb2187c78bd1e41289d8d3f437cd;hb=819c4f365fe2bf9be75faafa667fb22366dabaf5;hp=33f50c907b8743d3e0c6b3f93a4cebfc9a3d6458;hpb=667d4b8de6dea70195ff12ef39a4deebffa2f5c7;p=oota-llvm.git diff --git a/include/llvm/GlobalValue.h b/include/llvm/GlobalValue.h index 33f50c907b8..b897f9f6bba 100644 --- a/include/llvm/GlobalValue.h +++ b/include/llvm/GlobalValue.h @@ -31,20 +31,20 @@ public: /// @brief An enumeration for the kinds of linkage for global values. enum LinkageTypes { ExternalLinkage = 0,///< Externally visible function + AvailableExternallyLinkage, ///< Available for inspection, not emission. LinkOnceAnyLinkage, ///< Keep one copy of function when linking (inline) LinkOnceODRLinkage, ///< Same, but only replaced by something equivalent. WeakAnyLinkage, ///< Keep one copy of named function when linking (weak) WeakODRLinkage, ///< Same, but only replaced by something equivalent. AppendingLinkage, ///< Special purpose, only applies to global arrays - InternalLinkage, ///< Rename collisions when linking (static functions) - PrivateLinkage, ///< Like Internal, but omit from symbol table + InternalLinkage, ///< Rename collisions when linking (static functions). + PrivateLinkage, ///< Like Internal, but omit from symbol table. + LinkerPrivateLinkage, ///< Like Private, but linker removes. DLLImportLinkage, ///< Function to be imported from DLL - DLLExportLinkage, ///< Function to be accessible from DLL - ExternalWeakAnyLinkage,///< ExternalWeak linkage description - ExternalWeakODRLinkage,///< Same, but only replaced by something equivalent. - GhostLinkage, ///< Stand-in functions for streaming fns from BC files - CommonAnyLinkage, ///< Tentative definitions - CommonODRLinkage ///< Same, but only replaced by something equivalent. + DLLExportLinkage, ///< Function to be accessible from DLL. + ExternalWeakLinkage,///< ExternalWeak linkage description. + GhostLinkage, ///< Stand-in functions for streaming fns from BC files. + CommonLinkage ///< Tentative definitions. }; /// @brief An enumeration for the kinds of visibility of global values. @@ -81,6 +81,7 @@ public: } VisibilityTypes getVisibility() const { return VisibilityTypes(Visibility); } + bool hasDefaultVisibility() const { return Visibility == DefaultVisibility; } bool hasHiddenVisibility() const { return Visibility == HiddenVisibility; } bool hasProtectedVisibility() const { return Visibility == ProtectedVisibility; @@ -109,14 +110,11 @@ public: static LinkageTypes getWeakLinkage(bool ODR) { return ODR ? WeakODRLinkage : WeakAnyLinkage; } - static LinkageTypes getCommonLinkage(bool ODR) { - return ODR ? CommonODRLinkage : CommonAnyLinkage; - } - static LinkageTypes getExternalWeakLinkage(bool ODR) { - return ODR ? ExternalWeakODRLinkage : ExternalWeakAnyLinkage; - } bool hasExternalLinkage() const { return Linkage == ExternalLinkage; } + bool hasAvailableExternallyLinkage() const { + return Linkage == AvailableExternallyLinkage; + } bool hasLinkOnceLinkage() const { return Linkage == LinkOnceAnyLinkage || Linkage == LinkOnceODRLinkage; } @@ -126,19 +124,16 @@ public: bool hasAppendingLinkage() const { return Linkage == AppendingLinkage; } bool hasInternalLinkage() const { return Linkage == InternalLinkage; } bool hasPrivateLinkage() const { return Linkage == PrivateLinkage; } + bool hasLinkerPrivateLinkage() const { return Linkage==LinkerPrivateLinkage; } bool hasLocalLinkage() const { - return Linkage == InternalLinkage || Linkage == PrivateLinkage; + return hasInternalLinkage() || hasPrivateLinkage() || + hasLinkerPrivateLinkage(); } bool hasDLLImportLinkage() const { return Linkage == DLLImportLinkage; } bool hasDLLExportLinkage() const { return Linkage == DLLExportLinkage; } - bool hasExternalWeakLinkage() const { - return Linkage == ExternalWeakAnyLinkage || - Linkage == ExternalWeakODRLinkage; - } + bool hasExternalWeakLinkage() const { return Linkage == ExternalWeakLinkage; } bool hasGhostLinkage() const { return Linkage == GhostLinkage; } - bool hasCommonLinkage() const { - return Linkage == CommonAnyLinkage || Linkage == CommonODRLinkage; - } + bool hasCommonLinkage() const { return Linkage == CommonLinkage; } void setLinkage(LinkageTypes LT) { Linkage = LT; } LinkageTypes getLinkage() const { return Linkage; } @@ -149,21 +144,20 @@ public: bool mayBeOverridden() const { return (Linkage == WeakAnyLinkage || Linkage == LinkOnceAnyLinkage || - Linkage == CommonAnyLinkage || - Linkage == ExternalWeakAnyLinkage); + Linkage == CommonLinkage || + Linkage == ExternalWeakLinkage); } /// isWeakForLinker - Whether the definition of this global may be replaced at - /// link time, whether the replacement is equivalent to the original or not. + /// link time. bool isWeakForLinker() const { - return (Linkage == WeakAnyLinkage || + return (Linkage == AvailableExternallyLinkage || + Linkage == WeakAnyLinkage || Linkage == WeakODRLinkage || Linkage == LinkOnceAnyLinkage || Linkage == LinkOnceODRLinkage || - Linkage == CommonAnyLinkage || - Linkage == CommonODRLinkage || - Linkage == ExternalWeakAnyLinkage || - Linkage == ExternalWeakODRLinkage); + Linkage == CommonLinkage || + Linkage == ExternalWeakLinkage); } /// copyAttributesFrom - copy all additional attributes (those not needed to @@ -205,7 +199,7 @@ public: /// off of this global value, remove them. This method is useful for clients /// that want to check to see if a global is unused, but don't want to deal /// with potentially dead constants hanging off of the globals. - void removeDeadConstantUsers(); + void removeDeadConstantUsers() const; // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const GlobalValue *) { return true; }