Mesa (master): nir/spirv: Allow loop breaks in a switch body.
Bas Nieuwenhuizen
bnieuwenhuizen at kemper.freedesktop.org
Mon Oct 2 19:09:56 UTC 2017
Module: Mesa
Branch: master
Commit: ef61d09d5bd58e5ad1b317d674f8436de754d3cb
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ef61d09d5bd58e5ad1b317d674f8436de754d3cb
Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date: Mon Oct 2 00:23:42 2017 +0200
nir/spirv: Allow loop breaks in a switch body.
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>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
---
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 3ad20b9ad8..25ff254bce 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
More information about the mesa-commit
mailing list