nir: Add a nir_opt_undef() to handle csels with undef.
authorEric Anholt <eric@anholt.net>
Tue, 4 Aug 2015 23:25:24 +0000 (16:25 -0700)
committerEric Anholt <eric@anholt.net>
Fri, 14 Aug 2015 18:39:18 +0000 (11:39 -0700)
commit9e6dc5b64d5e931c7ebc272096eccab102b75d76
treec8e14e7821452cdea96d2f7072fe8d96dd20da9d
parentb346a84e270a50f0a8f1a6e474a51da04dd72f0e
nir: Add a nir_opt_undef() to handle csels with undef.

We may find a cause to do more undef optimization in the future, but for
now this fixes up things after if flattening.  vc4 was handling this
internally most of the time, but a GLB2.7 shader that did a conditional
discard and assign gl_FragColor in the else was still emitting some extra
code.

total instructions in shared programs: 100809 -> 100795 (-0.01%)
instructions in affected programs:     37 -> 23 (-37.84%)

v2: Use nir_instr_rewrite_src() to update def/use on src[0] (by Thomas
    Helland).
v3: Make sure to flag metadata dirties, and copy the swizzle and abs/neg
    over to src[0], too (by anholt).

Reviewed-by: Thomas Helland <thomashelland90@gmail.com> (v2)
Tested-by: Thomas Helland <thomashelland90@gmail.com> (v2)
src/gallium/drivers/vc4/vc4_program.c
src/glsl/Makefile.sources
src/glsl/nir/nir.h
src/glsl/nir/nir_opt_undef.c [new file with mode: 0644]