<div dir="ltr">On 27 November 2013 14:43, Ian Romanick <span dir="ltr"><<a href="mailto:idr@freedesktop.org" target="_blank">idr@freedesktop.org</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class=""><div class="h5">On 11/27/2013 12:44 PM, Paul Berry wrote:<br>
> The compiler back-ends (i965's fs_visitor and brw_visitor,<br>
> ir_to_mesa_visitor, and glsl_to_tgsi_visitor) have been assuming this<br>
> for some time.  Thanks to the preceding patch, the compiler front-end<br>
> no longer breaks this assumption.<br>
><br>
> This patch adds code to validate the assumption so that if we have<br>
> future bugs, we'll be able to catch them earlier.<br>
> ---<br>
>  src/glsl/ir_validate.cpp | 13 +++++++++++++<br>
>  1 file changed, 13 insertions(+)<br>
><br>
> diff --git a/src/glsl/ir_validate.cpp b/src/glsl/ir_validate.cpp<br>
> index 13e41a0..26d6388 100644<br>
> --- a/src/glsl/ir_validate.cpp<br>
> +++ b/src/glsl/ir_validate.cpp<br>
> @@ -63,6 +63,7 @@ public:<br>
><br>
>     virtual ir_visitor_status visit_enter(ir_if *ir);<br>
><br>
> +   virtual ir_visitor_status visit_enter(ir_loop *ir);<br>
>     virtual ir_visitor_status visit_leave(ir_loop *ir);<br>
>     virtual ir_visitor_status visit_enter(ir_function *ir);<br>
>     virtual ir_visitor_status visit_leave(ir_function *ir);<br>
> @@ -149,6 +150,18 @@ ir_validate::visit_enter(ir_if *ir)<br>
><br>
><br>
>  ir_visitor_status<br>
> +ir_validate::visit_enter(ir_loop *ir)<br>
> +{<br>
> +   if (ir->counter != NULL && hash_table_find(ht, ir->counter) != NULL) {<br>
> +      printf("ir_loop @ %p specifies already-declared variable `%s' @ %p\n",<br>
> +             (void *) ir, ir->counter->name, (void *) ir->counter);<br>
> +      abort();<br>
> +   }<br>
<br>
</div></div>We should enforce the invariants that you mention in the next patch.<br>
That should happen either in this patch or a follow-on... but probably<br>
here.  Yeah?<br></blockquote><div><br></div><div>You mean the stuff about from, to, and increment being non-null when counter is non-null and vice versa?  That's already enforced in ir_validate::visit_leave(ir_loop *).<br>
</div></div></div></div>