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

Author: Dave Airlie <[email protected]>
Date:   Mon Nov 19 13:54:33 2018 +1000

nir: handle shared pointers in lowering indirect derefs.

Check if the base ends up with no variable, and continue
if we see that case outside the loop.

Reviewed-by: Jason Ekstrand <[email protected]>

---

 src/compiler/nir/nir_lower_indirect_derefs.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/compiler/nir/nir_lower_indirect_derefs.c 
b/src/compiler/nir/nir_lower_indirect_derefs.c
index 897a062087..adcfaec219 100644
--- a/src/compiler/nir/nir_lower_indirect_derefs.c
+++ b/src/compiler/nir/nir_lower_indirect_derefs.c
@@ -135,7 +135,7 @@ lower_indirect_derefs_block(nir_block *block, nir_builder 
*b,
       /* Walk the deref chain back to the base and look for indirects */
       bool has_indirect = false;
       nir_deref_instr *base = deref;
-      while (base->deref_type != nir_deref_type_var) {
+      while (base && base->deref_type != nir_deref_type_var) {
          if (base->deref_type == nir_deref_type_array &&
              !nir_src_is_const(base->arr.index))
             has_indirect = true;
@@ -143,7 +143,7 @@ lower_indirect_derefs_block(nir_block *block, nir_builder 
*b,
          base = nir_deref_instr_parent(base);
       }
 
-      if (!has_indirect)
+      if (!has_indirect || !base)
          continue;
 
       /* Only lower variables whose mode is in the mask, or compact

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to