i965/vec4: Compare full register offsets in cmod propagation.
authorFrancisco Jerez <currojerez@riseup.net>
Fri, 2 Sep 2016 05:26:59 +0000 (22:26 -0700)
committerFrancisco Jerez <currojerez@riseup.net>
Wed, 14 Sep 2016 21:50:58 +0000 (14:50 -0700)
Cmod propagation would misoptimize the program if the destination
offset of the generating instruction wasn't exactly the same as the
source region offset of the copy instruction.  In preparation for
adding support for sub-GRF offsets to the VEC4 IR.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
src/mesa/drivers/dri/i965/brw_vec4_cmod_propagation.cpp

index 9977317..c531fba 100644 (file)
@@ -71,7 +71,7 @@ opt_cmod_propagation_local(bblock_t *block)
          if (regions_overlap(inst->src[0], inst->size_read(0),
                              scan_inst->dst, scan_inst->size_written)) {
             if ((scan_inst->predicate && scan_inst->opcode != BRW_OPCODE_SEL) ||
-                scan_inst->dst.offset / REG_SIZE != inst->src[0].offset / REG_SIZE ||
+                scan_inst->dst.offset != inst->src[0].offset ||
                 (scan_inst->dst.writemask != WRITEMASK_X &&
                  scan_inst->dst.writemask != WRITEMASK_XYZW) ||
                 (scan_inst->dst.writemask == WRITEMASK_XYZW &&