Module: Mesa Branch: master Commit: 58cabae8cc8e848cfe39c7a63973c12c92a4ee96 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=58cabae8cc8e848cfe39c7a63973c12c92a4ee96
Author: Jason Ekstrand <[email protected]> Date: Wed Dec 6 10:09:28 2017 -0800 spirv: Restructure the case loop in OpSwitch handling 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. Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]> Reviewed-by: Ian Romanick <[email protected]> --- src/compiler/spirv/vtn_cfg.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/compiler/spirv/vtn_cfg.c b/src/compiler/spirv/vtn_cfg.c index 25140ffc7d..28b811fc9a 100644 --- a/src/compiler/spirv/vtn_cfg.c +++ b/src/compiler/spirv/vtn_cfg.c @@ -425,9 +425,17 @@ 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++); + + uint32_t block_id = *(w++); + + 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 _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
