i965/vec4: Fix handling of multiple register reads and writes during copy propagation.

Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
Francisco Jerez 2015-03-18 19:46:54 +02:00
parent 588859e18c
commit d041a43c0f
1 changed files with 6 additions and 3 deletions

View File

@ -74,9 +74,8 @@ is_channel_updated(vec4_instruction *inst, src_reg *values[4], int ch)
if (!src || src->file != GRF)
return false;
return (src->reg == inst->dst.reg &&
src->reg_offset == inst->dst.reg_offset &&
inst->dst.writemask & (1 << BRW_GET_SWZ(src->swizzle, ch)));
return (src->in_range(inst->dst, inst->regs_written) &&
inst->dst.writemask & (1 << BRW_GET_SWZ(src->swizzle, ch)));
}
static unsigned
@ -397,6 +396,10 @@ vec4_visitor::opt_copy_propagation(bool do_constant_prop)
inst->src[i].reladdr)
continue;
/* We only handle single-register copies. */
if (inst->regs_read(i) != 1)
continue;
int reg = (alloc.offsets[inst->src[i].reg] +
inst->src[i].reg_offset);