glsl: Reduce memory consumption of copy propagation passes.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 17 Dec 2014 02:33:39 +0000 (18:33 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 18 Feb 2015 01:33:27 +0000 (17:33 -0800)
commit76960a55e6656bb0022e9c31ae7542010da130e3
tree2fd760a42e523df021781a68d38a9c6095ef626e
parenteda3dd00760039493fa2afc00193aa47b6ce8c58
glsl: Reduce memory consumption of copy propagation passes.

opt_copy_propagation and opt_copy_propagation_elements create new ACP
and Kill sets each time they enter a new control flow block.  For if
blocks, they also copy the entire existing ACP set contents into the
new set.

When we exit the control flow block, we discard the new sets.  However,
we weren't freeing them - so they lived on until the pass finished.
This can waste a lot of memory (57MB on one pessimal shader).

This patch makes the pass allocate ACP entries using this->acp as the
memory context, and Kill entries out of this->kill.  It also steals
kill entries when moving them from the inner kill list to the parent.

It then frees the lists, including their contents.

v2: Move ralloc_free(this->acp) just before this->acp = orig_acp
    (suggested by Eric Anholt).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Cc: "10.5 10.4" <mesa-stable@lists.freedesktop.org>
src/glsl/opt_copy_propagation.cpp
src/glsl/opt_copy_propagation_elements.cpp