[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