[Mesa-dev] [PATCH v2] nir/spirv: handle if's with same label in both branches

Jason Ekstrand jason at jlekstrand.net
Mon Sep 11 15:31:13 UTC 2017


Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

On Mon, Sep 11, 2017 at 2:41 AM, Samuel Iglesias Gonsálvez <
siglesias at igalia.com> wrote:

> From: "Juan A. Suarez Romero" <jasuarez at igalia.com>
>
> When a conditional branch has the same labels in the "if" part and in the
> "else" part, then we have the same cfg block, and it must be handled
> once.
>
> v2: handle it the same way as OpBranch (Jason).
>
> Fixes:
> dEQP-VK.spirv_assembly.instruction.compute.conditional_branch.same_labels*
> dEQP-VK.spirv_assembly.instruction.graphics.conditional_branch.same_
> labels*
> ---
>  src/compiler/spirv/vtn_cfg.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/src/compiler/spirv/vtn_cfg.c b/src/compiler/spirv/vtn_cfg.c
> index 03c452cb31..3ad20b9ad8 100644
> --- a/src/compiler/spirv/vtn_cfg.c
> +++ b/src/compiler/spirv/vtn_cfg.c
> @@ -356,8 +356,16 @@ vtn_cfg_walk_blocks(struct vtn_builder *b, struct
> list_head *cf_list,
>                                                    switch_case,
> switch_break,
>                                                    loop_break, loop_cont);
>
> -         if (if_stmt->then_type == vtn_branch_type_none &&
> -             if_stmt->else_type == vtn_branch_type_none) {
> +         if (then_block == else_block) {
> +            block->branch_type = if_stmt->then_type;
> +            if (block->branch_type == vtn_branch_type_none) {
> +               block = then_block;
> +               continue;
> +            } else {
> +               return;
> +            }
> +         } else if (if_stmt->then_type == vtn_branch_type_none &&
> +                    if_stmt->else_type == vtn_branch_type_none) {
>              /* Neither side of the if is something we can short-circuit.
> */
>              assert((*block->merge & SpvOpCodeMask) ==
> SpvOpSelectionMerge);
>              struct vtn_block *merge_block =
> --
> 2.14.1
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170911/e9858ff2/attachment.html>


More information about the mesa-dev mailing list