i965/vec4: Check that the write offsets match when setting dependency controls.
authorFrancisco Jerez <currojerez@riseup.net>
Fri, 2 Sep 2016 05:02:00 +0000 (22:02 -0700)
committerFrancisco Jerez <currojerez@riseup.net>
Wed, 14 Sep 2016 21:50:58 +0000 (14:50 -0700)
For simplicity just assume that two writes to the same GRF with
different sub-GRF offsets will potentially interfere and break the
dependency control chain.  This is in preparation for adding sub-GRF
offset support to the VEC4 IR.

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

index dc484ba7cdffe9f98cec284402076b3044981920..f97de18598515323617b18c4807039e8e7754fd9 100644 (file)
@@ -980,6 +980,7 @@ vec4_visitor::opt_set_dependency_control()
          int reg = inst->dst.nr + inst->dst.offset / REG_SIZE;
          if (inst->dst.file == VGRF || inst->dst.file == FIXED_GRF) {
             if (last_grf_write[reg] &&
+                last_grf_write[reg]->dst.offset == inst->dst.offset &&
                 !(inst->dst.writemask & grf_channels_written[reg])) {
                last_grf_write[reg]->no_dd_clear = true;
                inst->no_dd_check = true;
@@ -991,6 +992,7 @@ vec4_visitor::opt_set_dependency_control()
             grf_channels_written[reg] |= inst->dst.writemask;
          } else if (inst->dst.file == MRF) {
             if (last_mrf_write[reg] &&
+                last_mrf_write[reg]->dst.offset == inst->dst.offset &&
                 !(inst->dst.writemask & mrf_channels_written[reg])) {
                last_mrf_write[reg]->no_dd_clear = true;
                inst->no_dd_check = true;