From 65d56cb113ebf09664bbade47b1c4c2e960ba336 Mon Sep 17 00:00:00 2001 From: lemon Date: Sun, 4 Jan 2026 14:28:42 +0100 Subject: ir bugfixes --- ir/cfg.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'ir/cfg.c') diff --git a/ir/cfg.c b/ir/cfg.c index 671722d..58e1625 100644 --- a/ir/cfg.c +++ b/ir/cfg.c @@ -68,8 +68,13 @@ filldom(struct function *fn) changed = 0; blk = fn->entry->lnext; do { - struct block *new = blkpred(blk, 0); - for (int i = 1; i < blk->npred; ++i) { + int j; + struct block *new = NULL; + for (j = 0; j < blk->npred; ++j) + if ((new = blkpred(blk, j))->id < blk->id) break; + assert(new); + for (int i = 0; i < blk->npred; ++i) { + if (i == j) continue; struct block *p = blkpred(blk, i); if (p->idom) { /* new = intersect(p, new) */ while (p != new) { -- cgit v1.2.3