Mesa (staging/22.0): gallivm/nir: Call nir_lower_bool_to_int32 after nir_opt_algebraic_late

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Feb 10 21:09:38 UTC 2022


Module: Mesa
Branch: staging/22.0
Commit: 6b95c7756bc6d61f008fff85886186b49c1d45dd
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6b95c7756bc6d61f008fff85886186b49c1d45dd

Author: Ian Romanick <ian.d.romanick at intel.com>
Date:   Tue Feb  8 17:53:02 2022 -0800

gallivm/nir: Call nir_lower_bool_to_int32 after nir_opt_algebraic_late

All of the opcodes in nir_opt_algebraic_late are the unsized (1-bit)
versions.  If the lowering to int32 happens first, many of the
optimizations and lowerings won't happen.

Of particular importance is the lowering of fisfinite.  If a shader
happens to contain fisfinite of an fp16 value, it will assert later
during compliation.

Reviewed-by: Dave Airlie <airlied at redhat.com>
Fixes: 78b4e417d44 ("gallivm: handle fisfinite/fisnormal")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14942>
(cherry picked from commit e3cbc328e0dbb5865cc036ecbf977127850b4670)

---

 .pick_status.json                          | 2 +-
 src/gallium/auxiliary/gallivm/lp_bld_nir.c | 9 ++++++---
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 85cbbff1ed0..aaa0585f534 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -373,7 +373,7 @@
         "description": "gallivm/nir: Call nir_lower_bool_to_int32 after nir_opt_algebraic_late",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": "78b4e417d44016cdb5df7dbfc3b1ea28219e6fd4"
     },
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_nir.c b/src/gallium/auxiliary/gallivm/lp_bld_nir.c
index 6dbb840cd73..2538bf32e49 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_nir.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_nir.c
@@ -733,8 +733,7 @@ static LLVMValueRef do_alu_action(struct lp_build_nir_context *bld_base,
       break;
    }
    case nir_op_fisfinite32:
-      result = lp_build_isfinite(get_flt_bld(bld_base, src_bit_size[0]), src[0]);
-      break;
+      unreachable("Should have been lowered in nir_opt_algebraic_late.");
    case nir_op_flog2:
       result = lp_build_log2_safe(get_flt_bld(bld_base, src_bit_size[0]), src[0]);
       break;
@@ -2479,7 +2478,6 @@ void lp_build_opt_nir(struct nir_shader *nir)
       NIR_PASS_V(nir, nir_lower_subgroups, &subgroups_options);
 
    } while (progress);
-   nir_lower_bool_to_int32(nir);
 
    do {
       progress = false;
@@ -2490,4 +2488,9 @@ void lp_build_opt_nir(struct nir_shader *nir)
          NIR_PASS_V(nir, nir_opt_cse);
       }
    } while (progress);
+
+   if (nir_lower_bool_to_int32(nir)) {
+      NIR_PASS_V(nir, nir_copy_prop);
+      NIR_PASS_V(nir, nir_opt_dce);
+   }
 }



More information about the mesa-commit mailing list