diff options
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/glsl/lower_if_to_cond_assign.cpp | 49 |
1 files changed, 26 insertions, 23 deletions
diff --git a/src/compiler/glsl/lower_if_to_cond_assign.cpp b/src/compiler/glsl/lower_if_to_cond_assign.cpp index 6a7034794b2..a948466128d 100644 --- a/src/compiler/glsl/lower_if_to_cond_assign.cpp +++ b/src/compiler/glsl/lower_if_to_cond_assign.cpp @@ -47,7 +47,8 @@ #include "compiler/glsl_types.h" #include "ir.h" -#include "program/hash_table.h" +#include "util/set.h" +#include "util/hash_table.h" /* Needed for the hashing functions */ namespace { @@ -59,13 +60,14 @@ public: this->max_depth = max_depth; this->depth = 0; - this->condition_variables = hash_table_ctor(0, hash_table_pointer_hash, - hash_table_pointer_compare); + this->condition_variables = + _mesa_set_create(NULL, _mesa_hash_pointer, + _mesa_key_pointer_equal); } ~ir_if_to_cond_assign_visitor() { - hash_table_dtor(this->condition_variables); + _mesa_set_destroy(this->condition_variables, NULL); } ir_visitor_status visit_enter(ir_if *); @@ -75,7 +77,7 @@ public: unsigned max_depth; unsigned depth; - struct hash_table *condition_variables; + struct set *condition_variables; }; } /* anonymous namespace */ @@ -114,38 +116,39 @@ void move_block_to_cond_assign(void *mem_ctx, ir_if *if_ir, ir_rvalue *cond_expr, exec_list *instructions, - struct hash_table *ht) + struct set *set) { foreach_in_list_safe(ir_instruction, ir, instructions) { if (ir->ir_type == ir_type_assignment) { ir_assignment *assign = (ir_assignment *)ir; - if (hash_table_find(ht, assign) == NULL) { - hash_table_insert(ht, assign, assign); + if (_mesa_set_search(set, assign) == NULL) { + _mesa_set_add(set, assign); /* If the LHS of the assignment is a condition variable that was * previously added, insert an additional assignment of false to * the variable. */ const bool assign_to_cv = - hash_table_find(ht, assign->lhs->variable_referenced()) != NULL; + _mesa_set_search( + set, assign->lhs->variable_referenced()) != NULL; if (!assign->condition) { - if (assign_to_cv) { - assign->rhs = - new(mem_ctx) ir_expression(ir_binop_logic_and, - glsl_type::bool_type, - cond_expr->clone(mem_ctx, NULL), - assign->rhs); - } else { - assign->condition = cond_expr->clone(mem_ctx, NULL); + if (assign_to_cv) { + assign->rhs = + new(mem_ctx) ir_expression(ir_binop_logic_and, + glsl_type::bool_type, + cond_expr->clone(mem_ctx, NULL), + assign->rhs); + } else { + assign->condition = cond_expr->clone(mem_ctx, NULL); } } else { assign->condition = - new(mem_ctx) ir_expression(ir_binop_logic_and, - glsl_type::bool_type, - cond_expr->clone(mem_ctx, NULL), - assign->condition); + new(mem_ctx) ir_expression(ir_binop_logic_and, + glsl_type::bool_type, + cond_expr->clone(mem_ctx, NULL), + assign->condition); } } } @@ -210,7 +213,7 @@ ir_if_to_cond_assign_visitor::visit_leave(ir_if *ir) /* Add the new condition variable to the hash table. This allows us to * find this variable when lowering other (enclosing) if-statements. */ - hash_table_insert(this->condition_variables, then_var, then_var); + _mesa_set_add(this->condition_variables, then_var); /* If there are instructions in the else-clause, store the inverse of the * condition to a variable. Move all of the instructions from the @@ -241,7 +244,7 @@ ir_if_to_cond_assign_visitor::visit_leave(ir_if *ir) /* Add the new condition variable to the hash table. This allows us to * find this variable when lowering other (enclosing) if-statements. */ - hash_table_insert(this->condition_variables, else_var, else_var); + _mesa_set_add(this->condition_variables, else_var); } ir->remove(); |