[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 07:54:35 PDT 2019


MaskRay created this revision.
MaskRay added reviewers: ruiu, sbc100.
Herald added subscribers: llvm-commits, sunfish, aheejin, jgravelle-google, dschuff.
Herald added a project: LLVM.

On 64-bit systems, this decreases sizeof(SymbolUnion) from 112 to 96.


Repository:
  rLLD LLVM Linker

https://reviews.llvm.org/D64208

Files:
  wasm/Symbols.h


Index: wasm/Symbols.h
===================================================================
--- wasm/Symbols.h
+++ 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,6 +107,33 @@
   WasmSymbolType getWasmType() const;
   bool isExported() const;
 
+  const WasmSignature* getSignature() const;
+
+  bool isInGOT() const { return GOTIndex != INVALID_INDEX; }
+
+  uint32_t getGOTIndex() const {
+    assert(GOTIndex != INVALID_INDEX);
+    return GOTIndex;
+  }
+
+  void setGOTIndex(uint32_t Index);
+  bool hasGOTIndex() const { return GOTIndex != INVALID_INDEX; }
+
+protected:
+  Symbol(StringRef Name, Kind K, uint32_t Flags, InputFile *F)
+      : Name(Name), File(F), Flags(Flags), SymbolKind(K),
+        Referenced(!Config->GcSections), IsUsedInRegularObj(false),
+        ForceExport(false), CanInline(false), Traced(false) {}
+
+  StringRef Name;
+  InputFile *File;
+  uint32_t Flags;
+  uint32_t OutputSymbolIndex = INVALID_INDEX;
+  uint32_t GOTIndex = INVALID_INDEX;
+  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
@@ -124,32 +151,6 @@
 
   // True if this symbol is specified by --trace-symbol option.
   unsigned Traced : 1;
-
-  const WasmSignature* getSignature() const;
-
-  bool isInGOT() const { return GOTIndex != INVALID_INDEX; }
-
-  uint32_t getGOTIndex() const {
-    assert(GOTIndex != INVALID_INDEX);
-    return GOTIndex;
-  }
-
-  void setGOTIndex(uint32_t Index);
-  bool hasGOTIndex() const { return GOTIndex != INVALID_INDEX; }
-
-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) {}
-
-  StringRef Name;
-  Kind SymbolKind;
-  uint32_t Flags;
-  InputFile *File;
-  uint32_t OutputSymbolIndex = INVALID_INDEX;
-  uint32_t GOTIndex = INVALID_INDEX;
-  bool Referenced;
 };
 
 class FunctionSymbol : public Symbol {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D64208.208043.patch
Type: text/x-patch
Size: 2376 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190704/995db364/attachment.bin>


More information about the llvm-commits mailing list