diff options
author | Francisco Jerez <[email protected]> | 2016-05-26 18:51:41 -0700 |
---|---|---|
committer | Francisco Jerez <[email protected]> | 2016-05-27 23:29:06 -0700 |
commit | ad8f66ed33172ab40d4679063780a501b6f80740 (patch) | |
tree | 833509d5036fd92c1146bc012363ea976fdceae5 | |
parent | c88b52745c754619d3e7af73abb71adfcc63cc7a (diff) |
i965/fs: Fix multiple ACP interference during copy propagation.
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]>
Reviewed-by: Jason Ekstrand <[email protected]>
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp | 8 |
1 files 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; - } } } } |