Mesa (staging/22.1): nir: Mark negative re-distribution on fadd as imprecise

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jun 1 20:47:35 UTC 2022


Module: Mesa
Branch: staging/22.1
Commit: 4db6649c4b86f118892eeb348bc745593b872228
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=4db6649c4b86f118892eeb348bc745593b872228

Author: Jason Ekstrand <jason.ekstrand at collabora.com>
Date:   Tue Apr 19 11:05:45 2022 -0500

nir: Mark negative re-distribution on fadd as imprecise

Otherwise, it would mutate `fneg(fadd(-0, 0))` into `fadd(0, -0)` which
isn't correct since -0 + (+0) = +0 + (-0) = +0.

This fixes the OpenCL contraction tests on Iris.

Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16041>
(cherry picked from commit df1876f615aee242565e815752bf39ee7fefc0ae)

---

 .pick_status.json                     | 2 +-
 src/compiler/nir/nir_opt_algebraic.py | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 3e43e4ca1f9..d13134602b7 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -8698,7 +8698,7 @@
         "description": "nir: Mark negative re-distribution on fadd as imprecise",
         "nominated": false,
         "nomination_type": null,
-        "resolution": 4,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": null
     },
diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py
index dcd4c501e4a..d45adbfe147 100644
--- a/src/compiler/nir/nir_opt_algebraic.py
+++ b/src/compiler/nir/nir_opt_algebraic.py
@@ -2844,7 +2844,7 @@ distribute_src_mods = [
 
    (('fneg', ('ffma(is_used_once)', a, b, c)), ('ffma', ('fneg', a), b, ('fneg', c))),
    (('fneg', ('flrp(is_used_once)', a, b, c)), ('flrp', ('fneg', a), ('fneg', b), c)),
-   (('fneg', ('fadd(is_used_once)', a, b)), ('fadd', ('fneg', a), ('fneg', b))),
+   (('fneg', ('~fadd(is_used_once)', a, b)), ('fadd', ('fneg', a), ('fneg', b))),
 
    # Note that fmin <-> fmax.  I don't think there is a way to distribute
    # fabs() into fmin or fmax.



More information about the mesa-commit mailing list