Refactor ir_dereference support for ir_hierarchical_visitor

Move the accept method for hierarchical visitors from ir_dereference
to the derived classes.  This was mostly straight-forward, but I
suspect that ir_dead_code_local may be broken now.
This commit is contained in:
Ian Romanick
2010-05-19 12:02:19 +02:00
parent 70fe8b6663
commit f3a002b503
6 changed files with 89 additions and 49 deletions
+22 -6
View File
@@ -170,18 +170,34 @@ ir_swizzle::accept(ir_hierarchical_visitor *v)
ir_visitor_status
ir_dereference::accept(ir_hierarchical_visitor *v)
ir_dereference_variable::accept(ir_hierarchical_visitor *v)
{
return v->visit(this);
}
ir_visitor_status
ir_dereference_array::accept(ir_hierarchical_visitor *v)
{
ir_visitor_status s = v->visit_enter(this);
if (s != visit_continue)
return (s == visit_continue_with_parent) ? visit_continue : s;
if (this->mode == ir_reference_array) {
s = this->selector.array_index->accept(v);
if (s != visit_continue)
return (s == visit_continue_with_parent) ? visit_continue : s;
}
s = this->selector.array_index->accept(v);
if (s != visit_continue)
return (s == visit_continue_with_parent) ? visit_continue : s;
s = this->var->accept(v);
return (s == visit_stop) ? s : v->visit_leave(this);
}
ir_visitor_status
ir_dereference_record::accept(ir_hierarchical_visitor *v)
{
ir_visitor_status s = v->visit_enter(this);
if (s != visit_continue)
return (s == visit_continue_with_parent) ? visit_continue : s;
s = this->var->accept(v);
return (s == visit_stop) ? s : v->visit_leave(this);