nir: implement the GLSL equivalent of if simplication in nir_opt_if
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 30 May 2018 12:21:42 +0000 (14:21 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 4 Jun 2018 10:41:10 +0000 (12:41 +0200)
commite3e929f8c342b32dc8f5296adf8fb337866fa40a
treea1b59109c143e05e2ac3b830807dd9a56b49d7cc
parente44f90eccfaec2a1b1e813f93497bb498181dd2f
nir: implement the GLSL equivalent of if simplication in nir_opt_if

This pass turns:

   if (cond) {
   } else {
      do_work();
   }

into:

   if (!cond) {
      do_work();
   } else {
   }

Here's the vkpipeline-db stats (from affected shaders) on Polaris10:

Totals from affected shaders:
SGPRS: 17272 -> 17296 (0.14 %)
VGPRS: 18712 -> 18740 (0.15 %)
Spilled SGPRs: 1179 -> 1142 (-3.14 %)
Code Size: 1503364 -> 1515176 (0.79 %) bytes
Max Waves: 916 -> 911 (-0.55 %)

This pass only affects Serious Sam 2017 (Vulkan) on my side. The
stats are not really good for now. Some shaders look quite dumb
but this will be improved with further NIR passes, like ifs
combination.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/compiler/nir/nir_opt_if.c