vc4: In a loop break/continue, jump if everyone has taken the path.
authorEric Anholt <eric@anholt.net>
Thu, 1 Dec 2016 01:27:37 +0000 (17:27 -0800)
committerEric Anholt <eric@anholt.net>
Thu, 1 Dec 2016 03:58:09 +0000 (19:58 -0800)
commit8e5ec33f1151dd82402bdfdaa4fff7c284e49a1c
tree42d503b6047f8170807cb6a5e1f226633d002e31
parentfda1d0187d2e9ea2aa9e1f4afd3c4ebccf74f668
vc4: In a loop break/continue, jump if everyone has taken the path.

This should be a win for most loops, which tend to have uniform control
flow.

More importantly, it exposes important information to live variables: that
the break/continue here means that our jump target may have access to
values that were live on our input.  Previously, we were just setting the
exec mask and letting control flow fall through, so an intervening def
between the break and the end of the loop would appear to live variables
as if it screened off the variable, when it didn't actually.

Fixes a regression in glsl-vs-loop-redundant-condition.shader_test when a
perturbing of register allocation caused a live variable to get stomped.

Cc: 13.0 <mesa-stable@lists.freedesktop.org>
src/gallium/drivers/vc4/vc4_program.c