glsl/rebalance_tree: 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:44:57 -07:00
parent b2209b2333
commit 028d6ecfe0
+16
View File
@@ -131,6 +131,8 @@ public:
progress = false;
}
virtual ir_visitor_status visit_enter(ir_assignment *ir);
void handle_rvalue(ir_rvalue **rvalue);
bool progress;
@@ -146,6 +148,20 @@ struct is_reduction_data {
} /* anonymous namespace */
ir_visitor_status
ir_rebalance_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 variable, just bail. Tree
* rebalancing (reassociation) isn't precision-safe.
*/
return visit_continue_with_parent;
} else {
return visit_continue;
}
}
static bool
is_reduction_operation(ir_expression_operation operation)
{