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:
parent
588859e18c
commit
d041a43c0f
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue