nir: Lower returns correctly inside nested loops
authorArcady Goldmints-Orlov <agoldmints@igalia.com>
Thu, 16 Apr 2020 21:28:12 +0000 (16:28 -0500)
committerMarge Bot <eric+marge@anholt.net>
Sun, 19 Apr 2020 02:54:08 +0000 (02:54 +0000)
commitec1b96fdc8bccaf2c1a4e1e3cca32b4aacbe4f7c
tree724b3952c00411c75b04acbe3ca1d78f7483801d
parent969aeb6a93aefd037b130e4b37f58043fef493c3
nir: Lower returns correctly inside nested loops

Inside nested flow control, nir_lower_returns inserts predicated breaks
in the outer block. However, it would omit doing this if the remainder
of the outer block (after the inner block) was empty. This is not
correct in the case of loops, as execution just wraps back around to the
start of the loop, so this change doesn't skip the predication inside
loops.

Fixes: 79dec93ead6e (nir: Add return lowering pass)
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/2724

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4603>
src/compiler/nir/nir_lower_returns.c