mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-10-06 07:55:42 +00:00
optimize ICF refinement and COMDAT handling
Cache immutable section and relocation metadata before color refinement, then reuse generated-tagged concurrent tables. Parallelize grouping and fold marking. Include associative COMDAT descendants in contribution hashes and canonicalize relocation targets to selected COMDAT leaders.
This commit is contained in:
committed by
Ryan Fleury
parent
abfea7c33a
commit
b84d32d9fb
@@ -34,6 +34,23 @@ void_list_push(Arena *arena, VoidList *list, void *v)
|
||||
return n;
|
||||
}
|
||||
|
||||
internal void
|
||||
u32_list_push_node(U32List *list, U32Node *n)
|
||||
{
|
||||
SLLQueuePush(list->first, list->last, n);
|
||||
list->count += 1;
|
||||
}
|
||||
|
||||
internal U32Node *
|
||||
u32_list_push(Arena *arena, U32List *list, U32 data)
|
||||
{
|
||||
U32Node *n = push_array(arena, U32Node, 1);
|
||||
n->next = 0;
|
||||
n->data = data;
|
||||
u32_list_push_node(list, n);
|
||||
return n;
|
||||
}
|
||||
|
||||
internal void
|
||||
u64_list_push_node(U64List *list, U64Node *n)
|
||||
{
|
||||
@@ -264,4 +281,3 @@ s64_array_from_list(Arena *arena, S64List *list)
|
||||
for EachNode(n, S64Node, list->first) { result.v[result.count++] = n->v; }
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ typedef struct U64Node { U64 data; struct U64Node *next; } U64Node;
|
||||
typedef struct S64Node { S64 v; struct S64Node *next; } S64Node;
|
||||
|
||||
typedef struct VoidList { U64 count; VoidNode *first, *last; } VoidList;
|
||||
typedef struct U32List { U64 count; U32Node *first, *last; } U32List;
|
||||
typedef struct U64List { U64 count; U64Node *first, *last; } U64List;
|
||||
typedef struct S64List { U64 count; S64Node *first, *last; } S64List;
|
||||
|
||||
@@ -20,6 +21,9 @@ internal U64 void_list_count_nodes (VoidNode *head);
|
||||
internal void void_node_concat (VoidNode **head, VoidNode *node);
|
||||
internal void void_node_concat_atomic(VoidNode **head, VoidNode *node);
|
||||
|
||||
internal void u32_list_push_node (U32List *list, U32Node *n);
|
||||
internal U32Node * u32_list_push (Arena *arena, U32List *list, U32 v);
|
||||
|
||||
internal void u64_list_push_node (U64List *list, U64Node *n);
|
||||
internal U64Node * u64_list_push (Arena *arena, U64List *list, U64 v);
|
||||
internal void u64_list_concat_in_place(U64List *list, U64List *to_concat);
|
||||
@@ -44,4 +48,3 @@ internal void s64_list_push_node (S64List *list, S64Node *n);
|
||||
internal S64Node * s64_list_push (Arena *arena, S64List *list, S64 v);
|
||||
internal void s64_list_concat_in_place(S64List *list, S64List *to_concat);
|
||||
internal S64Array s64_array_from_list (Arena *arena, S64List *list);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user