summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2010-06-25 13:36:14 -0700
committerEric Anholt <[email protected]>2010-06-28 11:14:47 -0700
commita815f7fb83b1117e957c097044f36eae3a6851fb (patch)
treed124a3ecf05524c80351f86f638a6f2d21091122 /src
parent22c23dedad4e7f362ffbd990f1c2d5caf4cae75a (diff)
Use more sensible contexts in ir_dead_code_local.
Diffstat (limited to 'src')
-rw-r--r--src/glsl/ir_dead_code_local.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/glsl/ir_dead_code_local.cpp b/src/glsl/ir_dead_code_local.cpp
index e01877077c9..5e197e19484 100644
--- a/src/glsl/ir_dead_code_local.cpp
+++ b/src/glsl/ir_dead_code_local.cpp
@@ -111,9 +111,8 @@ public:
* of a variable to a variable.
*/
static bool
-process_assignment(ir_assignment *ir, exec_list *assignments)
+process_assignment(void *ctx, ir_assignment *ir, exec_list *assignments)
{
- void *ctx = talloc_parent(ir);
ir_variable *var = NULL;
bool progress = false;
kill_for_derefs_visitor v(assignments);
@@ -186,6 +185,7 @@ dead_code_local_basic_block(ir_instruction *first,
bool *out_progress = (bool *)data;
bool progress = false;
+ void *ctx = talloc(NULL, void*);
/* Safe looping, since process_assignment */
for (ir = first, ir_next = (ir_instruction *)first->next;;
ir = ir_next, ir_next = (ir_instruction *)ir->next) {
@@ -197,7 +197,7 @@ dead_code_local_basic_block(ir_instruction *first,
}
if (ir_assign) {
- progress = process_assignment(ir_assign, &assignments) || progress;
+ progress = process_assignment(ctx, ir_assign, &assignments) || progress;
} else {
kill_for_derefs_visitor kill(&assignments);
ir->accept(&kill);
@@ -207,6 +207,7 @@ dead_code_local_basic_block(ir_instruction *first,
break;
}
*out_progress = progress;
+ talloc_free(ctx);
}
/**