Use a more sensible context in copy propagation.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 25 Jun 2010 20:44:09 +0000 (13:44 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 28 Jun 2010 18:14:47 +0000 (11:14 -0700)
src/glsl/ir_copy_propagation.cpp

index 46ef6679d9f68517c529826f61eb0a15f482887f..a02852ed0cc334dabf326e6c576bf6f26edb923e 100644 (file)
@@ -195,9 +195,8 @@ kill_invalidated_copies(ir_assignment *ir, exec_list *acp)
  * of a variable to a variable.
  */
 static void
-add_copy(ir_assignment *ir, exec_list *acp)
+add_copy(void *ctx, ir_assignment *ir, exec_list *acp)
 {
-   void *ctx = talloc_parent(ir);
    acp_entry *entry;
 
    if (ir->condition) {
@@ -226,6 +225,7 @@ copy_propagation_basic_block(ir_instruction *first,
    bool *out_progress = (bool *)data;
    bool progress = false;
 
+   void *ctx = talloc(NULL, void*);
    for (ir = first;; ir = (ir_instruction *)ir->next) {
       ir_assignment *ir_assign = ir->as_assignment();
 
@@ -234,12 +234,13 @@ copy_propagation_basic_block(ir_instruction *first,
       if (ir_assign) {
         kill_invalidated_copies(ir_assign, &acp);
 
-        add_copy(ir_assign, &acp);
+        add_copy(ctx, ir_assign, &acp);
       }
       if (ir == last)
         break;
    }
    *out_progress = progress;
+   talloc_free(ctx);
 }
 
 /**