add codes for constants table
[oota-llvm.git] / include / llvm / GlobalValue.h
index 576fbe6521ac0d679ef61be898b9caa63dccbae9..a20c05800404d1915eafbed3919e286c5d354396 100644 (file)
@@ -29,7 +29,7 @@ class GlobalValue : public Constant {
 public:
   /// @brief An enumeration for the kinds of linkage for global values.
   enum LinkageTypes {
-    ExternalLinkage,    ///< Externally visible function
+    ExternalLinkage = 0,///< Externally visible function
     LinkOnceLinkage,    ///< Keep one copy of function when linking (inline)
     WeakLinkage,        ///< Keep one copy of named function when linking (weak)
     AppendingLinkage,   ///< Special purpose, only applies to global arrays
@@ -42,8 +42,8 @@ public:
 
   /// @brief An enumeration for the kinds of visibility of global values.
   enum VisibilityTypes {
-    DefaultVisibility,  ///< The GV is visible
-    HiddenVisibility    ///< The GV is hidden
+    DefaultVisibility = 0,  ///< The GV is visible
+    HiddenVisibility        ///< The GV is hidden
   };
 
 protected:
@@ -55,10 +55,12 @@ protected:
   }
 
   Module *Parent;
-  LinkageTypes Linkage;   // The linkage of this global
-  VisibilityTypes Visibility;  // The visibility style of this global
-  unsigned Alignment;     // Alignment of this symbol, must be power of two
-  std::string Section;    // Section to emit this into, empty mean default
+  // Note: VC++ treats enums as signed, so an extra bit is required to prevent
+  // Linkage and Visibility from turning into negative values.
+  LinkageTypes Linkage : 5;   // The linkage of this global
+  unsigned Visibility : 1;    // The visibility style of this global
+  unsigned Alignment : 16;    // Alignment of this symbol, must be power of two
+  std::string Section;        // Section to emit this into, empty mean default
 public:
   ~GlobalValue() {
     removeDeadConstantUsers();   // remove any dead constants using this.
@@ -70,7 +72,7 @@ public:
     Alignment = Align;
   }
 
-  VisibilityTypes getVisibility() const { return Visibility; }
+  VisibilityTypes getVisibility() const { return (VisibilityTypes)Visibility; }
   bool hasHiddenVisibility() const { return Visibility == HiddenVisibility; }
   void setVisibility(VisibilityTypes V) { Visibility = V; }
   
@@ -133,8 +135,8 @@ public:
   // Methods for support type inquiry through isa, cast, and dyn_cast:
   static inline bool classof(const GlobalValue *) { return true; }
   static inline bool classof(const Value *V) {
-    return V->getValueType() == Value::FunctionVal ||
-           V->getValueType() == Value::GlobalVariableVal;
+    return V->getValueID() == Value::FunctionVal ||
+           V->getValueID() == Value::GlobalVariableVal;
   }
 };