glsl2: Make the dead code handler make its own talloc context.
authorEric Anholt <eric@anholt.net>
Tue, 27 Jul 2010 18:28:26 +0000 (11:28 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 27 Jul 2010 18:46:05 +0000 (11:46 -0700)
This way, we don't need to pass in a parse state, and the context
doesn't grow with the number of passes through optimization.

src/glsl/ir_dead_code.cpp
src/glsl/ir_optimization.h
src/glsl/main.cpp
src/mesa/program/ir_to_mesa.cpp

index ea78107f493731fa9d964d08c8e6adf2e378e3a8..4804407bdc32eeb3a423ae2310c6bfed88f655b3 100644 (file)
@@ -146,13 +146,12 @@ ir_dead_code_visitor::visit_leave(ir_assignment *ir)
  * for usage on an unlinked instruction stream.
  */
 bool
-do_dead_code(struct _mesa_glsl_parse_state *state,
-            exec_list *instructions)
+do_dead_code(exec_list *instructions)
 {
    ir_dead_code_visitor v;
    bool progress = false;
 
-   v.mem_ctx = state;
+   v.mem_ctx = talloc_new(NULL);
    v.run(instructions);
 
    foreach_iter(exec_list_iterator, iter, v.variable_list) {
@@ -188,6 +187,8 @@ do_dead_code(struct _mesa_glsl_parse_state *state,
         progress = true;
       }
    }
+   talloc_free(v.mem_ctx);
+
    return progress;
 }
 
@@ -199,8 +200,7 @@ do_dead_code(struct _mesa_glsl_parse_state *state,
  * with global scope.
  */
 bool
-do_dead_code_unlinked(struct _mesa_glsl_parse_state *state,
-                     exec_list *instructions)
+do_dead_code_unlinked(exec_list *instructions)
 {
    bool progress = false;
 
@@ -211,7 +211,7 @@ do_dead_code_unlinked(struct _mesa_glsl_parse_state *state,
         foreach_iter(exec_list_iterator, sigiter, *f) {
            ir_function_signature *sig =
               (ir_function_signature *) sigiter.get();
-           if (do_dead_code(state, &sig->body))
+           if (do_dead_code(&sig->body))
               progress = true;
         }
       }
index 4f39565e5f1b67c6714f067a88ed860b9b73b393..5dbb025d357fa077f258eaeff2db250a96227bd5 100644 (file)
@@ -33,11 +33,9 @@ bool do_constant_folding(exec_list *instructions);
 bool do_constant_variable(exec_list *instructions);
 bool do_constant_variable_unlinked(exec_list *instructions);
 bool do_copy_propagation(exec_list *instructions);
-bool do_dead_code(struct _mesa_glsl_parse_state *state,
-                 exec_list *instructions);
+bool do_dead_code(exec_list *instructions);
 bool do_dead_code_local(exec_list *instructions);
-bool do_dead_code_unlinked(struct _mesa_glsl_parse_state *state,
-                          exec_list *instructions);
+bool do_dead_code_unlinked(exec_list *instructions);
 bool do_div_to_mul_rcp(exec_list *instructions);
 bool do_function_inlining(exec_list *instructions);
 bool do_if_return(exec_list *instructions);
index b62902278c4dc7ee74fe9677c09c38530c3cb9ca..08b133f124e7d5bd0c8d50147bc95f966f859472 100644 (file)
@@ -162,7 +162,7 @@ compile_shader(struct gl_shader *shader)
         progress = do_if_simplification(shader->ir) || progress;
         progress = do_copy_propagation(shader->ir) || progress;
         progress = do_dead_code_local(shader->ir) || progress;
-        progress = do_dead_code_unlinked(state, shader->ir) || progress;
+        progress = do_dead_code_unlinked(shader->ir) || progress;
         progress = do_constant_variable_unlinked(shader->ir) || progress;
         progress = do_constant_folding(shader->ir) || progress;
         progress = do_algebraic(shader->ir) || progress;
index 5cc999c2e35d85e2041305748a4230748bb1e7f5..409b6d72881edf2da4e1986ba7b46dde1308cb9c 100644 (file)
@@ -2237,7 +2237,7 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct gl_shader *shader)
         progress = do_if_simplification(shader->ir) || progress;
         progress = do_copy_propagation(shader->ir) || progress;
         progress = do_dead_code_local(shader->ir) || progress;
-        progress = do_dead_code_unlinked(state, shader->ir) || progress;
+        progress = do_dead_code_unlinked(shader->ir) || progress;
         progress = do_constant_variable_unlinked(shader->ir) || progress;
         progress = do_constant_folding(shader->ir) || progress;
         progress = do_algebraic(shader->ir) || progress;