From 63e7baf8f66e94e57c1b8add29edeed9ff63bf38 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Fri, 29 May 2015 20:31:23 +0000 Subject: [PATCH] Merge MCSymbol and MCSymbolData. As a transition hack leave MCSymbolData as a typedef of MCSymbol. I will be removing that in a second. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238609 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/MC/MCAsmLayout.h | 1 - include/llvm/MC/MCELFObjectWriter.h | 1 - include/llvm/MC/MCELFStreamer.h | 1 - include/llvm/MC/MCObjectWriter.h | 1 - include/llvm/MC/MCSymbol.h | 59 ++++++++++------------------- lib/MC/MCAssembler.cpp | 12 ------ 6 files changed, 20 insertions(+), 55 deletions(-) diff --git a/include/llvm/MC/MCAsmLayout.h b/include/llvm/MC/MCAsmLayout.h index fb28420e0fa..1b20d5b804a 100644 --- a/include/llvm/MC/MCAsmLayout.h +++ b/include/llvm/MC/MCAsmLayout.h @@ -18,7 +18,6 @@ class MCAssembler; class MCFragment; class MCSection; class MCSymbol; -class MCSymbolData; /// Encapsulates the layout of an assembly file at a particular point in time. /// diff --git a/include/llvm/MC/MCELFObjectWriter.h b/include/llvm/MC/MCELFObjectWriter.h index 3ed8fd692f5..3fffcf2a780 100644 --- a/include/llvm/MC/MCELFObjectWriter.h +++ b/include/llvm/MC/MCELFObjectWriter.h @@ -21,7 +21,6 @@ class MCFixup; class MCFragment; class MCObjectWriter; class MCSymbol; -class MCSymbolData; class MCValue; class raw_pwrite_stream; diff --git a/include/llvm/MC/MCELFStreamer.h b/include/llvm/MC/MCELFStreamer.h index 97058f5e998..bf663f7af08 100644 --- a/include/llvm/MC/MCELFStreamer.h +++ b/include/llvm/MC/MCELFStreamer.h @@ -24,7 +24,6 @@ class MCCodeEmitter; class MCExpr; class MCInst; class MCSymbol; -class MCSymbolData; class raw_ostream; class MCELFStreamer : public MCObjectStreamer { diff --git a/include/llvm/MC/MCObjectWriter.h b/include/llvm/MC/MCObjectWriter.h index 999d2947127..70ed7196a2c 100644 --- a/include/llvm/MC/MCObjectWriter.h +++ b/include/llvm/MC/MCObjectWriter.h @@ -22,7 +22,6 @@ class MCAsmLayout; class MCAssembler; class MCFixup; class MCFragment; -class MCSymbolData; class MCSymbolRefExpr; class MCValue; diff --git a/include/llvm/MC/MCSymbol.h b/include/llvm/MC/MCSymbol.h index 7624d46294e..325afec9fee 100644 --- a/include/llvm/MC/MCSymbol.h +++ b/include/llvm/MC/MCSymbol.h @@ -27,39 +27,6 @@ class MCSection; class MCContext; class raw_ostream; -// TODO: Merge completely with MCSymbol. -class MCSymbolData { - /// Fragment - The fragment this symbol's value is relative to, if any. Also - /// stores if this symbol is visible outside this translation unit (bit 0) or - /// if it is private extern (bit 1). - PointerIntPair Fragment; - - -public: - MCSymbolData() = default; - - MCFragment *getFragment() const { return Fragment.getPointer(); } - void setFragment(MCFragment *Value) { Fragment.setPointer(Value); } - - /// @} - /// \name Symbol Attributes - /// @{ - - bool isExternal() const { return Fragment.getInt() & 1; } - void setExternal(bool Value) { - Fragment.setInt((Fragment.getInt() & ~1) | unsigned(Value)); - } - - bool isPrivateExtern() const { return Fragment.getInt() & 2; } - void setPrivateExtern(bool Value) { - Fragment.setInt((Fragment.getInt() & ~2) | (unsigned(Value) << 1)); - } - - /// @} - - void dump() const; -}; - /// MCSymbol - Instances of this class represent a symbol name in the MC file, /// and MCSymbols are created and uniqued by the MCContext class. MCSymbols /// should only be constructed with valid names for the object file. @@ -122,7 +89,10 @@ class MCSymbol { /// additional per symbol information which is not easily classified. mutable uint32_t Flags = 0; - mutable MCSymbolData Data; + /// The fragment this symbol's value is relative to, if any. Also stores if + /// this symbol is visible outside this translation unit (bit 0) or if it is + /// private extern (bit 1). + mutable PointerIntPair Fragment; private: // MCContext creates and uniques these. friend class MCExpr; @@ -147,11 +117,7 @@ public: bool hasData() const { return HasData; } - /// Get associated symbol data. - MCSymbolData &getData() const { - assert(HasData && "Missing symbol data!"); - return Data; - } + MCSymbol &getData() const { return *const_cast(this); } /// Initialize symbol data. /// @@ -297,6 +263,19 @@ public: Flags = (Flags & ~Mask) | Value; } + MCFragment *getFragment() const { return Fragment.getPointer(); } + void setFragment(MCFragment *Value) const { Fragment.setPointer(Value); } + + bool isExternal() const { return Fragment.getInt() & 1; } + void setExternal(bool Value) const { + Fragment.setInt((Fragment.getInt() & ~1) | unsigned(Value)); + } + + bool isPrivateExtern() const { return Fragment.getInt() & 2; } + void setPrivateExtern(bool Value) { + Fragment.setInt((Fragment.getInt() & ~2) | (unsigned(Value) << 1)); + } + /// print - Print the value to the stream \p OS. void print(raw_ostream &OS) const; @@ -304,6 +283,8 @@ public: void dump() const; }; +typedef MCSymbol MCSymbolData; + inline raw_ostream &operator<<(raw_ostream &OS, const MCSymbol &Sym) { Sym.print(OS); return OS; diff --git a/lib/MC/MCAssembler.cpp b/lib/MC/MCAssembler.cpp index e7e6fa92afa..e26db89dec8 100644 --- a/lib/MC/MCAssembler.cpp +++ b/lib/MC/MCAssembler.cpp @@ -1183,18 +1183,6 @@ void MCFragment::dump() { OS << ">"; } -void MCSymbolData::dump() const { - raw_ostream &OS = llvm::errs(); - - OS << ""; -} - void MCAssembler::dump() { raw_ostream &OS = llvm::errs(); -- 2.34.1