class ir_constant_variable_visitor : public ir_hierarchical_visitor {
public:
+ using ir_hierarchical_visitor::visit;
+ using ir_hierarchical_visitor::visit_enter;
+
virtual ir_visitor_status visit_enter(ir_dereference_variable *);
virtual ir_visitor_status visit(ir_variable *);
virtual ir_visitor_status visit_enter(ir_assignment *);
var->data.mode == ir_var_shader_shared)
return visit_continue;
- constval = ir->rhs->constant_expression_value();
+ constval = ir->rhs->constant_expression_value(ralloc_parent(ir));
if (!constval)
return visit_continue;
entry = get_assignment_entry(var, this->ht);
entry->assignment_count++;
}
+
+ /* We don't know if the variable passed to this function has been
+ * assigned a value or if it is undefined, so for now we always assume
+ * it has been assigned a value. Once functions have been inlined any
+ * further potential optimisations will be taken care of.
+ */
+ struct assignment_entry *entry;
+ entry = get_assignment_entry(param, this->ht);
+ entry->assignment_count++;
}
/* Mark the return storage as having been assigned to */
bool progress = false;
ir_constant_variable_visitor v;
- v.ht = _mesa_hash_table_create(NULL, _mesa_hash_pointer,
- _mesa_key_pointer_equal);
+ v.ht = _mesa_pointer_hash_table_create(NULL);
v.run(instructions);
- struct hash_entry *hte;
hash_table_foreach(v.ht, hte) {
struct assignment_entry *entry = (struct assignment_entry *) hte->data;