[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