Browse Source

glsl2: Use the parser state as the talloc context for dead code elimination.

This cuts runtime by around 20% from talloc_parent() lookups.
tags/mesa-7.9-rc1
Eric Anholt 15 years ago
parent
commit
bda27424cf
4 changed files with 15 additions and 10 deletions
  1. 9
    6
      src/glsl/ir_dead_code.cpp
  2. 4
    2
      src/glsl/ir_optimization.h
  3. 1
    1
      src/glsl/main.cpp
  4. 1
    1
      src/mesa/shader/ir_to_mesa.cpp

+ 9
- 6
src/glsl/ir_dead_code.cpp View File

@@ -71,6 +71,8 @@ public:

/* List of variable_entry */
exec_list variable_list;

void *mem_ctx;
};


@@ -84,9 +86,7 @@ ir_dead_code_visitor::get_variable_entry(ir_variable *var)
return entry;
}

void *ctx = talloc_parent(var);

variable_entry *entry = new(ctx) variable_entry(var);
variable_entry *entry = new(mem_ctx) variable_entry(var);
this->variable_list.push_tail(entry);
return entry;
}
@@ -147,11 +147,13 @@ ir_dead_code_visitor::visit_leave(ir_assignment *ir)
* for usage on an unlinked instruction stream.
*/
bool
do_dead_code(exec_list *instructions)
do_dead_code(struct _mesa_glsl_parse_state *state,
exec_list *instructions)
{
ir_dead_code_visitor v;
bool progress = false;

v.mem_ctx = state;
v.run(instructions);

foreach_iter(exec_list_iterator, iter, v.variable_list) {
@@ -198,7 +200,8 @@ do_dead_code(exec_list *instructions)
* with global scope.
*/
bool
do_dead_code_unlinked(exec_list *instructions)
do_dead_code_unlinked(struct _mesa_glsl_parse_state *state,
exec_list *instructions)
{
bool progress = false;

@@ -209,7 +212,7 @@ do_dead_code_unlinked(exec_list *instructions)
foreach_iter(exec_list_iterator, sigiter, *f) {
ir_function_signature *sig =
(ir_function_signature *) sigiter.get();
if (do_dead_code(&sig->body))
if (do_dead_code(state, &sig->body))
progress = true;
}
}

+ 4
- 2
src/glsl/ir_optimization.h View File

@@ -32,9 +32,11 @@ 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(exec_list *instructions);
bool do_dead_code(struct _mesa_glsl_parse_state *state,
exec_list *instructions);
bool do_dead_code_local(exec_list *instructions);
bool do_dead_code_unlinked(exec_list *instructions);
bool do_dead_code_unlinked(struct _mesa_glsl_parse_state *state,
exec_list *instructions);
bool do_function_inlining(exec_list *instructions);
bool do_if_simplification(exec_list *instructions);
bool do_swizzle_swizzle(exec_list *instructions);

+ 1
- 1
src/glsl/main.cpp View File

@@ -157,7 +157,7 @@ compile_shader(struct glsl_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(&shader->ir) || progress;
progress = do_dead_code_unlinked(state, &shader->ir) || progress;
progress = do_constant_variable_unlinked(&shader->ir) || progress;
progress = do_constant_folding(&shader->ir) || progress;
progress = do_vec_index_to_swizzle(&shader->ir) || progress;

+ 1
- 1
src/mesa/shader/ir_to_mesa.cpp View File

@@ -1332,7 +1332,7 @@ _mesa_get_glsl_shader(GLcontext *ctx, void *mem_ctx, struct gl_shader *sh)
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(&shader->ir) || progress;
progress = do_dead_code_unlinked(state, &shader->ir) || progress;
progress = do_constant_variable_unlinked(&shader->ir) || progress;
progress = do_constant_folding(&shader->ir) || progress;
progress = do_vec_index_to_swizzle(&shader->ir) || progress;

Loading…
Cancel
Save