aboutsummaryrefslogtreecommitdiffhomepage
path: root/ir
diff options
context:
space:
mode:
Diffstat (limited to 'ir')
-rw-r--r--ir/regalloc.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/ir/regalloc.c b/ir/regalloc.c
index e8eccfb..c1d925d 100644
--- a/ir/regalloc.c
+++ b/ir/regalloc.c
@@ -1218,11 +1218,14 @@ fini(struct rega *ra)
bool delet = 1;
for (int i = 0; i < blk->npred; ++i) {
struct block *p = blkpred(blk, i);
- if (p->s2 && !blk->s1)
+ if (p == blk || (p->s2 && !blk->s1))
delet = 0;
}
+ startbbvisit();
for (int i = 0; i < blk->npred; ++i) {
struct block *p = blkpred(blk, i);
+ if (wasvisited(p)) break;
+ markvisited(p);
if (!p->s2 && !blk->s1) {
/* simplify:
*