mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 02:00:12 +01:00
Make constant folding descend into if statements.
This commit is contained in:
parent
e5a9e70cde
commit
70b74928a2
4 changed files with 17 additions and 4 deletions
|
|
@ -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
10
ir.cpp
|
|
@ -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
2
ir.h
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue