<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>