Reviewed-by: Jason Ekstrand <[email protected]> On Mon, Sep 11, 2017 at 2:41 AM, Samuel Iglesias Gonsálvez < [email protected]> wrote:
> From: "Juan A. Suarez Romero" <[email protected]> > > When a conditional branch has the same labels in the "if" part and in the > "else" part, then we have the same cfg block, and it must be handled > once. > > v2: handle it the same way as OpBranch (Jason). > > Fixes: > dEQP-VK.spirv_assembly.instruction.compute.conditional_branch.same_labels* > dEQP-VK.spirv_assembly.instruction.graphics.conditional_branch.same_ > labels* > --- > src/compiler/spirv/vtn_cfg.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/src/compiler/spirv/vtn_cfg.c b/src/compiler/spirv/vtn_cfg.c > index 03c452cb31..3ad20b9ad8 100644 > --- a/src/compiler/spirv/vtn_cfg.c > +++ b/src/compiler/spirv/vtn_cfg.c > @@ -356,8 +356,16 @@ vtn_cfg_walk_blocks(struct vtn_builder *b, struct > list_head *cf_list, > switch_case, > switch_break, > loop_break, loop_cont); > > - if (if_stmt->then_type == vtn_branch_type_none && > - if_stmt->else_type == vtn_branch_type_none) { > + if (then_block == else_block) { > + block->branch_type = if_stmt->then_type; > + if (block->branch_type == vtn_branch_type_none) { > + block = then_block; > + continue; > + } else { > + return; > + } > + } else if (if_stmt->then_type == vtn_branch_type_none && > + if_stmt->else_type == vtn_branch_type_none) { > /* Neither side of the if is something we can short-circuit. > */ > assert((*block->merge & SpvOpCodeMask) == > SpvOpSelectionMerge); > struct vtn_block *merge_block = > -- > 2.14.1 > >
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
