summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorConnor Abbott <[email protected]>2015-08-11 16:16:42 -0700
committerIago Toral Quiroga <[email protected]>2015-11-23 08:30:30 +0100
commit95ac3b1daeaa7d40d49fa2e0bdef46346c2996d5 (patch)
tree158f9e8ca32a86dc01ab0fea969420fa86892391 /src
parent70171a9c89ebd885f30bd432452ee35099b6874a (diff)
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 <[email protected]> Reviewed-by: Matt Turner <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs_cmod_propagation.cpp3
1 files changed, 2 insertions, 1 deletions
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 8fdc959f992..7c01f1e3d62 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. */