mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-10 23:32:09 +00:00
Clean up dag live alias code a little
Mainly, this makes it possible to reuse the alias code.
This commit is contained in:
parent
82b334e919
commit
2977c145d0
1 changed files with 22 additions and 14 deletions
|
@ -381,7 +381,8 @@ dagnode_set_edges (dag_t *dag, dagnode_t *n)
|
||||||
def_visit_all (op->o.def, 1,
|
def_visit_all (op->o.def, 1,
|
||||||
dagnode_def_set_edges_visit, n);
|
dagnode_def_set_edges_visit, n);
|
||||||
}
|
}
|
||||||
if (op->op_type == op_temp) {
|
if (op->op_type == op_temp
|
||||||
|
&& (op->o.tempop.alias || op->o.tempop.alias_ops)) {
|
||||||
tempop_visit_all (&op->o.tempop, 1,
|
tempop_visit_all (&op->o.tempop, 1,
|
||||||
dagnode_tempop_set_edges_visit, n);
|
dagnode_tempop_set_edges_visit, n);
|
||||||
}
|
}
|
||||||
|
@ -488,7 +489,10 @@ dag_kill_aliases (daglabel_t *l)
|
||||||
operand_t *op = l->op;
|
operand_t *op = l->op;
|
||||||
|
|
||||||
if (op->op_type == op_temp) {
|
if (op->op_type == op_temp) {
|
||||||
tempop_visit_all (&op->o.tempop, 1, dag_tempop_kill_aliases_visit, l);
|
if (op->o.tempop.alias || op->o.tempop.alias_ops) {
|
||||||
|
tempop_visit_all (&op->o.tempop, 1,
|
||||||
|
dag_tempop_kill_aliases_visit, l);
|
||||||
|
}
|
||||||
} else if (op->op_type == op_def) {
|
} else if (op->op_type == op_def) {
|
||||||
if (op->o.def->alias || op->o.def->alias_defs) {
|
if (op->o.def->alias || op->o.def->alias_defs) {
|
||||||
def_visit_all (op->o.def, 1, dag_def_kill_aliases_visit, l);
|
def_visit_all (op->o.def, 1, dag_def_kill_aliases_visit, l);
|
||||||
|
@ -516,6 +520,21 @@ dag_def_live_aliases (def_t *def, void *_d)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dag_live_aliases(operand_t *op)
|
||||||
|
{
|
||||||
|
// FIXME it would be better to propogate the aliasing
|
||||||
|
if (op->op_type == op_temp
|
||||||
|
&& (op->o.tempop.alias || op->o.tempop.alias_ops)) {
|
||||||
|
tempop_visit_all (&op->o.tempop, 1, dag_tempop_live_aliases,
|
||||||
|
&op->o.tempop);
|
||||||
|
}
|
||||||
|
if (op->op_type == op_def
|
||||||
|
&& (op->o.def->alias || op->o.def->alias_defs)) {
|
||||||
|
def_visit_all (op->o.def, 1, dag_def_live_aliases, op->o.def);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dagnode_attach_label (dagnode_t *n, daglabel_t *l)
|
dagnode_attach_label (dagnode_t *n, daglabel_t *l)
|
||||||
{
|
{
|
||||||
|
@ -541,18 +560,7 @@ dagnode_attach_label (dagnode_t *n, daglabel_t *l)
|
||||||
set_add (n->identifiers, l->number);
|
set_add (n->identifiers, l->number);
|
||||||
dag_kill_aliases (l);
|
dag_kill_aliases (l);
|
||||||
if (n->label->op) {
|
if (n->label->op) {
|
||||||
// FIXME it would be better to propogate the aliasing
|
dag_live_aliases (n->label->op);
|
||||||
if (n->label->op->op_type == op_temp) {
|
|
||||||
tempop_visit_all (&n->label->op->o.tempop, 1,
|
|
||||||
dag_tempop_live_aliases,
|
|
||||||
&n->label->op->o.tempop);
|
|
||||||
}
|
|
||||||
if (n->label->op->op_type == op_def
|
|
||||||
&& (n->label->op->o.def->alias
|
|
||||||
|| n->label->op->o.def->alias_defs)) {
|
|
||||||
def_visit_all (n->label->op->o.def, 1, dag_def_live_aliases,
|
|
||||||
n->label->op->o.def);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue