From: Ian Romanick Date: Tue, 12 Jan 2021 22:15:46 +0000 (-0800) Subject: nir/algebraic: Add some max/min optimizations with 3 variables X-Git-Tag: upstream/21.2.3~7531 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3250e04d25ec0bc41d7c7e4263104d1910429b7e;p=platform%2Fupstream%2Fmesa.git nir/algebraic: Add some max/min optimizations with 3 variables Specifically, ARB assembly shaders with code like SLT r0, r0, c[0].xxxx; ... KIL r0.xyzx; can result in this pattern. The other cases (e.g., 'KIL r0.xxxx' and 'KIL r0.xyxx') are handled by existing patterns. Reviewed-by: Matt Turner All Intel platforms had similar results. (Tiger Lake shown) total instructions in shared programs: 21050098 -> 21050065 (<.01%) instructions in affected programs: 2062 -> 2029 (-1.60%) helped: 31 HURT: 1 helped stats (abs) min: 1 max: 3 x̄: 1.10 x̃: 1 helped stats (rel) min: 1.14% max: 4.35% x̄: 1.89% x̃: 1.69% HURT stats (abs) min: 1 max: 1 x̄: 1.00 x̃: 1 HURT stats (rel) min: 0.65% max: 0.65% x̄: 0.65% x̃: 0.65% 95% mean confidence interval for instructions value: -1.23 -0.84 95% mean confidence interval for instructions %-change: -2.12% -1.50% Instructions are helped. total cycles in shared programs: 855105466 -> 855105055 (<.01%) cycles in affected programs: 50136 -> 49725 (-0.82%) helped: 33 HURT: 0 helped stats (abs) min: 3 max: 22 x̄: 12.45 x̃: 12 helped stats (rel) min: 0.13% max: 1.57% x̄: 0.86% x̃: 0.92% 95% mean confidence interval for cycles value: -13.78 -11.13 95% mean confidence interval for cycles %-change: -0.97% -0.76% Cycles are helped. No fossil-db changes on any Intel platform. Part-of: --- diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py index 234c312..cc48c81 100644 --- a/src/compiler/nir/nir_opt_algebraic.py +++ b/src/compiler/nir/nir_opt_algebraic.py @@ -554,6 +554,12 @@ optimizations.extend([ (('fmin', ('fmin', a, b), b), ('fmin', a, b)), (('umin', ('umin', a, b), b), ('umin', a, b)), (('imin', ('imin', a, b), b), ('imin', a, b)), + (('fmax', ('fmax', ('fmax', a, b), c), a), ('fmax', ('fmax', a, b), c)), + (('umax', ('umax', ('umax', a, b), c), a), ('umax', ('umax', a, b), c)), + (('imax', ('imax', ('imax', a, b), c), a), ('imax', ('imax', a, b), c)), + (('fmin', ('fmin', ('fmin', a, b), c), a), ('fmin', ('fmin', a, b), c)), + (('umin', ('umin', ('umin', a, b), c), a), ('umin', ('umin', a, b), c)), + (('imin', ('imin', ('imin', a, b), c), a), ('imin', ('imin', a, b), c)), ]) # Integer sizes