From 4001181ba37f2a79129fe52c489e626724c390dd Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Mon, 10 Nov 2014 22:02:38 -0800 Subject: i965/fs: Don't use if_block/else_block in SEL peephole. Reviewed-by: Jason Ekstrand --- src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp b/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp index c3bfd00e70d..f18589cbe99 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp @@ -132,16 +132,21 @@ fs_visitor::opt_peephole_sel() if (if_inst->opcode != BRW_OPCODE_IF) continue; - if (!block->else_block) - continue; - - assert(block->else_block->end()->opcode == BRW_OPCODE_ELSE); - fs_inst *else_mov[MAX_MOVS] = { NULL }; fs_inst *then_mov[MAX_MOVS] = { NULL }; bblock_t *then_block = block->next(); - bblock_t *else_block = block->else_block->next(); + bblock_t *else_block = NULL; + foreach_list_typed(bblock_link, child, link, &block->children) { + if (child->block != then_block) { + if (child->block->prev()->end()->opcode == BRW_OPCODE_ELSE) { + else_block = child->block; + } + break; + } + } + if (else_block == NULL) + continue; int movs = count_movs_from_if(then_mov, else_mov, then_block, else_block); -- cgit v1.2.3