Factor out cycle-finder code and make it generic.
[oota-llvm.git] / include / llvm / GlobalVariable.h
index 1f9bfd4f5080fd2c003d6d71cdb92aaa76d0b8db..ae64ccf614be3654cebeabd88a58fdd5974bf14b 100644 (file)
@@ -28,7 +28,6 @@ namespace llvm {
 
 class Module;
 class Constant;
-class PointerType;
 template<typename ValueSubClass, typename ItemParentClass>
   class SymbolTableListTraits;
 
@@ -79,6 +78,15 @@ public:
   ///
   inline bool hasInitializer() const { return !isDeclaration(); }
 
+  /// hasDefinitiveInitializer - Whether the global variable has an initializer,
+  /// and this is the initializer that will be used in the final executable.
+  inline bool hasDefinitiveInitializer() const {
+    return hasInitializer() &&
+      // The initializer of a global variable with weak linkage may change at
+      // link time.
+      !mayBeOverridden();
+  }
+
   /// getInitializer - Return the initializer for this global variable.  It is
   /// illegal to call this method if the global is external, because we cannot
   /// tell what the value is initialized to!