From: Connor Abbott Date: Tue, 11 Aug 2015 23:16:42 +0000 (-0700) Subject: i965/fs: don't propagate cmod when the exec sizes differ X-Git-Tag: upstream/17.1.0~14299 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=95ac3b1daeaa7d40d49fa2e0bdef46346c2996d5;p=platform%2Fupstream%2Fmesa.git i965/fs: don't propagate cmod when the exec sizes differ This can happen when the source of the compare was split by the SIMD lowering pass. Potentially, we could allow the case where the exec size of scan_inst is larger, and scan_inst has the right quarter selected, but doing that seems a little more risky. v2: Merge the bail condition into the the previous if/break block (Matt) Reviewed-by: Iago Toral Quiroga Reviewed-by: Matt Turner --- diff --git a/src/mesa/drivers/dri/i965/brw_fs_cmod_propagation.cpp b/src/mesa/drivers/dri/i965/brw_fs_cmod_propagation.cpp index 8fdc959..7c01f1e 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_cmod_propagation.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_cmod_propagation.cpp @@ -90,7 +90,8 @@ opt_cmod_propagation_local(bblock_t *block) foreach_inst_in_block_reverse_starting_from(fs_inst, scan_inst, inst) { if (scan_inst->overwrites_reg(inst->src[0])) { if (scan_inst->is_partial_write() || - scan_inst->dst.reg_offset != inst->src[0].reg_offset) + scan_inst->dst.reg_offset != inst->src[0].reg_offset || + scan_inst->exec_size != inst->exec_size) break; /* CMP's result is the same regardless of dest type. */