mesa/src/compiler
Timothy Arceri 9710a7042c nir: fix crash in loop unroll corner case
When an if nesting inside anouther if is optimised away we can
end up with a loop terminator and following block that looks like
this:

        if ssa_596 {
                block block_5:
                /* preds: block_4 */
                vec1 32 ssa_601 = load_const (0xffffffff /* -nan */)
                break
                /* succs: block_8 */
        } else {
                block block_6:
                /* preds: block_4 */
                /* succs: block_7 */
        }
        block block_7:
        /* preds: block_6 */
        vec1 32 ssa_602 = phi block_6: ssa_552
        vec1 32 ssa_603 = phi block_6: ssa_553
        vec1 32 ssa_604 = iadd ssa_551, ssa_66

The problem is the phis. Loop unrolling expects the last block in
the loop to be empty once we splice the instructions in the last
block into the continue branch. The problem is we cant move phis
so here we lower the phis to regs when preparing the loop for
unrolling. As it could be possible to have multiple additional
blocks/ifs following the terminator we just convert all phis at
the top level of the loop body for simplicity.

We also add some comments to loop_prepare_for_unroll() while we
are here.

Fixes: 51daccb289 "nir: add a loop unrolling pass"

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105670
(cherry picked from commit 629ee690ad)
2018-04-12 21:49:30 +02:00
..
glsl glsl: fix infinite loop caused by bug in loop unrolling pass 2018-04-12 21:49:30 +02:00
nir nir: fix crash in loop unroll corner case 2018-04-12 21:49:30 +02:00
spirv compiler/spirv: set is_shadow for depth comparitor sampling opcodes 2018-04-12 21:49:29 +02:00
.gitignore
Android.glsl.gen.mk Android: clean-up trailing '\' in make variables 2017-03-22 17:52:06 +00:00
Android.glsl.mk android: glsl: build shader cache sources 2017-02-20 16:30:37 +00:00
Android.mk
Android.nir.gen.mk Android: fix missing generation of vtn_gather_types.c 2017-12-13 16:20:15 -06:00
Android.nir.mk android: fix libmesa_nir build 2017-07-21 08:47:56 +03:00
blob.c blob: Don't set overrun if reading 0 bytes at end of data 2017-10-31 23:36:54 -07:00
blob.h blob: Use intptr_t instead of ssize_t 2017-10-13 15:02:34 -07:00
builtin_type_macros.h glsl: Add 16-bit types 2017-12-06 08:57:18 +01:00
glsl_types.cpp glsl: Fix memory leak with known glsl_type instances 2018-03-20 16:57:25 +00:00
glsl_types.h glsl: Fix memory leak with known glsl_type instances 2018-03-20 16:57:25 +00:00
Makefile.am automake: small cleanup after the meson.build inclusion 2018-01-23 14:25:34 +00:00
Makefile.glsl.am glsl: automake: export abs_builddir for the tests 2017-03-28 15:31:22 +01:00
Makefile.nir.am spirv: Makefile.nir.am: include vtn_gather_types_c.py script in tarball dist 2017-12-20 17:44:35 +01:00
Makefile.sources spirv: Add a prepass to set types on vtn_values 2017-12-11 22:28:34 -08:00
meson.build meson: Use dependencies for nir 2018-01-11 15:40:02 -08:00
nir_types.cpp nir: Add a helper to get the uvec4 type. 2018-01-03 14:25:23 -08:00
nir_types.h nir: add image and sampler type to glsl_get_bit_size() 2018-01-23 09:44:37 +11:00
SConscript
SConscript.glsl
SConscript.nir
shader_enums.c mesa: remove unused vertex attrib WEIGHT 2017-11-25 17:17:52 +01:00
shader_enums.h mesa: shrink VERT_ATTRIB bitfields to 32 bits 2017-11-25 17:18:22 +01:00
shader_info.h glsl: Split out shader program serialization 2017-12-08 16:44:35 +11:00