set up inline site info building scaffolding

This commit is contained in:
Ryan Fleury
2024-06-04 17:04:53 -07:00
parent 7495096e05
commit 550e8a0451
5 changed files with 82 additions and 16 deletions
+1 -1
View File
@@ -74,7 +74,7 @@ commands =
},
.rjf_f4 =
{
.win = "build rdi_from_pdb release telemetry && pushd build && rdi_from_pdb.exe --pdb:mule_main.pdb --out:mule_main.rdi --capture && popd",
.win = "build rdi_from_pdb release telemetry && pushd build && rdi_from_pdb.exe --pdb:UnrealEditorFortnite.pdb --out:profile.rdi --capture && popd",
.linux = "",
.out = "*compilation*",
.footer_panel = true,
+55
View File
@@ -833,6 +833,61 @@ rdim_symbol_chunk_list_concat_in_place(RDIM_SymbolChunkList *dst, RDIM_SymbolChu
rdim_memzero_struct(to_push);
}
////////////////////////////////
//~ rjf: [Building] Inline Site Info Building
RDI_PROC RDIM_InlineSite *
rdim_inline_site_chunk_list_push(RDIM_Arena *arena, RDIM_InlineSiteChunkList *list, RDI_U64 cap)
{
RDIM_InlineSiteChunkNode *n = list->last;
if(n == 0 || n->count >= n->cap)
{
n = rdim_push_array(arena, RDIM_InlineSiteChunkNode, 1);
n->cap = cap;
n->base_idx = list->total_count;
n->v = rdim_push_array(arena, RDIM_InlineSite, n->cap);
RDIM_SLLQueuePush(list->first, list->last, n);
list->chunk_count += 1;
}
RDIM_InlineSite *result = &n->v[n->count];
result->chunk = n;
n->count += 1;
list->total_count += 1;
return result;
}
RDI_PROC RDI_U64
rdim_idx_from_inline_site(RDIM_InlineSite *inline_site)
{
RDI_U64 idx = 0;
if(inline_site != 0 && inline_site->chunk != 0)
{
idx = inline_site->chunk->base_idx + (inline_site - inline_site->chunk->v) + 1;
}
return idx;
}
RDI_PROC void
rdim_inline_site_chunk_list_concat_in_place(RDIM_InlineSiteChunkList *dst, RDIM_InlineSiteChunkList *to_push)
{
for(RDIM_InlineSiteChunkNode *n = to_push->first; n != 0; n = n->next)
{
n->base_idx += dst->total_count;
}
if(dst->last != 0 && to_push->first != 0)
{
dst->last->next = to_push->first;
dst->last = to_push->last;
dst->chunk_count += to_push->chunk_count;
dst->total_count += to_push->total_count;
}
else if(dst->first == 0)
{
rdim_memcpy_struct(dst, to_push);
}
rdim_memzero_struct(to_push);
}
////////////////////////////////
//~ rjf: [Building] Scope Info Building
+8 -1
View File
@@ -778,7 +778,7 @@ struct RDIM_InlineSite
RDI_U32 call_col_num;
RDIM_Type *type;
RDIM_Type *owner;
RDIM_LineTable *line_info;
RDIM_LineTable *line_table;
};
typedef struct RDIM_InlineSiteChunkNode RDIM_InlineSiteChunkNode;
@@ -1157,6 +1157,13 @@ RDI_PROC RDIM_Symbol *rdim_symbol_chunk_list_push(RDIM_Arena *arena, RDIM_Symbol
RDI_PROC RDI_U64 rdim_idx_from_symbol(RDIM_Symbol *symbol);
RDI_PROC void rdim_symbol_chunk_list_concat_in_place(RDIM_SymbolChunkList *dst, RDIM_SymbolChunkList *to_push);
////////////////////////////////
//~ rjf: [Building] Inline Site Info Building
RDI_PROC RDIM_InlineSite *rdim_inline_site_chunk_list_push(RDIM_Arena *arena, RDIM_InlineSiteChunkList *list, RDI_U64 cap);
RDI_PROC RDI_U64 rdim_idx_from_inline_site(RDIM_InlineSite *inline_site);
RDI_PROC void rdim_inline_site_chunk_list_concat_in_place(RDIM_InlineSiteChunkList *dst, RDIM_InlineSiteChunkList *to_push);
////////////////////////////////
//~ rjf: [Building] Scope Info Building
+17 -14
View File
@@ -3436,6 +3436,20 @@ p2r_convert(Arena *arena, P2R_User2Convert *in)
link_name_map = &link_name_map__in_progress;
}
//////////////////////////////////////////////////////////////
//- rjf: join unit conversion & src file & line table tasks
//
RDIM_UnitChunkList all_units = {0};
RDIM_SrcFileChunkList all_src_files = {0};
RDIM_LineTableChunkList all_line_tables = {0};
ProfScope("join unit conversion & src file tasks")
{
P2R_UnitConvertOut *out = ts_join_struct(unit_convert_ticket, max_U64, P2R_UnitConvertOut);
all_units = out->units;
all_src_files = out->src_files;
all_line_tables = out->line_tables;
}
//////////////////////////////////////////////////////////////
//- rjf: produce symbols from all streams
//
@@ -3443,6 +3457,7 @@ p2r_convert(Arena *arena, P2R_User2Convert *in)
RDIM_SymbolChunkList all_global_variables = {0};
RDIM_SymbolChunkList all_thread_variables = {0};
RDIM_ScopeChunkList all_scopes = {0};
RDIM_InlineSiteChunkList all_inline_sites = {0};
ProfScope("produce symbols from all streams")
{
////////////////////////////
@@ -3493,24 +3508,11 @@ p2r_convert(Arena *arena, P2R_User2Convert *in)
rdim_symbol_chunk_list_concat_in_place(&all_global_variables, &out->global_variables);
rdim_symbol_chunk_list_concat_in_place(&all_thread_variables, &out->thread_variables);
rdim_scope_chunk_list_concat_in_place(&all_scopes, &out->scopes);
rdim_inline_site_chunk_list_concat_in_place(&all_inline_sites,&out->inline_sites);
}
}
}
//////////////////////////////////////////////////////////////
//- rjf: join unit conversion & src file & line table tasks
//
RDIM_UnitChunkList all_units = {0};
RDIM_SrcFileChunkList all_src_files = {0};
RDIM_LineTableChunkList all_line_tables = {0};
ProfScope("join unit conversion & src file tasks")
{
P2R_UnitConvertOut *out = ts_join_struct(unit_convert_ticket, max_U64, P2R_UnitConvertOut);
all_units = out->units;
all_src_files = out->src_files;
all_line_tables = out->line_tables;
}
//////////////////////////////////////////////////////////////
//- rjf: types pass 5: join UDT build tasks
//
@@ -3537,6 +3539,7 @@ p2r_convert(Arena *arena, P2R_User2Convert *in)
out->bake_params.thread_variables = all_thread_variables;
out->bake_params.procedures = all_procedures;
out->bake_params.scopes = all_scopes;
out->bake_params.inline_sites = all_inline_sites;
}
scratch_end(scratch);
+1
View File
@@ -258,6 +258,7 @@ struct P2R_SymbolStreamConvertOut
RDIM_SymbolChunkList global_variables;
RDIM_SymbolChunkList thread_variables;
RDIM_ScopeChunkList scopes;
RDIM_InlineSiteChunkList inline_sites;
};
////////////////////////////////