[Mesa-dev] [PATCH] nir/spirv: Allow loop breaks in a switch body.

Jason Ekstrand jason at jlekstrand.net
Mon Oct 2 02:43:40 UTC 2017


This looks correct but how did you come across it?  Are there tests?


On October 1, 2017 3:38:26 PM Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl> 
wrote:

> Per the SPIR-V spec 2.11 Structured Control Flow:
>
> "The only blocks in a construct that can branch outside the construct are
>
> ...
> - a break block for the innermost loop it is inside of.
> ..."
>
> With
>
> "Break block: A block containing a branch to the Merge Block of a loop 
> header's merge instruction."
>
> Note that it puts no restriction on not being in an if or switch within the 
> innermost loop.
>
> This passes the loop_break block to the switch body so it can properly 
> detect loop breaks.
>
> CC: <mesa-stable at lists.freedesktop.org>
> ---
>  src/compiler/spirv/vtn_cfg.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/compiler/spirv/vtn_cfg.c b/src/compiler/spirv/vtn_cfg.c
> index 3ad20b9ad83..25ff254bcec 100644
> --- a/src/compiler/spirv/vtn_cfg.c
> +++ b/src/compiler/spirv/vtn_cfg.c
> @@ -435,7 +435,7 @@ vtn_cfg_walk_blocks(struct vtn_builder *b, struct 
> list_head *cf_list,
>           list_for_each_entry(struct vtn_case, cse, &swtch->cases, link) {
>              assert(cse->start_block != break_block);
>              vtn_cfg_walk_blocks(b, &cse->body, cse->start_block, cse,
> -                                break_block, NULL, loop_cont, NULL);
> +                                break_block, loop_break, loop_cont, NULL);
>           }
>
>           /* Finally, we walk over all of the cases one more time and put
> --
> 2.14.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev




More information about the mesa-dev mailing list