aboutsummaryrefslogtreecommitdiffhomepage
path: root/ir/cfg.c
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2026-01-04 14:28:42 +0100
committerlemon <lsof@mailbox.org>2026-01-04 14:28:42 +0100
commit65d56cb113ebf09664bbade47b1c4c2e960ba336 (patch)
treed72259647097bcaea0915a57f6433eb0d9d48a7b /ir/cfg.c
parentb826bf418330b9b13a26195ee541e9e7fd9e77ac (diff)
ir bugfixes
Diffstat (limited to 'ir/cfg.c')
-rw-r--r--ir/cfg.c9
1 files changed, 7 insertions, 2 deletions
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) {