From 575b24a9f023f7950eefea6d85431281f04cc1dc Mon Sep 17 00:00:00 2001 From: lemon Date: Fri, 19 Dec 2025 12:59:24 +0100 Subject: ir: move some filluses() to ir.c, rename optmem.c -> mem2reg.c --- ir/ir.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'ir/ir.c') diff --git a/ir/ir.c b/ir/ir.c index 553885d..8ae41a9 100644 --- a/ir/ir.c +++ b/ir/ir.c @@ -403,6 +403,33 @@ Shrink: return 1; } +void +filluses(struct function *fn) +{ + struct block *blk = fn->entry; + + for (int i = 0; i < ninstr; ++i) + deluses(i); + + do { + for (int i = 0; i < blk->phi.n; ++i) { + int ins = blk->phi.p[i]; + union ref *phi = phitab.p[instrtab[ins].l.i]; + for (int i = 0; i < blk->npred; ++i) + adduse(blk, ins, phi[i]); + } + for (int i = 0; i < blk->ins.n; ++i) { + int ins = blk->ins.p[i]; + adduse(blk, ins, instrtab[ins].l); + adduse(blk, ins, instrtab[ins].r); + } + adduse(blk, USERJUMP, blk->jmp.arg[0]); + adduse(blk, USERJUMP, blk->jmp.arg[1]); + } while ((blk = blk->lnext) != fn->entry); + + fn->prop |= FNUSE; +} + int newinstr(struct block *at, struct instr ins) { -- cgit v1.2.3