From 303ec22ed6124f7860de3856599ab4f02808b84b Mon Sep 17 00:00:00 2001 From: Francisco Jerez Date: Wed, 25 May 2016 13:17:41 -0700 Subject: [PATCH] i965/fs: Extend remove_duplicate_mrf_writes() to handle non-VGRF to MRF copies. Cc: "12.0" Reviewed-by: Jason Ekstrand --- src/mesa/drivers/dri/i965/brw_fs.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 5d5b98a12ad..00d937e30a7 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -3112,18 +3112,18 @@ fs_visitor::remove_duplicate_mrf_writes() } /* Clear out any MRF move records whose sources got overwritten. */ - if (inst->dst.file == VGRF) { - for (unsigned int i = 0; i < ARRAY_SIZE(last_mrf_move); i++) { - if (last_mrf_move[i] && - last_mrf_move[i]->src[0].nr == inst->dst.nr) { - last_mrf_move[i] = NULL; - } - } + for (unsigned i = 0; i < ARRAY_SIZE(last_mrf_move); i++) { + if (last_mrf_move[i] && + regions_overlap(inst->dst, inst->regs_written * REG_SIZE, + last_mrf_move[i]->src[0], + last_mrf_move[i]->regs_read(0) * REG_SIZE)) { + last_mrf_move[i] = NULL; + } } if (inst->opcode == BRW_OPCODE_MOV && inst->dst.file == MRF && - inst->src[0].file == VGRF && + inst->src[0].file != ARF && !inst->is_partial_write()) { last_mrf_move[inst->dst.nr] = inst; } -- 2.30.2