From ad8f66ed33172ab40d4679063780a501b6f80740 Mon Sep 17 00:00:00 2001 From: Francisco Jerez Date: Thu, 26 May 2016 18:51:41 -0700 Subject: [PATCH] i965/fs: Fix multiple ACP interference during copy propagation. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Jason Ekstrand --- 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 6aec50617b2..f93a20c7faa 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.30.2