diff options
author | Marek Olšák <[email protected]> | 2016-10-07 20:57:04 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2016-10-31 11:53:38 +0100 |
commit | 9c19dedff033a7cfb43d32d035fe9b26d6eb7636 (patch) | |
tree | dd0171f996fc67a8ab919e711844a5a24b0849d0 /src/compiler | |
parent | 23e373eb4f9ca374313306701890642c30e8877e (diff) |
glsl: use the linear allocator in opt_dead_code_local
Tested-by: Edmondo Tommasina <[email protected]>
Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/glsl/opt_dead_code_local.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/compiler/glsl/opt_dead_code_local.cpp b/src/compiler/glsl/opt_dead_code_local.cpp index d38fd2bf638..fc979afcd81 100644 --- a/src/compiler/glsl/opt_dead_code_local.cpp +++ b/src/compiler/glsl/opt_dead_code_local.cpp @@ -45,6 +45,9 @@ namespace { class assignment_entry : public exec_node { public: + /* override operator new from exec_node */ + DECLARE_LINEAR_ZALLOC_CXX_OPERATORS(assignment_entry) + assignment_entry(ir_variable *lhs, ir_assignment *ir) { assert(lhs); @@ -161,7 +164,7 @@ public: * of a variable to a variable. */ static bool -process_assignment(void *ctx, ir_assignment *ir, exec_list *assignments) +process_assignment(void *lin_ctx, ir_assignment *ir, exec_list *assignments) { ir_variable *var = NULL; bool progress = false; @@ -271,7 +274,7 @@ process_assignment(void *ctx, ir_assignment *ir, exec_list *assignments) } /* Add this instruction to the assignment list available to be removed. */ - assignment_entry *entry = new(ctx) assignment_entry(var, ir); + assignment_entry *entry = new(lin_ctx) assignment_entry(var, ir); assignments->push_tail(entry); if (debug) { @@ -298,6 +301,8 @@ dead_code_local_basic_block(ir_instruction *first, bool progress = false; void *ctx = ralloc_context(NULL); + void *lin_ctx = linear_alloc_parent(ctx, 0); + /* Safe looping, since process_assignment */ for (ir = first, ir_next = (ir_instruction *)first->next;; ir = ir_next, ir_next = (ir_instruction *)ir->next) { @@ -309,7 +314,8 @@ dead_code_local_basic_block(ir_instruction *first, } if (ir_assign) { - progress = process_assignment(ctx, ir_assign, &assignments) || progress; + progress = process_assignment(lin_ctx, ir_assign, &assignments) || + progress; } else { kill_for_derefs_visitor kill(&assignments); ir->accept(&kill); |