summaryrefslogtreecommitdiff
path: root/ir.c
diff options
context:
space:
mode:
authorWormHeamer2025-08-04 23:05:46 -0400
committerWormHeamer2025-08-04 23:05:46 -0400
commita4eca17c4156863108cd9bec7834bbb1681c0bf7 (patch)
treec979e040bdf40277800972acc0f0f35824a774d0 /ir.c
parent88b01f43312eeceba87a1378be5cd63bb11f167f (diff)
NODE_KEEP macro
Diffstat (limited to 'ir.c')
-rw-r--r--ir.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/ir.c b/ir.c
index 62d6600..a6f0c04 100644
--- a/ir.c
+++ b/ir.c
@@ -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;