[Mesa-dev] [PATCH 3/4] glsl: In ir_validate, check that ir_loop::counter always refers to a new var.

Ian Romanick idr at freedesktop.org
Wed Nov 27 14:43:33 PST 2013


On 11/27/2013 12:44 PM, Paul Berry wrote:
> The compiler back-ends (i965's fs_visitor and brw_visitor,
> ir_to_mesa_visitor, and glsl_to_tgsi_visitor) have been assuming this
> for some time.  Thanks to the preceding patch, the compiler front-end
> no longer breaks this assumption.
> 
> This patch adds code to validate the assumption so that if we have
> future bugs, we'll be able to catch them earlier.
> ---
>  src/glsl/ir_validate.cpp | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/src/glsl/ir_validate.cpp b/src/glsl/ir_validate.cpp
> index 13e41a0..26d6388 100644
> --- a/src/glsl/ir_validate.cpp
> +++ b/src/glsl/ir_validate.cpp
> @@ -63,6 +63,7 @@ public:
>  
>     virtual ir_visitor_status visit_enter(ir_if *ir);
>  
> +   virtual ir_visitor_status visit_enter(ir_loop *ir);
>     virtual ir_visitor_status visit_leave(ir_loop *ir);
>     virtual ir_visitor_status visit_enter(ir_function *ir);
>     virtual ir_visitor_status visit_leave(ir_function *ir);
> @@ -149,6 +150,18 @@ ir_validate::visit_enter(ir_if *ir)
>  
>  
>  ir_visitor_status
> +ir_validate::visit_enter(ir_loop *ir)
> +{
> +   if (ir->counter != NULL && hash_table_find(ht, ir->counter) != NULL) {
> +      printf("ir_loop @ %p specifies already-declared variable `%s' @ %p\n",
> +             (void *) ir, ir->counter->name, (void *) ir->counter);
> +      abort();
> +   }

We should enforce the invariants that you mention in the next patch.
That should happen either in this patch or a follow-on... but probably
here.  Yeah?

> +   return visit_continue;
> +}
> +
> +
> +ir_visitor_status
>  ir_validate::visit_leave(ir_loop *ir)
>  {
>     if (ir->counter != NULL) {
> 



More information about the mesa-dev mailing list