Make constant folding descend into if statements.

This commit is contained in:
Eric Anholt 2010-04-06 11:52:09 -07:00
parent e5a9e70cde
commit 70b74928a2
4 changed files with 17 additions and 4 deletions

View file

@ -651,10 +651,8 @@ main(int argc, char **argv)
/* Optimization passes */
if (!state.error) {
/* Constant folding */
foreach_iter(exec_list_iterator, iter, instructions) {
ir_constant_folding_visitor v;
((ir_instruction *)iter.get())->accept(& v);
}
ir_constant_folding_visitor constant_folding;
visit_exec_list(&instructions, &constant_folding);
}
/* Print out the resulting IR */

10
ir.cpp
View file

@ -24,6 +24,7 @@
#include "main/imports.h"
#include "main/simple_list.h"
#include "ir.h"
#include "ir_visitor.h"
#include "glsl_types.h"
ir_assignment::ir_assignment(ir_rvalue *lhs, ir_rvalue *rhs,
@ -367,3 +368,12 @@ ir_call::get_error_instruction()
call->type = glsl_type::error_type;
return call;
}
void
visit_exec_list(exec_list *list, ir_visitor *visitor)
{
foreach_iter(exec_list_iterator, iter, *list) {
((ir_instruction *)iter.get())->accept(visitor);
}
}

2
ir.h
View file

@ -607,6 +607,8 @@ public:
} value;
};
void
visit_exec_list(exec_list *list, ir_visitor *visitor);
extern void
_mesa_glsl_initialize_variables(exec_list *instructions,

View file

@ -141,4 +141,7 @@ ir_constant_folding_visitor::visit(ir_if *ir)
ir->condition = const_val;
else
ir->condition->accept(this);
visit_exec_list(&ir->then_instructions, this);
visit_exec_list(&ir->else_instructions, this);
}