summaryrefslogtreecommitdiffstats
path: root/src/glsl/nir
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2016-01-18 10:10:47 -0800
committerJason Ekstrand <[email protected]>2016-01-18 10:10:47 -0800
commit15e6af070870b2d7105a90826dc9a4026e6f5846 (patch)
treee41da2a84687a33678134194ed8de842bb37cca2 /src/glsl/nir
parent14ebd0fdd799d4b721633d25a08d966ee8069243 (diff)
nir/spirv: Handle if's where the merge is also a break or continue
Diffstat (limited to 'src/glsl/nir')
-rw-r--r--src/glsl/nir/spirv/vtn_cfg.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/glsl/nir/spirv/vtn_cfg.c b/src/glsl/nir/spirv/vtn_cfg.c
index a57a44363dd..9c2e271cda1 100644
--- a/src/glsl/nir/spirv/vtn_cfg.c
+++ b/src/glsl/nir/spirv/vtn_cfg.c
@@ -351,8 +351,15 @@ vtn_cfg_walk_blocks(struct vtn_builder *b, struct list_head *cf_list,
switch_case, switch_break,
loop_break, loop_cont, merge_block);
- block = merge_block;
- continue;
+ enum vtn_branch_type merge_type =
+ vtn_get_branch_type(merge_block, switch_case, switch_break,
+ loop_break, loop_cont);
+ if (merge_type == vtn_branch_type_none) {
+ block = merge_block;
+ continue;
+ } else {
+ return;
+ }
} else if (if_stmt->then_type != vtn_branch_type_none &&
if_stmt->else_type != vtn_branch_type_none) {
/* Both sides were short-circuited. We're done here. */