Skip to content
Snippets Groups Projects
Commit 308926ff authored by Ben Gamari's avatar Ben Gamari
Browse files

rts/IPE: Share module_name within a Node

This allows us to shave a 64-bit word off of the packed IPE entry size.
parent 9204a04e
No related branches found
No related tags found
No related merge requests found
......@@ -83,9 +83,10 @@ emitIpeBufferListNode this_mod ents = do
platform = stgToCmmPlatform cfg
int n = mkIntCLit platform n
(cg_ipes, strtab) = flip runState emptyStringTable $ do
((cg_ipes, module_name), strtab) = flip runState emptyStringTable $ do
module_name <- lookupStringTable $ ST.pack $ renderWithContext ctx (ppr this_mod)
mapM (toCgIPE platform ctx module_name) ents
cg_ipes <- mapM (toCgIPE platform ctx) ents
return (cg_ipes, module_name)
tables :: [CmmStatic]
tables = map (CmmStaticLit . CmmLabel . ipeInfoTablePtr) cg_ipes
......@@ -136,6 +137,9 @@ emitIpeBufferListNode this_mod ents = do
-- 'string_table_size' field (decompressed size)
, int $ BS.length uncompressed_strings
-- 'module_name' field
, CmmInt (fromIntegral module_name) W32
]
-- Emit the list of info table pointers
......@@ -173,10 +177,8 @@ toIpeBufferEntries byte_order cg_ipes =
, ipeClosureDesc cg_ipe
, ipeTypeDesc cg_ipe
, ipeLabel cg_ipe
, ipeModuleName cg_ipe
, ipeSrcFile cg_ipe
, ipeSrcSpan cg_ipe
, 0 -- padding
]
word32Builder :: Word32 -> BSB.Builder
......@@ -184,8 +186,8 @@ toIpeBufferEntries byte_order cg_ipes =
BigEndian -> BSB.word32BE
LittleEndian -> BSB.word32LE
toCgIPE :: Platform -> SDocContext -> StrTabOffset -> InfoProvEnt -> State StringTable CgInfoProvEnt
toCgIPE platform ctx module_name ipe = do
toCgIPE :: Platform -> SDocContext -> InfoProvEnt -> State StringTable CgInfoProvEnt
toCgIPE platform ctx ipe = do
table_name <- lookupStringTable $ ST.pack $ renderWithContext ctx (pprCLabel platform (infoTablePtr ipe))
closure_desc <- lookupStringTable $ ST.pack $ show (infoProvEntClosureType ipe)
type_desc <- lookupStringTable $ ST.pack $ infoTableType ipe
......@@ -205,7 +207,6 @@ toCgIPE platform ctx module_name ipe = do
, ipeClosureDesc = closure_desc
, ipeTypeDesc = type_desc
, ipeLabel = label
, ipeModuleName = module_name
, ipeSrcFile = src_file
, ipeSrcSpan = src_span
}
......@@ -216,7 +217,6 @@ data CgInfoProvEnt = CgInfoProvEnt
, ipeClosureDesc :: !StrTabOffset
, ipeTypeDesc :: !StrTabOffset
, ipeLabel :: !StrTabOffset
, ipeModuleName :: !StrTabOffset
, ipeSrcFile :: !StrTabOffset
, ipeSrcSpan :: !StrTabOffset
}
......
......@@ -108,7 +108,7 @@ static InfoProvEnt ipeBufferEntryToIpe(const IpeBufferListNode *node, uint32_t i
.closure_desc = &strings[ent->closure_desc],
.ty_desc = &strings[ent->ty_desc],
.label = &strings[ent->label],
.module = &strings[ent->module_name],
.module = &strings[node->module_name],
.src_file = &strings[ent->src_file],
.src_span = &strings[ent->src_span]
}
......
......@@ -56,10 +56,8 @@ typedef struct {
StringIdx closure_desc;
StringIdx ty_desc;
StringIdx label;
StringIdx module_name;
StringIdx src_file;
StringIdx src_span;
uint32_t _padding;
} IpeBufferEntry;
GHC_STATIC_ASSERT(sizeof(IpeBufferEntry) % (WORD_SIZE_IN_BITS / 8) == 0, "sizeof(IpeBufferEntry) must be a multiple of the word size");
......@@ -83,6 +81,9 @@ typedef struct IpeBufferListNode_ {
const char *string_table;
StgWord string_table_size; // decompressed size
// Shared by all entries
StringIdx module_name;
} IpeBufferListNode;
void registerInfoProvList(IpeBufferListNode *node);
......
7f5278bc0740: IPE: table_name table_name_000, closure_desc closure_desc_000, ty_desc ty_desc_000, label label_000, module module_000, srcloc src_file_000:src_span_000
7f5278bc0740: IPE: table_name table_name_001, closure_desc closure_desc_001, ty_desc ty_desc_001, label label_001, module module_001, srcloc src_file_001:src_span_001
7f5278bc0740: IPE: table_name table_name_002, closure_desc closure_desc_002, ty_desc ty_desc_002, label label_002, module module_002, srcloc src_file_002:src_span_002
7f5278bc0740: IPE: table_name table_name_003, closure_desc closure_desc_003, ty_desc ty_desc_003, label label_003, module module_003, srcloc src_file_003:src_span_003
7f5278bc0740: IPE: table_name table_name_004, closure_desc closure_desc_004, ty_desc ty_desc_004, label label_004, module module_004, srcloc src_file_004:src_span_004
7f5278bc0740: IPE: table_name table_name_005, closure_desc closure_desc_005, ty_desc ty_desc_005, label label_005, module module_005, srcloc src_file_005:src_span_005
7f5278bc0740: IPE: table_name table_name_006, closure_desc closure_desc_006, ty_desc ty_desc_006, label label_006, module module_006, srcloc src_file_006:src_span_006
7f5278bc0740: IPE: table_name table_name_007, closure_desc closure_desc_007, ty_desc ty_desc_007, label label_007, module module_007, srcloc src_file_007:src_span_007
7f5278bc0740: IPE: table_name table_name_008, closure_desc closure_desc_008, ty_desc ty_desc_008, label label_008, module module_008, srcloc src_file_008:src_span_008
7f5278bc0740: IPE: table_name table_name_009, closure_desc closure_desc_009, ty_desc ty_desc_009, label label_009, module module_009, srcloc src_file_009:src_span_009
7f5278bc0740: IPE: table_name table_name_000, closure_desc closure_desc_000, ty_desc ty_desc_000, label label_000, module module_000, srcloc src_file_000:src_span_000
7f5278bc0740: IPE: table_name table_name_001, closure_desc closure_desc_001, ty_desc ty_desc_001, label label_001, module module_001, srcloc src_file_001:src_span_001
7f5278bc0740: IPE: table_name table_name_002, closure_desc closure_desc_002, ty_desc ty_desc_002, label label_002, module module_002, srcloc src_file_002:src_span_002
7f5278bc0740: IPE: table_name table_name_003, closure_desc closure_desc_003, ty_desc ty_desc_003, label label_003, module module_003, srcloc src_file_003:src_span_003
7f5278bc0740: IPE: table_name table_name_004, closure_desc closure_desc_004, ty_desc ty_desc_004, label label_004, module module_004, srcloc src_file_004:src_span_004
7f5278bc0740: IPE: table_name table_name_005, closure_desc closure_desc_005, ty_desc ty_desc_005, label label_005, module module_005, srcloc src_file_005:src_span_005
7f5278bc0740: IPE: table_name table_name_006, closure_desc closure_desc_006, ty_desc ty_desc_006, label label_006, module module_006, srcloc src_file_006:src_span_006
7f5278bc0740: IPE: table_name table_name_007, closure_desc closure_desc_007, ty_desc ty_desc_007, label label_007, module module_007, srcloc src_file_007:src_span_007
7f5278bc0740: IPE: table_name table_name_008, closure_desc closure_desc_008, ty_desc ty_desc_008, label label_008, module module_008, srcloc src_file_008:src_span_008
7f5278bc0740: IPE: table_name table_name_009, closure_desc closure_desc_009, ty_desc ty_desc_009, label label_009, module module_009, srcloc src_file_009:src_span_009
7ffff7a4d740: IPE: table_name table_name_000, closure_desc closure_desc_000, ty_desc ty_desc_000, label label_000, module module_000, srcloc src_file_000:src_span_000
7ffff7a4d740: IPE: table_name table_name_001, closure_desc closure_desc_001, ty_desc ty_desc_001, label label_001, module module_000, srcloc src_file_001:src_span_001
7ffff7a4d740: IPE: table_name table_name_002, closure_desc closure_desc_002, ty_desc ty_desc_002, label label_002, module module_000, srcloc src_file_002:src_span_002
7ffff7a4d740: IPE: table_name table_name_003, closure_desc closure_desc_003, ty_desc ty_desc_003, label label_003, module module_000, srcloc src_file_003:src_span_003
7ffff7a4d740: IPE: table_name table_name_004, closure_desc closure_desc_004, ty_desc ty_desc_004, label label_004, module module_000, srcloc src_file_004:src_span_004
7ffff7a4d740: IPE: table_name table_name_005, closure_desc closure_desc_005, ty_desc ty_desc_005, label label_005, module module_000, srcloc src_file_005:src_span_005
7ffff7a4d740: IPE: table_name table_name_006, closure_desc closure_desc_006, ty_desc ty_desc_006, label label_006, module module_000, srcloc src_file_006:src_span_006
7ffff7a4d740: IPE: table_name table_name_007, closure_desc closure_desc_007, ty_desc ty_desc_007, label label_007, module module_000, srcloc src_file_007:src_span_007
7ffff7a4d740: IPE: table_name table_name_008, closure_desc closure_desc_008, ty_desc ty_desc_008, label label_008, module module_000, srcloc src_file_008:src_span_008
7ffff7a4d740: IPE: table_name table_name_009, closure_desc closure_desc_009, ty_desc ty_desc_009, label label_009, module module_000, srcloc src_file_009:src_span_009
7ffff7a4d740: IPE: table_name table_name_000, closure_desc closure_desc_000, ty_desc ty_desc_000, label label_000, module module_000, srcloc src_file_000:src_span_000
7ffff7a4d740: IPE: table_name table_name_001, closure_desc closure_desc_001, ty_desc ty_desc_001, label label_001, module module_000, srcloc src_file_001:src_span_001
7ffff7a4d740: IPE: table_name table_name_002, closure_desc closure_desc_002, ty_desc ty_desc_002, label label_002, module module_000, srcloc src_file_002:src_span_002
7ffff7a4d740: IPE: table_name table_name_003, closure_desc closure_desc_003, ty_desc ty_desc_003, label label_003, module module_000, srcloc src_file_003:src_span_003
7ffff7a4d740: IPE: table_name table_name_004, closure_desc closure_desc_004, ty_desc ty_desc_004, label label_004, module module_000, srcloc src_file_004:src_span_004
7ffff7a4d740: IPE: table_name table_name_005, closure_desc closure_desc_005, ty_desc ty_desc_005, label label_005, module module_000, srcloc src_file_005:src_span_005
7ffff7a4d740: IPE: table_name table_name_006, closure_desc closure_desc_006, ty_desc ty_desc_006, label label_006, module module_000, srcloc src_file_006:src_span_006
7ffff7a4d740: IPE: table_name table_name_007, closure_desc closure_desc_007, ty_desc ty_desc_007, label label_007, module module_000, srcloc src_file_007:src_span_007
7ffff7a4d740: IPE: table_name table_name_008, closure_desc closure_desc_008, ty_desc ty_desc_008, label label_008, module module_000, srcloc src_file_008:src_span_008
7ffff7a4d740: IPE: table_name table_name_009, closure_desc closure_desc_009, ty_desc ty_desc_009, label label_009, module module_000, srcloc src_file_009:src_span_009
7f86c4be8740: created capset 0 of type 2
7f86c4be8740: created capset 1 of type 3
7f86c4be8740: cap 0: initialised
7f86c4be8740: assigned cap 0 to capset 0
7f86c4be8740: assigned cap 0 to capset 1
7f86c4be8740: cap 0: created thread 1[""]
7f86c4be8740: cap 0: running thread 1[""] (ThreadRunGHC)
7f86c4be8740: cap 0: thread 1[""] stopped (stack overflow, size 109)
7f86c4be8740: cap 0: running thread 1[""] (ThreadRunGHC)
7f86c4be8740: cap 0: created thread 2[""]
7f86c4be8740: cap 0: thread 2 has label IOManager on cap 0
7f86c4be8740: cap 0: thread 1[""] stopped (yielding)
7f86b67fc640: cap 0: running thread 2["IOManager on cap 0"] (ThreadRunGHC)
7f86b67fc640: cap 0: thread 2["IOManager on cap 0"] stopped (yielding)
7f86c4be8740: cap 0: running thread 1[""] (ThreadRunGHC)
7f86c4be8740: cap 0: created thread 3[""]
7f86c4be8740: cap 0: thread 3 has label TimerManager
7f86c4be8740: cap 0: thread 1[""] stopped (finished)
7f86c4be8740: IPE: table_name table_name_009, closure_desc closure_desc_009, ty_desc ty_desc_009, label label_009, module module_009, srcloc src_file_009:src_span_009
7f86c4be8740: IPE: table_name table_name_008, closure_desc closure_desc_008, ty_desc ty_desc_008, label label_008, module module_008, srcloc src_file_008:src_span_008
7f86c4be8740: IPE: table_name table_name_007, closure_desc closure_desc_007, ty_desc ty_desc_007, label label_007, module module_007, srcloc src_file_007:src_span_007
7f86c4be8740: IPE: table_name table_name_006, closure_desc closure_desc_006, ty_desc ty_desc_006, label label_006, module module_006, srcloc src_file_006:src_span_006
7f86c4be8740: IPE: table_name table_name_005, closure_desc closure_desc_005, ty_desc ty_desc_005, label label_005, module module_005, srcloc src_file_005:src_span_005
7f86c4be8740: IPE: table_name table_name_004, closure_desc closure_desc_004, ty_desc ty_desc_004, label label_004, module module_004, srcloc src_file_004:src_span_004
7f86c4be8740: IPE: table_name table_name_003, closure_desc closure_desc_003, ty_desc ty_desc_003, label label_003, module module_003, srcloc src_file_003:src_span_003
7f86c4be8740: IPE: table_name table_name_002, closure_desc closure_desc_002, ty_desc ty_desc_002, label label_002, module module_002, srcloc src_file_002:src_span_002
7f86c4be8740: IPE: table_name table_name_001, closure_desc closure_desc_001, ty_desc ty_desc_001, label label_001, module module_001, srcloc src_file_001:src_span_001
7f86c4be8740: IPE: table_name table_name_000, closure_desc closure_desc_000, ty_desc ty_desc_000, label label_000, module module_000, srcloc src_file_000:src_span_000
7f86c4be8740: IPE: table_name table_name_009, closure_desc closure_desc_009, ty_desc ty_desc_009, label label_009, module module_009, srcloc src_file_009:src_span_009
7f86c4be8740: IPE: table_name table_name_008, closure_desc closure_desc_008, ty_desc ty_desc_008, label label_008, module module_008, srcloc src_file_008:src_span_008
7f86c4be8740: IPE: table_name table_name_007, closure_desc closure_desc_007, ty_desc ty_desc_007, label label_007, module module_007, srcloc src_file_007:src_span_007
7f86c4be8740: IPE: table_name table_name_006, closure_desc closure_desc_006, ty_desc ty_desc_006, label label_006, module module_006, srcloc src_file_006:src_span_006
7f86c4be8740: IPE: table_name table_name_005, closure_desc closure_desc_005, ty_desc ty_desc_005, label label_005, module module_005, srcloc src_file_005:src_span_005
7f86c4be8740: IPE: table_name table_name_004, closure_desc closure_desc_004, ty_desc ty_desc_004, label label_004, module module_004, srcloc src_file_004:src_span_004
7f86c4be8740: IPE: table_name table_name_003, closure_desc closure_desc_003, ty_desc ty_desc_003, label label_003, module module_003, srcloc src_file_003:src_span_003
7f86c4be8740: IPE: table_name table_name_002, closure_desc closure_desc_002, ty_desc ty_desc_002, label label_002, module module_002, srcloc src_file_002:src_span_002
7f86c4be8740: IPE: table_name table_name_001, closure_desc closure_desc_001, ty_desc ty_desc_001, label label_001, module module_001, srcloc src_file_001:src_span_001
7f86c4be8740: IPE: table_name table_name_000, closure_desc closure_desc_000, ty_desc ty_desc_000, label label_000, module module_000, srcloc src_file_000:src_span_000
7f86c4be8740: cap 0: created thread 4[""]
7f86b67fc640: cap 0: running thread 2["IOManager on cap 0"] (ThreadRunGHC)
7f86b67fc640: cap 0: thread 2["IOManager on cap 0"] stopped (suspended while making a foreign call)
7f86b5ffb640: cap 0: running thread 3["TimerManager"] (ThreadRunGHC)
7f86b5ffb640: cap 0: thread 3["TimerManager"] stopped (suspended while making a foreign call)
7f86c4be8740: cap 0: running thread 4[""] (ThreadRunGHC)
7f86c4be8740: cap 0: thread 4[""] stopped (yielding)
7f86c4be8740: cap 0: running thread 4[""] (ThreadRunGHC)
7f86c4be8740: cap 0: thread 4[""] stopped (finished)
7f86b57fa640: cap 0: requesting sequential GC
7f86b57fa640: cap 0: starting GC
7f86b57fa640: cap 0: GC working
7f86b57fa640: cap 0: GC idle
7f86b57fa640: cap 0: GC done
7f86b57fa640: cap 0: GC idle
7f86b57fa640: cap 0: GC done
7f86b57fa640: cap 0: GC idle
7f86b57fa640: cap 0: GC done
7f86b57fa640: cap 0: Memory Return (Current: 6) (Needed: 8) (Returned: 0)
7f86b57fa640: cap 0: all caps stopped for GC
7f86b57fa640: cap 0: finished GC
7f86b5ffb640: cap 0: running thread 3["TimerManager"] (ThreadRunGHC)
7f86b5ffb640: cap 0: thread 3["TimerManager"] stopped (finished)
7f86b67fc640: cap 0: running thread 2["IOManager on cap 0"] (ThreadRunGHC)
7f86b67fc640: cap 0: thread 2["IOManager on cap 0"] stopped (finished)
7f86c4be8740: removed cap 0 from capset 0
7f86c4be8740: removed cap 0 from capset 1
7f86c4be8740: cap 0: shutting down
7f86c4be8740: deleted capset 0
7f86c4be8740: deleted capset 1
7ffff7a4d740: IPE: table_name table_name_009, closure_desc closure_desc_009, ty_desc ty_desc_009, label label_009, module module_000, srcloc src_file_009:src_span_009
7ffff7a4d740: IPE: table_name table_name_008, closure_desc closure_desc_008, ty_desc ty_desc_008, label label_008, module module_000, srcloc src_file_008:src_span_008
7ffff7a4d740: IPE: table_name table_name_007, closure_desc closure_desc_007, ty_desc ty_desc_007, label label_007, module module_000, srcloc src_file_007:src_span_007
7ffff7a4d740: IPE: table_name table_name_006, closure_desc closure_desc_006, ty_desc ty_desc_006, label label_006, module module_000, srcloc src_file_006:src_span_006
7ffff7a4d740: IPE: table_name table_name_005, closure_desc closure_desc_005, ty_desc ty_desc_005, label label_005, module module_000, srcloc src_file_005:src_span_005
7ffff7a4d740: IPE: table_name table_name_004, closure_desc closure_desc_004, ty_desc ty_desc_004, label label_004, module module_000, srcloc src_file_004:src_span_004
7ffff7a4d740: IPE: table_name table_name_003, closure_desc closure_desc_003, ty_desc ty_desc_003, label label_003, module module_000, srcloc src_file_003:src_span_003
7ffff7a4d740: IPE: table_name table_name_002, closure_desc closure_desc_002, ty_desc ty_desc_002, label label_002, module module_000, srcloc src_file_002:src_span_002
7ffff7a4d740: IPE: table_name table_name_001, closure_desc closure_desc_001, ty_desc ty_desc_001, label label_001, module module_000, srcloc src_file_001:src_span_001
7ffff7a4d740: IPE: table_name table_name_000, closure_desc closure_desc_000, ty_desc ty_desc_000, label label_000, module module_000, srcloc src_file_000:src_span_000
7ffff7a4d740: IPE: table_name table_name_009, closure_desc closure_desc_009, ty_desc ty_desc_009, label label_009, module module_000, srcloc src_file_009:src_span_009
7ffff7a4d740: IPE: table_name table_name_008, closure_desc closure_desc_008, ty_desc ty_desc_008, label label_008, module module_000, srcloc src_file_008:src_span_008
7ffff7a4d740: IPE: table_name table_name_007, closure_desc closure_desc_007, ty_desc ty_desc_007, label label_007, module module_000, srcloc src_file_007:src_span_007
7ffff7a4d740: IPE: table_name table_name_006, closure_desc closure_desc_006, ty_desc ty_desc_006, label label_006, module module_000, srcloc src_file_006:src_span_006
7ffff7a4d740: IPE: table_name table_name_005, closure_desc closure_desc_005, ty_desc ty_desc_005, label label_005, module module_000, srcloc src_file_005:src_span_005
7ffff7a4d740: IPE: table_name table_name_004, closure_desc closure_desc_004, ty_desc ty_desc_004, label label_004, module module_000, srcloc src_file_004:src_span_004
7ffff7a4d740: IPE: table_name table_name_003, closure_desc closure_desc_003, ty_desc ty_desc_003, label label_003, module module_000, srcloc src_file_003:src_span_003
7ffff7a4d740: IPE: table_name table_name_002, closure_desc closure_desc_002, ty_desc ty_desc_002, label label_002, module module_000, srcloc src_file_002:src_span_002
7ffff7a4d740: IPE: table_name table_name_001, closure_desc closure_desc_001, ty_desc ty_desc_001, label label_001, module module_000, srcloc src_file_001:src_span_001
7ffff7a4d740: IPE: table_name table_name_000, closure_desc closure_desc_000, ty_desc ty_desc_000, label label_000, module module_000, srcloc src_file_000:src_span_000
......@@ -53,6 +53,8 @@ HaskellObj shouldFindOneIfItHasBeenRegistered(Capability *cap) {
StringTable st;
init_string_table(&st);
node->module_name = add_string(&st, "TheModule");
HaskellObj fortyTwo = UNTAG_CLOSURE(rts_mkInt(cap, 42));
node->next = NULL;
node->compressed = 0;
......@@ -71,7 +73,7 @@ HaskellObj shouldFindOneIfItHasBeenRegistered(Capability *cap) {
assertStringsEqual(result.prov.closure_desc, "closure_desc_042");
assertStringsEqual(result.prov.ty_desc, "ty_desc_042");
assertStringsEqual(result.prov.label, "label_042");
assertStringsEqual(result.prov.module, "module_042");
assertStringsEqual(result.prov.module, "TheModule");
assertStringsEqual(result.prov.src_file, "src_file_042");
assertStringsEqual(result.prov.src_span, "src_span_042");
......@@ -88,6 +90,8 @@ void shouldFindTwoIfTwoHaveBeenRegistered(Capability *cap,
StringTable st;
init_string_table(&st);
node->module_name = add_string(&st, "TheModule");
HaskellObj twentyThree = UNTAG_CLOSURE(rts_mkInt8(cap, 23));
node->next = NULL;
node->compressed = 0;
......
......@@ -48,11 +48,6 @@ IpeBufferEntry makeAnyProvEntry(Capability *cap, StringTable *st, int i) {
snprintf(label, labelLength, "label_%03i", i);
provEnt.label = add_string(st, label);
unsigned int moduleLength = strlen("module_") + 3 /* digits */ + 1 /* null character */;
char *module = malloc(sizeof(char) * moduleLength);
snprintf(module, moduleLength, "module_%03i", i);
provEnt.module_name = add_string(st, module);
unsigned int srcFileLength = strlen("src_file_") + 3 /* digits */ + 1 /* null character */;
char *srcFile = malloc(sizeof(char) * srcFileLength);
snprintf(srcFile, srcFileLength, "src_file_%03i", i);
......@@ -77,6 +72,11 @@ IpeBufferListNode *makeAnyProvEntries(Capability *cap, int start, int end) {
StringTable st;
init_string_table(&st);
unsigned int moduleLength = strlen("module_") + 3 /* digits */ + 1 /* null character */;
char *module = malloc(sizeof(char) * moduleLength);
snprintf(module, moduleLength, "module_%03i", start);
node->module_name = add_string(&st, module);
// Make the entries and fill the buffers
for (int i=start; i < end; i++) {
HaskellObj closure = rts_mkInt(cap, 42);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment