diff options
author | Jason Ekstrand <[email protected]> | 2016-01-18 10:10:47 -0800 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2016-01-18 10:10:47 -0800 |
commit | 15e6af070870b2d7105a90826dc9a4026e6f5846 (patch) | |
tree | e41da2a84687a33678134194ed8de842bb37cca2 /src/glsl/nir | |
parent | 14ebd0fdd799d4b721633d25a08d966ee8069243 (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.c | 11 |
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. */ |