Mesa (master): nir/spirv/cfg: Detect switch_break after loop_break/ continue

Jason Ekstrand jekstrand at kemper.freedesktop.org
Sat Oct 1 23:00:05 UTC 2016


Module: Mesa
Branch: master
Commit: ef3c5ac7fb915f489a553fa9d9a0c96d219545ad
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=ef3c5ac7fb915f489a553fa9d9a0c96d219545ad

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Fri Sep 16 22:04:57 2016 -0700

nir/spirv/cfg: Detect switch_break after loop_break/continue

While the current CFG code is valid in the case where a switch break also
happens to be a loop continue, it's a bit suboptimal.  Since hardware is
capable of handling the continue as a direct jump, it's better to use a
continue instruction when we can than to bother with all of the nasty
switch break lowering.

Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
Cc: "12.0" <mesa-stable at lists.freedesktop.org>

---

 src/compiler/spirv/vtn_cfg.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/compiler/spirv/vtn_cfg.c b/src/compiler/spirv/vtn_cfg.c
index 475454e..1c8c4f8 100644
--- a/src/compiler/spirv/vtn_cfg.c
+++ b/src/compiler/spirv/vtn_cfg.c
@@ -239,12 +239,12 @@ vtn_get_branch_type(struct vtn_block *block,
              swcase->fallthrough == block->switch_case);
       swcase->fallthrough = block->switch_case;
       return vtn_branch_type_switch_fallthrough;
-   } else if (block == switch_break) {
-      return vtn_branch_type_switch_break;
    } else if (block == loop_break) {
       return vtn_branch_type_loop_break;
    } else if (block == loop_cont) {
       return vtn_branch_type_loop_continue;
+   } else if (block == switch_break) {
+      return vtn_branch_type_switch_break;
    } else {
       return vtn_branch_type_none;
    }




More information about the mesa-commit mailing list