diff options
Diffstat (limited to 'ir.c')
| -rw-r--r-- | ir.c | 11 |
1 files changed, 2 insertions, 9 deletions
@@ -585,18 +585,11 @@ zero_no_effect: if (node_eql_i64(CAR(n), 0)) return CDR(n); Node *node_peephole(Node *n, Proc *p, Lexer *l) { assert(n->refs > 0); - node_add_out(p, n, p->keepalive); Node *r = node_idealize(n, p, l); if (r) { r->src_pos = n->src_pos; - /* make sure r doesn't get deleted even if connected to n */ - node_add_out(p, r, p->keepalive); - node_del_out(n, p->keepalive); - node_kill(n, p); - node_del_out(r, p->keepalive); - n = r; - } else { - node_del_out(n, p->keepalive); + NODE_KEEP(p, r, node_kill(n, p)); + return r; } /* FIXME: figure out why this shows the wrong position when in an assignment */ return n; |
