diff options
| author | 2026-01-04 14:28:42 +0100 | |
|---|---|---|
| committer | 2026-01-04 14:28:42 +0100 | |
| commit | 65d56cb113ebf09664bbade47b1c4c2e960ba336 (patch) | |
| tree | d72259647097bcaea0915a57f6433eb0d9d48a7b /ir/cfg.c | |
| parent | b826bf418330b9b13a26195ee541e9e7fd9e77ac (diff) | |
ir bugfixes
Diffstat (limited to 'ir/cfg.c')
| -rw-r--r-- | ir/cfg.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -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) { |