Mesa (main): gallivm/nir: Call nir_lower_bool_to_int32 after nir_opt_algebraic_late

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Feb 10 03:47:59 UTC 2022


Module: Mesa
Branch: main
Commit: e3cbc328e0dbb5865cc036ecbf977127850b4670
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e3cbc328e0dbb5865cc036ecbf977127850b4670

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>

---

 src/gallium/auxiliary/gallivm/lp_bld_nir.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

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