i965: Free dead GLSL IR one last time.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 2 Apr 2015 07:55:45 +0000 (00:55 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 6 Apr 2015 21:03:43 +0000 (14:03 -0700)
commita09c5b8527c2b28d30c0b11111a66fc7d283c06f
treebb8122bac97a9719773516534e39d964498b0d65
parent797d606127c131a6ccff28150495d2b1f3f7e46e
i965: Free dead GLSL IR one last time.

While working on NIR's memory allocation model, I realized the GLSL IR
memory model was broken.

During glCompileShader, we allocate everything out of the
_mesa_glsl_parse_state context, and reparent it to gl_shader at the end.

During glLinkProgram, we allocate everything out of a temporary context,
then reparent it to the exec_list containing the linked IR.

But during brw_link_shader - the driver's final opportunity to do
lowering and optimization - we just allocated everything out of the
permanent context given to us by the linker.  That memory stayed
forever.

Notably, passes like brw_fs_channel_expressions cause us to churn the
majority of the code, so we really want to free dead IR here.

Saves 125MB of memory when replaying a Dota 2 trace on Broadwell.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
src/mesa/drivers/dri/i965/brw_shader.cpp