diff options
-rw-r--r-- | .pick_status.json | 2 | ||||
-rw-r--r-- | src/compiler/spirv/vtn_cfg.c | 7 |
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); |