summaryrefslogtreecommitdiff
path: root/ir.c
diff options
context:
space:
mode:
Diffstat (limited to 'ir.c')
-rw-r--r--ir.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/ir.c b/ir.c
index c935a67..42691ee 100644
--- a/ir.c
+++ b/ir.c
@@ -99,29 +99,18 @@ int type_check(Node *n) {
/* nodes */
const char *node_type_name(NodeType t) {
- const char *names[] = {
- "N/A",
- "start", "if-else", "region", "phi", "stop",
- "projection",
- "return",
- "keepalive",
- "literal",
- "add", "sub", "mul", "div",
- "and", "or", "xor",
- "lshift", "rshift",
- "neg", "not",
- "equal",
- "not-equal",
- "less",
- "greater",
- "less-or-equal",
- "greater-or-equal",
+ static const char *names[] = {
+#define X(n, s) s,
+ NODE_TYPE_LIST
+#undef X
};
return names[t];
}
void node_die(Node *n, Proc *p) {
assert(n->refs == 0);
+ assert(n->op != N_DEAD);
+ n->op = N_DEAD;
n->prev_free = p->free_list;
p->free_list = n;
}
@@ -182,6 +171,8 @@ void node_set_in(Proc *p, Node *n, int idx, Node *to) {
}
void node_add(Proc *p, Node *src, Node *dest) {
+ if (src) assert(src->op != N_DEAD);
+ if (dest) assert(dest->op != N_DEAD);
node_add_in(p, dest, src);
if (!src) return;
node_add_out(p, src, dest);
@@ -194,9 +185,11 @@ void node_add(Proc *p, Node *src, Node *dest) {
}
void node_remove(Proc *p, Node *src, Node *dest) {
+ assert(dest->op != N_DEAD);
node_del_in(dest, src);
if (dest->refs < 1) node_die(dest, p);
if (src) {
+ assert(src->op != N_DEAD);
node_del_out(src, dest);
if (src->out.len < 1) node_kill(src, p);
}
@@ -208,6 +201,7 @@ Node *node_new_empty(Proc *p, NodeType t) {
Node *n;
if (p->free_list) {
n = p->free_list;
+ assert(n->op == N_DEAD);
p->free_list = n->prev_free;
memset(n, 0, sizeof(Node));
} else {