From: Francisco Jerez Date: Fri, 2 Sep 2016 03:03:44 +0000 (-0700) Subject: i965/fs: Move region_contained_in to the IR header and fix for non-VGRF files. X-Git-Tag: upstream/17.1.0~6334 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f2d2156ba225a844723443d6f4356454e72112e0;p=platform%2Fupstream%2Fmesa.git i965/fs: Move region_contained_in to the IR header and fix for non-VGRF files. Also changed the argument names since 'src' and 'dst' don't make that much sense outside of the context of copy propagation. 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 80ad4b4..e4e6816 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp @@ -332,20 +332,6 @@ can_take_stride(fs_inst *inst, unsigned arg, unsigned stride, return true; } -/** - * Check that the register region read by src [src.offset, - * src.offset + size_read[ is fully contained inside the register - * region written by dst [dst.offset, dst.offset + size_written[. - */ -static inline bool -region_contained_in(const fs_reg &src, unsigned size_read, - const fs_reg &dst, unsigned size_written) -{ - return src.file == dst.file && src.nr == dst.nr && - src.offset >= dst.offset && - src.offset + size_read <= dst.offset + size_written; -} - bool fs_visitor::try_copy_propagate(fs_inst *inst, int arg, acp_entry *entry) { diff --git a/src/mesa/drivers/dri/i965/brw_ir_fs.h b/src/mesa/drivers/dri/i965/brw_ir_fs.h index e8e25b9..84d7d5e 100644 --- a/src/mesa/drivers/dri/i965/brw_ir_fs.h +++ b/src/mesa/drivers/dri/i965/brw_ir_fs.h @@ -229,6 +229,19 @@ regions_overlap(const fs_reg &r, unsigned dr, const fs_reg &s, unsigned ds) } /** + * Check that the register region given by r [r.offset, r.offset + dr[ + * is fully contained inside the register region given by s + * [s.offset, s.offset + ds[. + */ +static inline bool +region_contained_in(const fs_reg &r, unsigned dr, const fs_reg &s, unsigned ds) +{ + return reg_space(r) == reg_space(s) && + reg_offset(r) >= reg_offset(s) && + reg_offset(r) + dr <= reg_offset(s) + ds; +} + +/** * Return whether the given register region is n-periodic, i.e. whether the * original region remains invariant after shifting it by \p n scalar * channels.