From: Francisco Jerez Date: Fri, 2 Sep 2016 04:20:18 +0000 (-0700) Subject: i965/fs: Fix can_propagate_from() source/destination overlap check. X-Git-Tag: upstream/17.1.0~6351 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5cc6425d708a9b8c660c2f43f5e277c507c98bf0;p=platform%2Fupstream%2Fmesa.git i965/fs: Fix can_propagate_from() source/destination overlap check. The previous overlap condition only made sure that the VGRF numbers or GRF-aligned offsets were different without taking the amount of data written and read by the instruction into consideration. Use the regions_overlap() helper instead. Reviewed-by: Iago Toral Quiroga --- 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 f8238aa..4a56aff 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp @@ -739,8 +739,8 @@ can_propagate_from(fs_inst *inst) return (inst->opcode == BRW_OPCODE_MOV && inst->dst.file == VGRF && ((inst->src[0].file == VGRF && - (inst->src[0].nr != inst->dst.nr || - inst->src[0].offset / REG_SIZE != inst->dst.offset / REG_SIZE)) || + !regions_overlap(inst->dst, inst->size_written, + inst->src[0], inst->size_read(0))) || inst->src[0].file == ATTR || inst->src[0].file == UNIFORM || inst->src[0].file == IMM) &&