mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 09:38:07 +02:00
spirv: fix OpBranchConditional when both branches are the same
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6246 Signed-off-by: Bozhenko Alexey <oleksii.bozhenko@globallogic.com> Fixes:64cb143b92("spirv: Fix handling of OpBranchConditional with same THEN and ELSE") Reviewed-by: Caio Oliveira <caio.oliveira@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15929> (cherry picked from commit25acf1d869)
This commit is contained in:
parent
fd7b604df2
commit
e697e5dfe9
2 changed files with 8 additions and 5 deletions
|
|
@ -100,7 +100,7 @@
|
|||
"description": "spirv: fix OpBranchConditional when both branches are the same",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"because_sha": "64cb143b922b4c074a8404359e7ed9b790941744"
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1093,17 +1093,20 @@ vtn_emit_cf_list_structured(struct vtn_builder *b, struct list_head *cf_list,
|
|||
const uint32_t *branch = vtn_if->header_block->branch;
|
||||
vtn_assert((branch[0] & SpvOpCodeMask) == SpvOpBranchConditional);
|
||||
|
||||
bool sw_break = false;
|
||||
/* If both branches are the same, just emit the first block, which is
|
||||
* the only one we filled when building the CFG.
|
||||
*/
|
||||
if (branch[2] == branch[3]) {
|
||||
vtn_emit_cf_list_structured(b, &vtn_if->then_body,
|
||||
switch_fall_var, has_switch_break, handler);
|
||||
if (vtn_if->then_type == vtn_branch_type_none) {
|
||||
vtn_emit_cf_list_structured(b, &vtn_if->then_body,
|
||||
switch_fall_var, &sw_break, handler);
|
||||
} else {
|
||||
vtn_emit_branch(b, vtn_if->then_type, switch_fall_var, &sw_break);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
bool sw_break = false;
|
||||
|
||||
nir_if *nif =
|
||||
nir_push_if(&b->nb, vtn_get_nir_ssa(b, branch[1]));
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue