From 36de4f902c4eec9f8d918e00cf0bf89d6b670cf5 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Wed, 3 Apr 2024 16:00:15 +0300 Subject: add ssa form --- src/unreachable.c | 34 ++++++---------------------------- 1 file changed, 6 insertions(+), 28 deletions(-) (limited to 'src/unreachable.c') diff --git a/src/unreachable.c b/src/unreachable.c index 90a65bd..aa04f46 100644 --- a/src/unreachable.c +++ b/src/unreachable.c @@ -1,38 +1,16 @@ #include -void build_reachable_vec(struct vec *reachable, struct blk *cur) +void remove_unvisited(struct fn *f, int visited) { - if (cur->reachable) - return; - - cur->reachable = true; - vec_append(reachable, &cur); - - if (cur->btype == RET) - return; - - if (cur->btype == J) - cur->s1 = cur->s2; - - if (cur->s1) - build_reachable_vec(reachable, cur->s1); - - if (cur->s2) - build_reachable_vec(reachable, cur->s2); -} - -void unreachable(struct fn *f) -{ - struct vec reachable = vec_create(sizeof(struct blk *)); - struct blk *b = blk_at(f->blks, 0); - build_reachable_vec(&reachable, b); + struct vec new = vec_create(sizeof(struct blk *)); foreach_blk(bi, f->blks) { struct blk *b = blk_at(f->blks, bi); - if (!b->reachable) + if (b->visited < visited) destroy_block(b); - + else + vec_append(&new, &b); } vec_destroy(&f->blks); - f->blks = reachable; + f->blks = new; } -- cgit v1.3