#include "ir_function_inlining.h"
#include "ir_expression_flattening.h"
#include "glsl_types.h"
-extern "C" {
#include "hash_table.h"
-}
class ir_function_inlining_visitor : public ir_hierarchical_visitor {
public:
};
-unsigned int hash_func(const void *key)
-{
- return (unsigned int)(uintptr_t)key;
-}
-
-int hash_compare_func(const void *key1, const void *key2)
-{
- return key1 == key2 ? 0 : 1;
-}
-
bool
automatic_inlining_predicate(ir_instruction *ir)
{
ir_variable *retval = NULL;
struct hash_table *ht;
- ht = hash_table_ctor(0, hash_func, hash_compare_func);
+ ht = hash_table_ctor(0, hash_table_pointer_hash, hash_table_pointer_compare);
num_parameters = 0;
foreach_iter(exec_list_iterator, iter_sig, this->callee->parameters)
#include <inttypes.h>
#include "ir.h"
#include "ir_hierarchical_visitor.h"
-extern "C" {
#include "hash_table.h"
-}
-
-static unsigned int hash_func(const void *key)
-{
- return (unsigned int)(uintptr_t)key;
-}
-
-static int hash_compare_func(const void *key1, const void *key2)
-{
- return key1 == key2 ? 0 : 1;
-}
class ir_validate : public ir_hierarchical_visitor {
public:
ir_validate()
{
- this->ht = hash_table_ctor(0, hash_func, hash_compare_func);
+ this->ht = hash_table_ctor(0, hash_table_pointer_hash,
+ hash_table_pointer_compare);
this->callback = ir_validate::validate_ir;
this->data = ht;
return hash;
}
+
+
+unsigned
+hash_table_pointer_hash(const void *key)
+{
+ return (unsigned)((uintptr_t) key / sizeof(void *));
+}
+
+
+int
+hash_table_pointer_compare(const void *key1, const void *key2)
+{
+ return key1 == key2 ? 0 : 1;
+}
*/
#define hash_table_string_compare ((hash_compare_func_t) strcmp)
+
+/**
+ * Compute hash value of a pointer
+ *
+ * \param key Pointer to be used as a hash key
+ *
+ * \note
+ * The memory pointed to by \c key is \b never accessed. The value of \c key
+ * itself is used as the hash key
+ *
+ * \sa hash_table_pointer_compare
+ */
+unsigned
+hash_table_pointer_hash(const void *key);
+
+
+/**
+ * Compare two pointers used as keys
+ *
+ * \sa hash_table_pointer_hash
+ */
+int
+hash_table_pointer_compare(const void *key1, const void *key2);
+
#ifdef __cplusplus
};
#endif