<div dir="ltr"><div><div><div><div>Dave just told me on IRC about the SPIR-V opt discussion:<br><br><a href="https://github.com/KhronosGroup/SPIRV-Tools/issues/850">https://github.com/KhronosGroup/SPIRV-Tools/issues/850</a><br><br></div>Assuming this actually solves the problem,<br><br></div>Reviewed-by: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br><br></div>I would like to see CTS tests written for this and we had better die horribly without this patch and pass with it. :-)<br><br></div>--Jason<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Oct 1, 2017 at 3:37 PM, Bas Nieuwenhuizen <span dir="ltr"><<a href="mailto:bas@basnieuwenhuizen.nl" target="_blank">bas@basnieuwenhuizen.nl</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Per the SPIR-V spec 2.11 Structured Control Flow:<br>
<br>
"The only blocks in a construct that can branch outside the construct are<br>
<br>
...<br>
- a break block for the innermost loop it is inside of.<br>
..."<br>
<br>
With<br>
<br>
"Break block: A block containing a branch to the Merge Block of a loop header's merge instruction."<br>
<br>
Note that it puts no restriction on not being in an if or switch within the innermost loop.<br>
<br>
This passes the loop_break block to the switch body so it can properly detect loop breaks.<br>
<br>
CC: <<a href="mailto:mesa-stable@lists.freedesktop.org">mesa-stable@lists.<wbr>freedesktop.org</a>><br>
---<br>
 src/compiler/spirv/vtn_cfg.c | 2 +-<br>
 1 file changed, 1 insertion(+), 1 deletion(-)<br>
<br>
diff --git a/src/compiler/spirv/vtn_cfg.c b/src/compiler/spirv/vtn_cfg.c<br>
index 3ad20b9ad83..25ff254bcec 100644<br>
--- a/src/compiler/spirv/vtn_cfg.c<br>
+++ b/src/compiler/spirv/vtn_cfg.c<br>
@@ -435,7 +435,7 @@ vtn_cfg_walk_blocks(struct vtn_builder *b, struct list_head *cf_list,<br>
          list_for_each_entry(struct vtn_case, cse, &swtch->cases, link) {<br>
             assert(cse->start_block != break_block);<br>
             vtn_cfg_walk_blocks(b, &cse->body, cse->start_block, cse,<br>
-                                break_block, NULL, loop_cont, NULL);<br>
+                                break_block, loop_break, loop_cont, NULL);<br>
          }<br>
<br>
          /* Finally, we walk over all of the cases one more time and put<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.14.1<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div>