[PATCH] D64208: [WebAssembly] Reorder Symbol fields to make it smaller

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 4 18:28:26 PDT 2019


This revision was automatically updated to reflect the committed changes.
Closed by commit rL365169: [WebAssembly] Reorder Symbol fields to make it smaller (authored by MaskRay, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D64208?vs=208103&id=208105#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D64208/new/

https://reviews.llvm.org/D64208

Files:
  lld/trunk/wasm/Symbols.h


Index: lld/trunk/wasm/Symbols.h
===================================================================
--- lld/trunk/wasm/Symbols.h
+++ lld/trunk/wasm/Symbols.h
@@ -41,7 +41,7 @@
 // The base class for real symbol classes.
 class Symbol {
 public:
-  enum Kind {
+  enum Kind : uint8_t {
     DefinedFunctionKind,
     DefinedDataKind,
     DefinedGlobalKind,
@@ -107,24 +107,6 @@
   WasmSymbolType getWasmType() const;
   bool isExported() const;
 
-  // True if the symbol was used for linking and thus need to be added to the
-  // output file's symbol table. This is true for all symbols except for
-  // unreferenced DSO symbols, lazy (archive) symbols, and bitcode symbols that
-  // are unreferenced except by other bitcode objects.
-  unsigned IsUsedInRegularObj : 1;
-
-  // True if ths symbol is explicity marked for export (i.e. via the -e/--export
-  // command line flag)
-  unsigned ForceExport : 1;
-
-  // False if LTO shouldn't inline whatever this symbol points to. If a symbol
-  // is overwritten after LTO, LTO shouldn't inline the symbol because it
-  // doesn't know the final contents of the symbol.
-  unsigned CanInline : 1;
-
-  // True if this symbol is specified by --trace-symbol option.
-  unsigned Traced : 1;
-
   const WasmSignature* getSignature() const;
 
   bool isInGOT() const { return GOTIndex != INVALID_INDEX; }
@@ -139,17 +121,36 @@
 
 protected:
   Symbol(StringRef Name, Kind K, uint32_t Flags, InputFile *F)
-      : IsUsedInRegularObj(false), ForceExport(false), CanInline(false),
-        Traced(false), Name(Name), SymbolKind(K), Flags(Flags), File(F),
-        Referenced(!Config->GcSections) {}
+      : Name(Name), File(F), Flags(Flags), SymbolKind(K),
+        Referenced(!Config->GcSections), IsUsedInRegularObj(false),
+        ForceExport(false), CanInline(false), Traced(false) {}
 
   StringRef Name;
-  Kind SymbolKind;
-  uint32_t Flags;
   InputFile *File;
+  uint32_t Flags;
   uint32_t OutputSymbolIndex = INVALID_INDEX;
   uint32_t GOTIndex = INVALID_INDEX;
-  bool Referenced;
+  Kind SymbolKind;
+  unsigned Referenced : 1;
+
+public:
+  // True if the symbol was used for linking and thus need to be added to the
+  // output file's symbol table. This is true for all symbols except for
+  // unreferenced DSO symbols, lazy (archive) symbols, and bitcode symbols that
+  // are unreferenced except by other bitcode objects.
+  unsigned IsUsedInRegularObj : 1;
+
+  // True if ths symbol is explicity marked for export (i.e. via the -e/--export
+  // command line flag)
+  unsigned ForceExport : 1;
+
+  // False if LTO shouldn't inline whatever this symbol points to. If a symbol
+  // is overwritten after LTO, LTO shouldn't inline the symbol because it
+  // doesn't know the final contents of the symbol.
+  unsigned CanInline : 1;
+
+  // True if this symbol is specified by --trace-symbol option.
+  unsigned Traced : 1;
 };
 
 class FunctionSymbol : public Symbol {
@@ -474,6 +475,11 @@
   alignas(SectionSymbol) char I[sizeof(SectionSymbol)];
 };
 
+// It is important to keep the size of SymbolUnion small for performance and
+// memory usage reasons. 96 bytes is a soft limit based on the size of
+// UndefinedFunction on a 64-bit system.
+static_assert(sizeof(SymbolUnion) <= 96, "SymbolUnion too large");
+
 void printTraceSymbol(Symbol *Sym);
 void printTraceSymbolUndefined(StringRef Name, const InputFile* File);
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D64208.208105.patch
Type: text/x-patch
Size: 3393 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190705/e3e08bd0/attachment.bin>


More information about the llvm-commits mailing list