summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Helland <[email protected]>2016-08-16 22:10:23 +0200
committerTimothy Arceri <[email protected]>2016-09-12 10:48:35 +1000
commit2228548f8368e296cf0555d5c9b8ce06b23afe59 (patch)
treec97f4963c28e1112f2171e3d41c9dd0e63775f52
parent9b3c0f81a7677ec8378ad3270c157b5ee60c2e0f (diff)
glsl: Convert recursion detection to the util hash table
Signed-off-by: Thomas Helland <[email protected]> Reviewed-by: Timothy Arceri <[email protected]>
-rw-r--r--src/compiler/glsl/ir_function_detect_recursion.cpp30
1 files changed, 17 insertions, 13 deletions
diff --git a/src/compiler/glsl/ir_function_detect_recursion.cpp b/src/compiler/glsl/ir_function_detect_recursion.cpp
index b2334d2e403..38e4357eff9 100644
--- a/src/compiler/glsl/ir_function_detect_recursion.cpp
+++ b/src/compiler/glsl/ir_function_detect_recursion.cpp
@@ -124,7 +124,7 @@
#include "ir.h"
#include "glsl_parser_extras.h"
#include "linker.h"
-#include "program/hash_table.h"
+#include "util/hash_table.h"
#include "program.h"
namespace {
@@ -159,22 +159,25 @@ public:
{
progress = false;
this->mem_ctx = ralloc_context(NULL);
- this->function_hash = hash_table_ctor(0, hash_table_pointer_hash,
- hash_table_pointer_compare);
+ this->function_hash = _mesa_hash_table_create(NULL, _mesa_hash_pointer,
+ _mesa_key_pointer_equal);
}
~has_recursion_visitor()
{
- hash_table_dtor(this->function_hash);
+ _mesa_hash_table_destroy(this->function_hash, NULL);
ralloc_free(this->mem_ctx);
}
function *get_function(ir_function_signature *sig)
{
- function *f = (function *) hash_table_find(this->function_hash, sig);
- if (f == NULL) {
- f = new(mem_ctx) function(sig);
- hash_table_insert(this->function_hash, f, sig);
+ function *f;
+ hash_entry *entry = _mesa_hash_table_search(this->function_hash, sig);
+ if (entry == NULL) {
+ f = new(mem_ctx) function(sig);
+ _mesa_hash_table_insert(this->function_hash, sig, f);
+ } else {
+ f = (function *) entry->data;
}
return f;
@@ -251,16 +254,17 @@ remove_unlinked_functions(const void *key, void *data, void *closure)
if (f->callers.is_empty() || f->callees.is_empty()) {
while (!f->callers.is_empty()) {
- struct call_node *n = (struct call_node *) f->callers.pop_head();
- destroy_links(& n->func->callees, f);
+ struct call_node *n = (struct call_node *) f->callers.pop_head();
+ destroy_links(& n->func->callees, f);
}
while (!f->callees.is_empty()) {
- struct call_node *n = (struct call_node *) f->callees.pop_head();
- destroy_links(& n->func->callers, f);
+ struct call_node *n = (struct call_node *) f->callees.pop_head();
+ destroy_links(& n->func->callers, f);
}
- hash_table_remove(visitor->function_hash, key);
+ hash_entry *entry = _mesa_hash_table_search(visitor->function_hash, key);
+ _mesa_hash_table_remove(visitor->function_hash, entry);
visitor->progress = true;
}
}