projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vk: Delete vk.c test case
[mesa.git]
/
src
/
glsl
/
opt_copy_propagation.cpp
diff --git
a/src/glsl/opt_copy_propagation.cpp
b/src/glsl/opt_copy_propagation.cpp
index c78cf0cdc0895e6626948c868e4a2fa5cac3a273..806027b280ea9d39e80f8b681a0e0bcf2d06460a 100644
(file)
--- a/
src/glsl/opt_copy_propagation.cpp
+++ b/
src/glsl/opt_copy_propagation.cpp
@@
-128,6
+128,9
@@
ir_copy_propagation_visitor::visit_enter(ir_function_signature *ir)
visit_list_elements(this, &ir->body);
visit_list_elements(this, &ir->body);
+ ralloc_free(this->acp);
+ ralloc_free(this->kills);
+
this->kills = orig_kills;
this->acp = orig_acp;
this->killed_all = orig_killed_all;
this->kills = orig_kills;
this->acp = orig_acp;
this->killed_all = orig_killed_all;
@@
-215,7
+218,7
@@
ir_copy_propagation_visitor::handle_if_block(exec_list *instructions)
/* Populate the initial acp with a copy of the original */
foreach_in_list(acp_entry, a, orig_acp) {
/* Populate the initial acp with a copy of the original */
foreach_in_list(acp_entry, a, orig_acp) {
- this->acp->push_tail(new(this->
mem_ctx
) acp_entry(a->lhs, a->rhs));
+ this->acp->push_tail(new(this->
acp
) acp_entry(a->lhs, a->rhs));
}
visit_list_elements(this, instructions);
}
visit_list_elements(this, instructions);
@@
-226,12
+229,15
@@
ir_copy_propagation_visitor::handle_if_block(exec_list *instructions)
exec_list *new_kills = this->kills;
this->kills = orig_kills;
exec_list *new_kills = this->kills;
this->kills = orig_kills;
+ ralloc_free(this->acp);
this->acp = orig_acp;
this->killed_all = this->killed_all || orig_killed_all;
foreach_in_list(kill_entry, k, new_kills) {
kill(k->var);
}
this->acp = orig_acp;
this->killed_all = this->killed_all || orig_killed_all;
foreach_in_list(kill_entry, k, new_kills) {
kill(k->var);
}
+
+ ralloc_free(new_kills);
}
ir_visitor_status
}
ir_visitor_status
@@
-269,6
+275,7
@@
ir_copy_propagation_visitor::visit_enter(ir_loop *ir)
exec_list *new_kills = this->kills;
this->kills = orig_kills;
exec_list *new_kills = this->kills;
this->kills = orig_kills;
+ ralloc_free(this->acp);
this->acp = orig_acp;
this->killed_all = this->killed_all || orig_killed_all;
this->acp = orig_acp;
this->killed_all = this->killed_all || orig_killed_all;
@@
-276,6
+283,8
@@
ir_copy_propagation_visitor::visit_enter(ir_loop *ir)
kill(k->var);
}
kill(k->var);
}
+ ralloc_free(new_kills);
+
/* already descended into the children. */
return visit_continue_with_parent;
}
/* already descended into the children. */
return visit_continue_with_parent;
}
@@
-286,9
+295,7
@@
ir_copy_propagation_visitor::kill(ir_variable *var)
assert(var != NULL);
/* Remove any entries currently in the ACP for this kill. */
assert(var != NULL);
/* Remove any entries currently in the ACP for this kill. */
- foreach_list_safe(n, acp) {
- acp_entry *entry = (acp_entry *) n;
-
+ foreach_in_list_safe(acp_entry, entry, acp) {
if (entry->lhs == var || entry->rhs == var) {
entry->remove();
}
if (entry->lhs == var || entry->rhs == var) {
entry->remove();
}
@@
-296,7
+303,7
@@
ir_copy_propagation_visitor::kill(ir_variable *var)
/* Add the LHS variable to the list of killed variables in this block.
*/
/* Add the LHS variable to the list of killed variables in this block.
*/
- this->kills->push_tail(new(this->
mem_ctx
) kill_entry(var));
+ this->kills->push_tail(new(this->
kills
) kill_entry(var));
}
/**
}
/**
@@
-324,7
+331,7
@@
ir_copy_propagation_visitor::add_copy(ir_assignment *ir)
ir->condition = new(ralloc_parent(ir)) ir_constant(false);
this->progress = true;
} else {
ir->condition = new(ralloc_parent(ir)) ir_constant(false);
this->progress = true;
} else {
- entry = new(this->
mem_ctx
) acp_entry(lhs_var, rhs_var);
+ entry = new(this->
acp
) acp_entry(lhs_var, rhs_var);
this->acp->push_tail(entry);
}
}
this->acp->push_tail(entry);
}
}