[llvm-commits] [llvm] r84229 - in /llvm/trunk: include/llvm/MC/MCContext.h include/llvm/MC/MCSymbol.h lib/MC/MCExpr.cpp

Daniel Dunbar daniel at zuster.org
Thu Oct 15 18:33:57 PDT 2009


Author: ddunbar
Date: Thu Oct 15 20:33:57 2009
New Revision: 84229

URL: http://llvm.org/viewvc/llvm-project?rev=84229&view=rev
Log:
MC: Move assembler variable values from MCContext to MCSymbol.

Modified:
    llvm/trunk/include/llvm/MC/MCContext.h
    llvm/trunk/include/llvm/MC/MCSymbol.h
    llvm/trunk/lib/MC/MCExpr.cpp

Modified: llvm/trunk/include/llvm/MC/MCContext.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCContext.h?rev=84229&r1=84228&r2=84229&view=diff

==============================================================================
--- llvm/trunk/include/llvm/MC/MCContext.h (original)
+++ llvm/trunk/include/llvm/MC/MCContext.h Thu Oct 15 20:33:57 2009
@@ -33,11 +33,6 @@
     /// Symbols - Bindings of names to symbols.
     StringMap<MCSymbol*> Symbols;
 
-    /// SymbolValues - Bindings of symbols to values.
-    //
-    // FIXME: Is there a good reason to not just put this in the MCSymbol?
-    DenseMap<const MCSymbol*, const MCExpr*> SymbolValues;
-
     /// Allocator - Allocator object used for creating machine code objects.
     ///
     /// We use a bump pointer allocator to avoid the need to track all allocated
@@ -76,28 +71,6 @@
     MCSymbol *LookupSymbol(const StringRef &Name) const;
 
     /// @}
-    /// @name Symbol Value Table
-    /// @{
-
-    /// ClearSymbolValue - Erase the variable binding for @arg Symbol, if one
-    /// exists.
-    void ClearSymbolValue(const MCSymbol *Symbol) {
-      SymbolValues.erase(Symbol);
-    }
-
-    /// SetSymbolValue - Set the variable binding for @arg Symbol to @arg Value.
-    void SetSymbolValue(const MCSymbol *Symbol, const MCExpr *Value) {
-      assert(Value && "Invalid variable assignment!");
-      SymbolValues.insert(std::make_pair(Symbol, Value));
-    }
-
-    /// GetSymbolValue - Return the current variable value for @arg Symbol, or
-    /// null if @arg Symbol is not a variable.
-    const MCExpr *GetSymbolValue(const MCSymbol *Symbol) const {
-      return SymbolValues.lookup(Symbol);
-    }
-
-    /// @}
 
     void *Allocate(unsigned Size, unsigned Align = 8) {
       return Allocator.Allocate(Size, Align);

Modified: llvm/trunk/include/llvm/MC/MCSymbol.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCSymbol.h?rev=84229&r1=84228&r2=84229&view=diff

==============================================================================
--- llvm/trunk/include/llvm/MC/MCSymbol.h (original)
+++ llvm/trunk/include/llvm/MC/MCSymbol.h Thu Oct 15 20:33:57 2009
@@ -20,6 +20,7 @@
 
 namespace llvm {
   class MCAsmInfo;
+  class MCExpr;
   class MCSection;
   class MCContext;
   class raw_ostream;
@@ -45,6 +46,9 @@
     /// absolute symbols.
     const MCSection *Section;
 
+    /// Value - If non-null, the value for a variable symbol.
+    const MCExpr *Value;
+
     /// IsTemporary - True if this is an assembler temporary label, which
     /// typically does not survive in the .o file's symbol table.  Usually
     /// "Lfoo" or ".foo".
@@ -52,9 +56,9 @@
 
   private:  // MCContext creates and uniques these.
     friend class MCContext;
-    MCSymbol(const StringRef &_Name, bool _IsTemporary) 
-      : Name(_Name), Section(0), IsTemporary(_IsTemporary) {}
-    
+    MCSymbol(const StringRef &_Name, bool _IsTemporary)
+      : Name(_Name), Section(0), Value(0), IsTemporary(_IsTemporary) {}
+
     MCSymbol(const MCSymbol&);       // DO NOT IMPLEMENT
     void operator=(const MCSymbol&); // DO NOT IMPLEMENT
   public:
@@ -69,6 +73,10 @@
       return IsTemporary;
     }
 
+    /// @}
+    /// @name Associated Sections
+    /// @{
+
     /// isDefined - Check if this symbol is defined (i.e., it has an address).
     ///
     /// Defined symbols are either absolute or in some section.
@@ -105,6 +113,23 @@
     void setAbsolute() { Section = AbsolutePseudoSection; }
 
     /// @}
+    /// @name Variable Symbols
+    /// @{
+
+    /// isVariable - Check if this is a variable symbol.
+    bool isVariable() const {
+      return Value != 0;
+    }
+
+    /// getValue() - Get the value for variable symbols, or null if the symbol
+    /// is not a variable.
+    const MCExpr *getValue() const { return Value; }
+
+    void setValue(const MCExpr *Value) {
+      this->Value = Value;
+    }
+
+    /// @}
 
     /// print - Print the value to the stream \arg OS.
     void print(raw_ostream &OS, const MCAsmInfo *MAI) const;

Modified: llvm/trunk/lib/MC/MCExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCExpr.cpp?rev=84229&r1=84228&r2=84229&view=diff

==============================================================================
--- llvm/trunk/lib/MC/MCExpr.cpp (original)
+++ llvm/trunk/lib/MC/MCExpr.cpp Thu Oct 15 20:33:57 2009
@@ -181,8 +181,11 @@
 
   case SymbolRef: {
     const MCSymbol &Sym = cast<MCSymbolRefExpr>(this)->getSymbol();
-    if (const MCExpr *Value = Ctx.GetSymbolValue(&Sym))
-      return Value->EvaluateAsRelocatable(Ctx, Res);
+
+    // Evaluate recursively if this is a variable.
+    if (Sym.isVariable())
+      return Sym.getValue()->EvaluateAsRelocatable(Ctx, Res);
+
     Res = MCValue::get(&Sym, 0, 0);
     return true;
   }





More information about the llvm-commits mailing list