This is more fallout from cf375a3333e54a01462f192202d609436e5fbec8. It's possible for multiple ACP entries to interfere with a given VGRF write, so we need to continue iterating even if an overlapping entry has already been found.
Cc: Samuel Iglesias Gonsálvez <[email protected]> --- src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp index dbd2a58..682c690 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp @@ -758,10 +758,8 @@ fs_visitor::opt_copy_propagate_local(void *copy_prop_ctx, bblock_t *block, if (inst->dst.file == VGRF) { foreach_in_list_safe(acp_entry, entry, &acp[inst->dst.nr % ACP_HASH_SIZE]) { if (regions_overlap(entry->dst, entry->regs_written, - inst->dst, inst->regs_written)) { + inst->dst, inst->regs_written)) entry->remove(); - break; - } } /* Oops, we only have the chaining hash based on the destination, not @@ -773,10 +771,8 @@ fs_visitor::opt_copy_propagate_local(void *copy_prop_ctx, bblock_t *block, * _any_ of the registers that it reads */ if (regions_overlap(entry->src, entry->regs_read, - inst->dst, inst->regs_written)) { + inst->dst, inst->regs_written)) entry->remove(); - continue; - } } } } -- 2.7.3 _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
