[Mesa-dev] [PATCH 17/24] i965/fs: Fix multiple ACP interference during copy propagation.

Francisco Jerez currojerez at riseup.net
Fri May 27 03:46:22 UTC 2016


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 <siglesias at igalia.com>
---
 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



More information about the mesa-dev mailing list