diff --git a/tools/qfcc/source/dags.c b/tools/qfcc/source/dags.c index 0a9681129..dba7cbabc 100644 --- a/tools/qfcc/source/dags.c +++ b/tools/qfcc/source/dags.c @@ -276,18 +276,9 @@ make_dag (const sblock_t *block) operand_t *x = 0, *y = 0, *z = 0, *w = 0; dagnode_t *n = 0, *ny, *nz, *nw; daglabel_t *op, *lx; - flowvar_t *var; int simp; simp = find_operands (s, &x, &y, &z, &w); - if (x && (var = flow_get_var (x))) - set_add (var->define, s->number); - if (y && (var = flow_get_var (y))) - set_add (var->use, s->number); - if (z && (var = flow_get_var (z))) - set_add (var->use, s->number); - if (w && (var = flow_get_var (w))) - set_add (var->use, s->number); if (!(ny = node (y))) { ny = leaf_node (y); if (simp) { diff --git a/tools/qfcc/source/flow.c b/tools/qfcc/source/flow.c index 3bcfa0af2..9f2a91304 100644 --- a/tools/qfcc/source/flow.c +++ b/tools/qfcc/source/flow.c @@ -321,6 +321,23 @@ flow_live_vars (flowgraph_t *graph) void flow_data_flow (flowgraph_t *graph) { + int i, j; + flownode_t *node; + statement_t *st; + operand_t *d, *u[3]; + flowvar_t *var; + + for (i = 0; i < graph->num_nodes; i++) { + node = graph->nodes[i]; + for (st = node->sblock->statements; st; st = st->next) { + find_operands (st, &d, &u[0], &u[1], &u[2]); + if (d && (var = flow_get_var (d))) + set_add (var->define, st->number); + for (j = 0; j < 3; j++) + if (u[j] && (var = flow_get_var (u[j]))) + set_add (var->use, st->number); + } + } flow_live_vars (graph); }