Assemble ud-chain and use that for register allocation

This commit is contained in:
Mid
2023-08-31 15:26:08 +03:00
parent 62c5a0ff47
commit 5666568c1c
8 changed files with 384 additions and 113 deletions

View File

@@ -6,26 +6,8 @@
// But CP is NECESSARY, otherwise it creates too many variables
// that are unable to be coalesced by the regallocator
static void recalc_lifespan(VarTableEntry *vte) {
assert(vte->kind == VARTABLEENTRY_VAR);
size_t start = 0xFFFFFFFF, end = 0;
UseDef *ud = vte->data.var.usedefFirst;
while(ud) {
if(ud->t < start) start = ud->t;
if(ud->t > end) end = ud->t;
ud = ud->next;
}
vte->data.var.start = start;
vte->data.var.end = end;
}
void optim_chunk(ASTChunk *chu) {
AST *s = chu->statementFirst, *sPrev = NULL;
/*AST *s = chu->statementFirst, *sPrev = NULL;
while(s) {
if(s->nodeKind == AST_STMT_ASSIGN && s->stmtAssign.what->nodeKind == AST_EXPR_VAR && s->stmtAssign.to->nodeKind == AST_EXPR_VAR) {
VarTableEntry *dst = ((AST*) s->stmtAssign.what)->exprVar.thing;
@@ -89,5 +71,5 @@ void optim_chunk(ASTChunk *chu) {
copypropfail:
sPrev = s;
s = s->statement.next;
}
}*/
}