With the correction of the fmin/fmax pattern in this one and patch 10, and the inot version of the pattern in patch 9 and 11, patch 7, and 9-11 are:
Reviewed-by: Thomas Helland <thomashellan...@gmail.com> I think that should be the whole series. 2018-08-03 1:38 GMT+02:00 Ian Romanick <i...@freedesktop.org>: > On 08/02/2018 02:10 PM, Thomas Helland wrote: >> 2018-08-02 20:19 GMT+02:00 Ian Romanick <i...@freedesktop.org>: >>> From: Ian Romanick <ian.d.roman...@intel.com> >>> >>> All Gen6+ platforms had pretty similar results. (Skylake shown) >>> total instructions in shared programs: 14277184 -> 14276964 (<.01%) >>> instructions in affected programs: 10082 -> 9862 (-2.18%) >>> helped: 37 >>> HURT: 1 >>> helped stats (abs) min: 1 max: 30 x̄: 5.97 x̃: 4 >>> helped stats (rel) min: 0.14% max: 16.00% x̄: 5.23% x̃: 2.04% >>> HURT stats (abs) min: 1 max: 1 x̄: 1.00 x̃: 1 >>> HURT stats (rel) min: 0.70% max: 0.70% x̄: 0.70% x̃: 0.70% >>> 95% mean confidence interval for instructions value: -7.87 -3.71 >>> 95% mean confidence interval for instructions %-change: -6.98% -3.16% >>> Instructions are helped. >>> >>> total cycles in shared programs: 532577990 -> 532577062 (<.01%) >>> cycles in affected programs: 170959 -> 170031 (-0.54%) >>> helped: 33 >>> HURT: 9 >>> helped stats (abs) min: 2 max: 120 x̄: 30.91 x̃: 30 >>> helped stats (rel) min: 0.02% max: 7.65% x̄: 2.66% x̃: 1.13% >>> HURT stats (abs) min: 2 max: 24 x̄: 10.22 x̃: 8 >>> HURT stats (rel) min: 0.09% max: 1.79% x̄: 0.61% x̃: 0.22% >>> 95% mean confidence interval for cycles value: -31.23 -12.96 >>> 95% mean confidence interval for cycles %-change: -2.90% -1.02% >>> Cycles are helped. >>> >>> Iron Lake and GM45 had similar results. (Iron Lake shown) >>> total instructions in shared programs: 7781539 -> 7781301 (<.01%) >>> instructions in affected programs: 10169 -> 9931 (-2.34%) >>> helped: 32 >>> HURT: 0 >>> helped stats (abs) min: 2 max: 20 x̄: 7.44 x̃: 6 >>> helped stats (rel) min: 0.47% max: 17.02% x̄: 4.03% x̃: 1.88% >>> 95% mean confidence interval for instructions value: -9.53 -5.34 >>> 95% mean confidence interval for instructions %-change: -5.94% -2.12% >>> Instructions are helped. >>> >>> total cycles in shared programs: 177878590 -> 177878932 (<.01%) >>> cycles in affected programs: 78706 -> 79048 (0.43%) >>> helped: 7 >>> HURT: 21 >>> helped stats (abs) min: 6 max: 34 x̄: 24.57 x̃: 28 >>> helped stats (rel) min: 0.15% max: 8.33% x̄: 4.66% x̃: 6.37% >>> HURT stats (abs) min: 2 max: 86 x̄: 24.48 x̃: 22 >>> HURT stats (rel) min: 0.01% max: 4.28% x̄: 1.21% x̃: 0.70% >>> 95% mean confidence interval for cycles value: 0.30 24.13 >>> 95% mean confidence interval for cycles %-change: -1.52% 1.01% >>> Inconclusive result (%-change mean confidence interval includes 0). >>> >>> Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> >>> --- >>> src/compiler/nir/nir_opt_algebraic.py | 19 +++++++++++++++++++ >>> 1 file changed, 19 insertions(+) >>> >>> diff --git a/src/compiler/nir/nir_opt_algebraic.py >>> b/src/compiler/nir/nir_opt_algebraic.py >>> index 8300d6d01f5..4d60467fbac 100644 >>> --- a/src/compiler/nir/nir_opt_algebraic.py >>> +++ b/src/compiler/nir/nir_opt_algebraic.py >>> @@ -166,6 +166,25 @@ optimizations = [ >>> >>> (('fge', ('fneg', ('b2f', a)), 0.0), ('inot', a)), >>> >>> + (('fne', ('fadd', ('b2f', a), ('b2f', b)), 0.0), ('ior', a, b)), >>> + (('fne', ('fmin', ('b2f', a), ('b2f', b)), 0.0), ('ior', a, b)), >> >> Maybe I'm just too sleepy, but shouldn't this be either >> >> (('fne', ('fmax', ('b2f', a), ('b2f', b)), 0.0), ('ior', a, b)), >> >> or >> >> (('fne', ('fmin', ('b2f', a), ('b2f', b)), 0.0), ('iand', a, b)), > > Yes... which means that patch 10 is also incorrect. > >>> + (('fne', ('bcsel', a, 1.0, ('b2f', b)) , 0.0), ('ior', a, b)), >>> + (('fne', ('b2f', a), ('fneg', ('b2f', b))), ('ior', a, b)), >>> + >>> + # -(b2f(a) + b2f(b)) < 0 >>> + # 0 < b2f(a) + b2f(b) >>> + # 0 != b2f(a) + b2f(b) b2f must be 0 or 1, so the sum is >>> non-negative >>> + # a || b >>> + (('flt', ('fneg', ('fadd', ('b2f', a), ('b2f', b))), 0.0), ('ior', a, >>> b)), >>> + (('flt', 0.0, ('fadd', ('b2f', a), ('b2f', b))), ('ior', a, b)), >>> + >>> + # Some optimizations (below) convert things like (a < b || c < b) into >>> + # (min(a, c) < b). However, this interfers with the previous >>> optimizations >>> + # that try to remove comparisons with negated sums of b2f. This just >>> + # breaks that apart. >>> + (('flt', ('fmin', c, ('fneg', ('fadd', ('b2f', a), ('b2f', b)))), 0.0), >>> + ('ior', ('flt', c, 0.0), ('ior', a, b))), >>> + >>> (('~flt', ('fadd', a, b), a), ('flt', b, 0.0)), >>> (('~fge', ('fadd', a, b), a), ('fge', b, 0.0)), >>> (('~feq', ('fadd', a, b), a), ('feq', b, 0.0)), >>> -- >>> 2.14.4 >>> >>> _______________________________________________ >>> mesa-dev mailing list >>> mesa-dev@lists.freedesktop.org >>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev