summaryrefslogtreecommitdiffstats
path: root/src/compiler/glsl/opt_constant_propagation.cpp
diff options
context:
space:
mode:
authorCaio Marcelo de Oliveira Filho <[email protected]>2018-07-09 11:29:41 -0700
committerRafael Antognolli <[email protected]>2018-07-12 14:03:51 -0700
commit13cfd6cc9669b5c4fdc8186d0753ddff24e0fb6c (patch)
treef21f40b59e9126a3c4fa1a62b452b83aa7cd00b3 /src/compiler/glsl/opt_constant_propagation.cpp
parentd6e869afe90df1d6fa02b1dcb1a367c48fca001a (diff)
glsl: remove struct kill_entry in constant propagation
The only value in kill_entry is the writemask, which can be stored in the data pointer of the hash table entry. Suggested by Eric Anholt. Reviewed-by: Eric Anholt <[email protected]> Reviewed-by: Thomas Helland <[email protected]>
Diffstat (limited to 'src/compiler/glsl/opt_constant_propagation.cpp')
-rw-r--r--src/compiler/glsl/opt_constant_propagation.cpp33
1 files changed, 7 insertions, 26 deletions
diff --git a/src/compiler/glsl/opt_constant_propagation.cpp b/src/compiler/glsl/opt_constant_propagation.cpp
index f91498b45cd..f00c9a1ce96 100644
--- a/src/compiler/glsl/opt_constant_propagation.cpp
+++ b/src/compiler/glsl/opt_constant_propagation.cpp
@@ -77,20 +77,6 @@ public:
};
-class kill_entry
-{
-public:
- /* override operator new from exec_node */
- DECLARE_LINEAR_ZALLOC_CXX_OPERATORS(kill_entry)
-
- explicit kill_entry(unsigned write_mask)
- {
- this->write_mask = write_mask;
- }
-
- unsigned write_mask;
-};
-
class ir_constant_propagation_visitor : public ir_rvalue_visitor {
public:
ir_constant_propagation_visitor()
@@ -126,8 +112,7 @@ public:
exec_list *acp;
/**
- * Hash table of kill_entry: The masks of variables whose values were
- * killed in this block.
+ * Hash table of killed entries: maps variables to the mask of killed channels.
*/
hash_table *kills;
@@ -381,10 +366,8 @@ ir_constant_propagation_visitor::handle_if_block(exec_list *instructions)
this->killed_all = this->killed_all || orig_killed_all;
hash_entry *htk;
- hash_table_foreach(new_kills, htk) {
- kill_entry *k = (kill_entry *) htk->data;
- kill((ir_variable *) htk->key, k->write_mask);
- }
+ hash_table_foreach(new_kills, htk)
+ kill((ir_variable *) htk->key, (uintptr_t) htk->data);
}
ir_visitor_status
@@ -429,8 +412,7 @@ ir_constant_propagation_visitor::visit_enter(ir_loop *ir)
hash_entry *htk;
hash_table_foreach(new_kills, htk) {
- kill_entry *k = (kill_entry *) htk->data;
- kill((ir_variable *) htk->key, k->write_mask);
+ kill((ir_variable *) htk->key, (uintptr_t) htk->data);
}
/* already descended into the children. */
@@ -460,13 +442,12 @@ ir_constant_propagation_visitor::kill(ir_variable *var, unsigned write_mask)
*/
hash_entry *kill_hash_entry = _mesa_hash_table_search(this->kills, var);
if (kill_hash_entry) {
- kill_entry *entry = (kill_entry *) kill_hash_entry->data;
- entry->write_mask |= write_mask;
+ uintptr_t new_write_mask = ((uintptr_t) kill_hash_entry->data) | write_mask;
+ kill_hash_entry->data = (void *) new_write_mask;
return;
}
/* Not already in the hash table. Make new entry. */
- _mesa_hash_table_insert(this->kills, var,
- new(this->lin_ctx) kill_entry(write_mask));
+ _mesa_hash_table_insert(this->kills, var, (void *) uintptr_t(write_mask));
}
/**