glsl/opt_algebraic: Don't handle invariant or precise trees

Reviewed-by: Francisco Jerez <currojerez@riseup.net>
This commit is contained in:
Jason Ekstrand 2016-03-17 14:41:14 -07:00
parent 89b604922d
commit b2209b2333

View file

@ -58,6 +58,8 @@ public:
{
}
virtual ir_visitor_status visit_enter(ir_assignment *ir);
ir_rvalue *handle_expression(ir_expression *ir);
void handle_rvalue(ir_rvalue **rvalue);
bool reassociate_constant(ir_expression *ir1,
@ -80,6 +82,23 @@ public:
} /* unnamed namespace */
ir_visitor_status
ir_algebraic_visitor::visit_enter(ir_assignment *ir)
{
ir_variable *var = ir->lhs->variable_referenced();
if (var->data.invariant || var->data.precise) {
/* If we're assigning to an invariant or precise variable, just bail.
* Most of the algebraic optimizations aren't precision-safe.
*
* FINISHME: Find out which optimizations are precision-safe and enable
* then only for invariant or precise trees.
*/
return visit_continue_with_parent;
} else {
return visit_continue;
}
}
static inline bool
is_vec_zero(ir_constant *ir)
{