<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Tue, Jul 3, 2018 at 11:25 PM Dave Airlie <<a href="mailto:airlied@gmail.com">airlied@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">From: Dave Airlie <<a href="mailto:airlied@redhat.com" target="_blank">airlied@redhat.com</a>><br>
<br>
---<br>
 src/compiler/nir/nir_gather_info.c           | 2 ++<br>
 src/compiler/nir/nir_lower_indirect_derefs.c | 4 ++++<br>
 src/compiler/nir/nir_lower_vars_to_ssa.c     | 4 ++++<br>
 3 files changed, 10 insertions(+)<br>
<br>
diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c<br>
index 2b431e343e9..4bbdd967c2b 100644<br>
--- a/src/compiler/nir/nir_gather_info.c<br>
+++ b/src/compiler/nir/nir_gather_info.c<br>
@@ -233,6 +233,8 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader,<br>
       nir_deref_instr *deref = nir_src_as_deref(instr->src[0]);<br>
       nir_variable *var = nir_deref_instr_get_variable(deref);<br>
<br>
+      if (!var)<br>
+         break;<br></blockquote><div><br></div><div>You should be able to change the if below to</div><div><br></div><div>if (deref->mode == nir_var_shader_in || deref->mode == nir_var_shader_out)</div><div><br></div><div>and then pull the nir_deref_instr_get_variable inside the if.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
       if (var->data.mode == nir_var_shader_in ||<br>
           var->data.mode == nir_var_shader_out) {<br>
          bool is_output_read = false;<br>
diff --git a/src/compiler/nir/nir_lower_indirect_derefs.c b/src/compiler/nir/nir_lower_indirect_derefs.c<br>
index d85c1704222..be39e1098ed 100644<br>
--- a/src/compiler/nir/nir_lower_indirect_derefs.c<br>
+++ b/src/compiler/nir/nir_lower_indirect_derefs.c<br>
@@ -131,6 +131,8 @@ lower_indirect_derefs_block(nir_block *block, nir_builder *b,<br>
          continue;<br>
<br>
       nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]);<br>
+      if (!deref)<br>
+         continue;<br></blockquote><div><br></div><div>Is this a real problem?  intrin->src[0] should always point at a deref even if that deref is just a cast.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
       /* Walk the deref chain back to the base and look for indirects */<br>
       bool has_indirect = false;<br>
@@ -141,6 +143,8 @@ lower_indirect_derefs_block(nir_block *block, nir_builder *b,<br>
             has_indirect = true;<br>
<br>
          base = nir_deref_instr_parent(base);<br>
+         if (!base)<br>
+            break;<br></blockquote><div><br></div><div>This isn't sufficient.  You need to make some case below continue if base == NULL.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
       }<br>
<br>
       if (!has_indirect)<br>
diff --git a/src/compiler/nir/nir_lower_vars_to_ssa.c b/src/compiler/nir/nir_lower_vars_to_ssa.c<br>
index 3f37acaed33..dcef9b8e221 100644<br>
--- a/src/compiler/nir/nir_lower_vars_to_ssa.c<br>
+++ b/src/compiler/nir/nir_lower_vars_to_ssa.c<br>
@@ -142,6 +142,8 @@ static struct deref_node *<br>
 get_deref_node_recur(nir_deref_instr *deref,<br>
                      struct lower_variables_state *state)<br>
 {<br>
+   if (!deref)<br>
+      return NULL;<br>
    if (deref->deref_type == nir_deref_type_var)<br>
       return get_deref_node_for_var(deref->var, state);<br>
<br>
@@ -198,6 +200,8 @@ get_deref_node_recur(nir_deref_instr *deref,<br>
<br>
       return parent->wildcard;<br>
<br>
+   case nir_deref_type_cast:<br>
+      return NULL;<br></blockquote><div><br></div><div>I think the better thing to do here would be to just look at the deref mode and bail if it's not a nir_var_local.  I just sent an untested patch that does just that.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
    default:<br>
       unreachable("Invalid deref type");<br>
    }<br>
-- <br>
2.17.1<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</blockquote></div></div>