summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.pick_status.json2
-rw-r--r--src/compiler/spirv/vtn_cfg.c7
2 files changed, 8 insertions, 1 deletions
diff --git a/.pick_status.json b/.pick_status.json
index 4b56dbf333c..f6a950f52e4 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -5566,7 +5566,7 @@
"description": "spirv: fix emitting switch cases that directly jump to the merge block",
"nominated": true,
"nomination_type": 0,
- "resolution": 0,
+ "resolution": 1,
"master_sha": null,
"because_sha": null
},
diff --git a/src/compiler/spirv/vtn_cfg.c b/src/compiler/spirv/vtn_cfg.c
index 4a07b35be53..3f157db009b 100644
--- a/src/compiler/spirv/vtn_cfg.c
+++ b/src/compiler/spirv/vtn_cfg.c
@@ -1285,6 +1285,13 @@ vtn_emit_cf_list(struct vtn_builder *b, struct list_head *cf_list,
vtn_foreach_cf_node(case_node, &vtn_switch->cases) {
struct vtn_case *cse = vtn_cf_node_as_case(case_node);
+ /* If this case jumps directly to the break block, we don't have
+ * to handle the case as the body is empty and doesn't fall
+ * through.
+ */
+ if (cse->block == vtn_switch->break_block)
+ continue;
+
/* Figure out the condition */
nir_ssa_def *cond =
vtn_switch_case_condition(b, vtn_switch, sel, cse);