[Mesa-dev] [PATCH 7/8] spirv: Restructure the case loop in OpSwitch handling

Ian Romanick idr at freedesktop.org
Mon Dec 11 18:08:38 UTC 2017


On 12/07/2017 08:12 AM, Jason Ekstrand wrote:
> Instead of calling vtn_add_case for the default case and then looping,
> add an is_default variable and do everything inside the loop.  This will
> make the next commit easier.
> ---
>  src/compiler/spirv/vtn_cfg.c | 17 ++++++++++++++---
>  1 file changed, 14 insertions(+), 3 deletions(-)
> 
> diff --git a/src/compiler/spirv/vtn_cfg.c b/src/compiler/spirv/vtn_cfg.c
> index 25140ff..9d1ca84 100644
> --- a/src/compiler/spirv/vtn_cfg.c
> +++ b/src/compiler/spirv/vtn_cfg.c
> @@ -425,9 +425,20 @@ vtn_cfg_walk_blocks(struct vtn_builder *b, struct list_head *cf_list,
>           const uint32_t *branch_end =
>              block->branch + (block->branch[0] >> SpvWordCountShift);
>  
> -         vtn_add_case(b, swtch, break_block, block->branch[2], 0, true);
> -         for (const uint32_t *w = block->branch + 3; w < branch_end; w += 2)
> -            vtn_add_case(b, swtch, break_block, w[1], w[0], false);
> +         bool is_default = true;
> +         for (const uint32_t *w = block->branch + 2; w < branch_end;) {
> +            uint32_t literal = 0;
> +            if (!is_default) {
> +               literal = *w;
> +               w++;
> +            }
> +
> +            uint32_t block_id = *w;
> +            w++;

In other parts of Mesa, this would be

            const uint32_t block_id = *(w++);

Is that not the preferred style here too?  Having looked ahead at the
next patch, I can see why the other dereference of w is not like this.

> +
> +            vtn_add_case(b, swtch, break_block, block_id, literal, is_default);
> +            is_default = false;
> +         }
>  
>           /* Now, we go through and walk the blocks.  While we walk through
>            * the blocks, we also gather the much-needed fall-through
> 



More information about the mesa-dev mailing list