glsl: don't let an 'if' then-branch kill const propagation for else-branch
authorCaio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Fri, 15 Jun 2018 20:59:45 +0000 (13:59 -0700)
committerCaio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Mon, 16 Jul 2018 23:33:39 +0000 (16:33 -0700)
commitd7849fd1dafafa3489e0be389dabb09502dae26e
tree68fc9a1e525b4dd1dd3aeb0cf991771a9f87751a
parent229836fb379eea6fb34c31410203082e822f3213
glsl: don't let an 'if' then-branch kill const propagation for else-branch

When handling 'if' in constant propagation, if a certain variable was
killed when processing the first branch of the 'if', then the second
would get any propagation from previous nodes. This is similar to the
change done for copy propagation code.

    x = 1;
    if (...) {
        z = x;  // This would turn into z = 1.
        x = 22; // x gets killed.
    } else {
        w = x;  // This would NOT turn into w = 1.
    }

With the change, we let constant propagation happen independently in
the two branches and only then apply the killed values for the
subsequent code.

The new code use a single hash table for keeping the kills of both
branches (the branches only write to it), and it gets deleted after we
use -- instead of waiting for mem_ctx to collect it.

NIR deals well with constant propagation, so it already covered for
the missing ones that this patch fixes.

Reviewed-by: Eric Anholt <eric@anholt.net>
src/compiler/glsl/opt_constant_propagation.cpp