diff options
| author | WormHeamer | 2025-08-04 23:05:46 -0400 |
|---|---|---|
| committer | WormHeamer | 2025-08-04 23:05:46 -0400 |
| commit | a4eca17c4156863108cd9bec7834bbb1681c0bf7 (patch) | |
| tree | c979e040bdf40277800972acc0f0f35824a774d0 /ir.c | |
| parent | 88b01f43312eeceba87a1378be5cd63bb11f167f (diff) | |
NODE_KEEP macro
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; |
