[Mesa-dev] [PATCH] nir: remove some redundant bcsel instructions

Timothy Arceri tarceri at itsqueeze.com
Wed Oct 17 03:49:07 UTC 2018


For example:

   vec1 32 ssa_386 = feq ssa_333.x, ssa_6
   vec1 32 ssa_387 = feq ssa_333.x, ssa_2
   vec1 32 ssa_391 = bcsel ssa_387, ssa_388, ssa_324
   vec1 32 ssa_396 = bcsel ssa_386, ssa_324, ssa_391

Can be simplified to:

   vec1 32 ssa_386 = feq ssa_333.x, ssa_6
   vec1 32 ssa_391 = bcsel ssa_387, ssa_388, ssa_324

There are a bunch of these in Rise of The Tomb Raiders Vulkan
shaders. There are also a hadful of shaders helped in shader-db
but the changes there are smaller.

For RADV:

Totals from affected shaders:
SGPRS: 11184 -> 11168 (-0.14 %)
VGPRS: 11484 -> 11484 (0.00 %)
Spilled SGPRs: 1119 -> 1116 (-0.27 %)
Spilled VGPRs: 0 -> 0 (0.00 %)
Private memory VGPRs: 0 -> 0 (0.00 %)
Scratch size: 0 -> 0 (0.00 %) dwords per thread
Code Size: 1210856 -> 1210372 (-0.04 %) bytes
LDS: 0 -> 0 (0.00 %) blocks
Max Waves: 360 -> 360 (0.00 %)
Wait states: 0 -> 0 (0.00 %)
---
 src/compiler/nir/nir_opt_algebraic.py | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py
index cc747250ba5..7530710cbe0 100644
--- a/src/compiler/nir/nir_opt_algebraic.py
+++ b/src/compiler/nir/nir_opt_algebraic.py
@@ -34,6 +34,7 @@ a = 'a'
 b = 'b'
 c = 'c'
 d = 'd'
+e = 'e'
 
 # Written in the form (<search>, <replace>) where <search> is an expression
 # and <replace> is either an expression or a value.  An expression is
@@ -525,6 +526,9 @@ optimizations = [
    # The result of this should be hit by constant propagation and, in the
    # next round of opt_algebraic, get picked up by one of the above two.
    (('bcsel', '#a', b, c), ('bcsel', ('ine', 'a', 0), b, c)),
+   # Remove redundant bcsel
+   (('bcsel', ('ieq', '#a', b), c, ('bcsel', ('ieq', '#d', b), e, c)), ('bcsel', ('ieq', d, b), e, c)),
+   (('bcsel', ('feq', '#a', b), c, ('bcsel', ('feq', '#d', b), e, c)), ('bcsel', ('feq', d, b), e, c)),
 
    (('bcsel', a, b, b), b),
    (('fcsel', a, b, b), b),
-- 
2.17.1



More information about the mesa-dev mailing list