summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2016-10-07 20:57:04 +0200
committerMarek Olšák <[email protected]>2016-10-31 11:53:38 +0100
commitb6f50e4640c5e4ab27d50422269b54eb6efa955a (patch)
treea7549269099370ca0981ebaf693bec8460461ab5
parent9c19dedff033a7cfb43d32d035fe9b26d6eb7636 (diff)
glsl: use the linear allocator in opt_copy_propagation_elements
Tested-by: Edmondo Tommasina <[email protected]> Reviewed-by: Nicolai Hähnle <[email protected]>
-rw-r--r--src/compiler/glsl/opt_copy_propagation_elements.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/compiler/glsl/opt_copy_propagation_elements.cpp b/src/compiler/glsl/opt_copy_propagation_elements.cpp
index be8911678ca..9f79fa9202d 100644
--- a/src/compiler/glsl/opt_copy_propagation_elements.cpp
+++ b/src/compiler/glsl/opt_copy_propagation_elements.cpp
@@ -70,6 +70,9 @@ public:
class acp_entry : public exec_node
{
public:
+ /* override operator new from exec_node */
+ DECLARE_LINEAR_ZALLOC_CXX_OPERATORS(acp_entry)
+
acp_entry(ir_variable *lhs, ir_variable *rhs, int write_mask, int swizzle[4])
: rhs_node(this)
{
@@ -90,6 +93,9 @@ public:
class kill_entry : public exec_node
{
public:
+ /* override operator new from exec_node */
+ DECLARE_LINEAR_ZALLOC_CXX_OPERATORS(kill_entry)
+
kill_entry(ir_variable *var, int write_mask)
{
this->var = var;
@@ -107,6 +113,7 @@ public:
this->progress = false;
this->killed_all = false;
this->mem_ctx = ralloc_context(NULL);
+ this->lin_ctx = linear_alloc_parent(this->mem_ctx, 0);
this->shader_mem_ctx = NULL;
this->kills = new(mem_ctx) exec_list;
@@ -174,6 +181,7 @@ public:
/* Context for our local data structures. */
void *mem_ctx;
+ void *lin_ctx;
/* Context for allocating new shader nodes. */
void *shader_mem_ctx;
};
@@ -223,9 +231,9 @@ ir_copy_propagation_elements_visitor::visit_leave(ir_assignment *ir)
kill_entry *k;
if (lhs)
- k = new(this->kills) kill_entry(var, ir->write_mask);
+ k = new(this->lin_ctx) kill_entry(var, ir->write_mask);
else
- k = new(this->kills) kill_entry(var, ~0);
+ k = new(this->lin_ctx) kill_entry(var, ~0);
kill(k);
}
@@ -524,7 +532,6 @@ ir_copy_propagation_elements_visitor::kill(kill_entry *k)
if (k->next)
k->remove();
- ralloc_steal(this->kills, k);
this->kills->push_tail(k);
}
@@ -588,7 +595,7 @@ ir_copy_propagation_elements_visitor::add_copy(ir_assignment *ir)
if (lhs->var->data.precise != rhs->var->data.precise)
return;
- entry = new(this->mem_ctx) acp_entry(lhs->var, rhs->var, write_mask,
+ entry = new(this->lin_ctx) acp_entry(lhs->var, rhs->var, write_mask,
swizzle);
/* lhs hash, hash of lhs -> acp_entry lists */