[Mesa-dev] [PATCH 13/15] glsl: use the linear allocator in opt_copy_propagation

Marek Olšák maraeo at gmail.com
Sat Oct 8 10:58:37 UTC 2016


From: Marek Olšák <marek.olsak at amd.com>

---
 src/compiler/glsl/opt_copy_propagation.cpp | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/compiler/glsl/opt_copy_propagation.cpp b/src/compiler/glsl/opt_copy_propagation.cpp
index 02628cd..247c498 100644
--- a/src/compiler/glsl/opt_copy_propagation.cpp
+++ b/src/compiler/glsl/opt_copy_propagation.cpp
@@ -37,35 +37,39 @@
 #include "ir_basic_block.h"
 #include "ir_optimization.h"
 #include "compiler/glsl_types.h"
 #include "util/hash_table.h"
 
 namespace {
 
 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)
    {
       assert(var);
       this->var = var;
    }
 
    ir_variable *var;
 };
 
 class ir_copy_propagation_visitor : public ir_hierarchical_visitor {
 public:
    ir_copy_propagation_visitor()
    {
       progress = false;
       mem_ctx = ralloc_context(0);
+      lin_ctx = linear_alloc_parent(mem_ctx, 0);
       acp = _mesa_hash_table_create(mem_ctx, _mesa_hash_pointer,
                                     _mesa_key_pointer_equal);
       this->kills = new(mem_ctx) exec_list;
       killed_all = false;
    }
    ~ir_copy_propagation_visitor()
    {
       ralloc_free(mem_ctx);
    }
 
@@ -88,20 +92,21 @@ public:
     * List of kill_entry: The variables whose values were killed in this
     * block.
     */
    exec_list *kills;
 
    bool progress;
 
    bool killed_all;
 
    void *mem_ctx;
+   void *lin_ctx;
 };
 
 } /* unnamed namespace */
 
 ir_visitor_status
 ir_copy_propagation_visitor::visit_enter(ir_function_signature *ir)
 {
    /* Treat entry into a function signature as a completely separate
     * block.  Any instructions at global scope will be shuffled into
     * main() at link time, so they're irrelevant to us.
@@ -306,21 +311,21 @@ ir_copy_propagation_visitor::kill(ir_variable *var)
    }
 
    hash_table_foreach(acp, entry) {
       if (var == (ir_variable *) entry->data) {
          _mesa_hash_table_remove(acp, entry);
       }
    }
 
    /* Add the LHS variable to the list of killed variables in this block.
     */
-   this->kills->push_tail(new(this->kills) kill_entry(var));
+   this->kills->push_tail(new(this->lin_ctx) kill_entry(var));
 }
 
 /**
  * Adds an entry to the available copy list if it's a plain assignment
  * of a variable to a variable.
  */
 void
 ir_copy_propagation_visitor::add_copy(ir_assignment *ir)
 {
    if (ir->condition)
-- 
2.7.4



More information about the mesa-dev mailing list