Browse Source

Fix ir_dead_code for function refactoring.

tags/mesa-7.9-rc1
Kenneth Graunke 15 years ago
parent
commit
6202cbfe36
2 changed files with 14 additions and 11 deletions
  1. 6
    0
      ir.h
  2. 8
    11
      ir_dead_code.cpp

+ 6
- 0
ir.h View File

@@ -52,6 +52,7 @@ public:
*/
/*@{*/
virtual class ir_variable * as_variable() { return NULL; }
virtual class ir_function * as_function() { return NULL; }
virtual class ir_dereference * as_dereference() { return NULL; }
virtual class ir_rvalue * as_rvalue() { return NULL; }
virtual class ir_label * as_label() { return NULL; }
@@ -243,6 +244,11 @@ class ir_function : public ir_instruction {
public:
ir_function(const char *name);

virtual ir_function *as_function()
{
return this;
}

virtual void accept(ir_visitor *v)
{
v->visit(this);

+ 8
- 11
ir_dead_code.cpp View File

@@ -62,7 +62,6 @@ public:
*/
/*@{*/
virtual void visit(ir_variable *);
virtual void visit(ir_label *);
virtual void visit(ir_loop *);
virtual void visit(ir_loop_jump *);
virtual void visit(ir_function_signature *);
@@ -121,12 +120,6 @@ ir_dead_code_visitor::visit(ir_variable *ir)
}


void
ir_dead_code_visitor::visit(ir_label *ir)
{
ir->signature->accept(this);
}

void
ir_dead_code_visitor::visit(ir_loop *ir)
{
@@ -325,10 +318,14 @@ do_dead_code_unlinked(exec_list *instructions)

foreach_iter(exec_list_iterator, iter, *instructions) {
ir_instruction *ir = (ir_instruction *)iter.get();
ir_label *label = ir->as_label();
if (label) {
if (do_dead_code(&label->signature->body))
progress = true;
ir_function *f = ir->as_function();
if (f) {
foreach_iter(exec_list_iterator, sigiter, *f) {
ir_function_signature *sig =
(ir_function_signature *) sigiter.get();
if (do_dead_code(&sig->body))
progress = true;
}
}
}


Loading…
Cancel
Save