<p dir="ltr"></p>
<p dir="ltr">On Sep 7, 2016 6:51 PM, "Francisco Jerez" <<a href="mailto:currojerez@riseup.net">currojerez@riseup.net</a>> wrote:<br>
><br>
> This series reworks the representation of register region offsets in<br>
> the i965 IR to be universally byte-based instead of the rather awkward<br>
> split between reg_offset and subreg_offset we have in the FS back-end<br>
> right now, or the reg_offset field currently used in the VEC4 IR which<br>
> doesn't allow better granularity than 32B.  The most immediate<br>
> motivation is to enable sub-GRF offsets in the VEC4 back-end, which<br>
> will be useful for various kinds of lowering and instruction splitting<br>
> required for FP64 support on VEC4 platforms.</p>
<p dir="ltr">My first thought, without reading any of the code, is that this sound like a really good idea.  The inconsistency in the units of subreg_offset has been a constant source of pain and just making it bytes seems like the best solution.  I also like combining the two offsets.  I'm a tiny but nervous about combining the two offsets but I think that is more me being used to the split than it is any good logical reason.  I'm sure it introduces a good bit of "x * REG_SIZE" but we have enough places where we combine it, add, and then split it back out that it's better to just have it combined.  A little bit math will get you the whole or sub-register offsets if you want them anyway.</p>
<p dir="ltr">> Patches 01-11 take care of scaling the regs_written and regs_read<br>
> instruction methods on both back-ends and the reg_offset register<br>
> field of VEC4 IR registers.  The fs_reg::reg_offset and<br>
> ::subreg_offset fields are also unified into a single register field.<br>
> Because this part of the series is rather bulky I've tried to keep the<br>
> changes as obvious and functionally equivalent as possible at the cost<br>
> of introducing not particularly clever code in some cases that could<br>
> be simplified with some knowledge of the context.  Patches 31-46 make<br>
> a second pass through the code touched in the first part of the series<br>
> in order to get rid of an amount of cruft.<br>
><br>
> Patches 12-30 address an amount of bugs that became obvious during the<br>
> conversion to byte units, some of them seem worrying enough that it<br>
> might make sense to back-port them to stable releases.<br>
><br>
> Patches 47-57 go through the VEC4 back-end and address a number of<br>
> issues that would arise in existing optimization passes with<br>
> non-GRF-aligned regions, which will be useful for FP64 support.  It's<br>
> likely not complete and the handling of sub-GRF offsets doesn't<br>
> attempt to be nearly as clever as the FS back-end, but they should<br>
> make a substantial improvement over the current situation.<br>
><br>
> [PATCH 01/57] i965/fs: Replace fs_reg::reg_offset with fs_reg::offset expressed in bytes.<br>
> [PATCH 02/57] i965/vec4: Replace dst/src_reg::reg_offset with dst/src_reg::offset expressed in bytes.<br>
> [PATCH 03/57] i965/ir: Remove backend_reg::reg_offset.<br>
> [PATCH 04/57] i965/fs: Replace fs_reg::subreg_offset with fs_reg::offset expressed in bytes.<br>
> [PATCH 05/57] i965/fs: Add wrapper functions for fs_inst::regs_read and ::regs_written.<br>
> [PATCH 06/57] i965/vec4: Add wrapper functions for vec4_instruction::regs_read and ::regs_written.<br>
> [PATCH 07/57] i965/fs: Replace fs_inst::regs_written with ::size_written field in bytes.<br>
> [PATCH 08/57] i965/vec4: Replace vec4_instruction::regs_written with ::size_written field in bytes.<br>
> [PATCH 09/57] i965/ir: Drop backend_instruction::regs_written field.<br>
> [PATCH 10/57] i965/fs: Replace fs_inst::regs_read with ::size_read using byte units.<br>
> [PATCH 11/57] i965/vec4: Replace vec4_instruction::regs_read with ::size_read using byte units.<br>
> [PATCH 12/57] i965/fs: Return more accurate read size from fs_inst::size_read for IMM and UNIFORM files.<br>
> [PATCH 13/57] i965/fs: Return more accurate read size for LINTERP from fs_inst::size_read.<br>
> [PATCH 14/57] i965/fs: Handle arbitrary offsets in brw_reg_from_fs_reg for MRF/VGRF registers.<br>
> [PATCH 15/57] i965/fs: Handle fixed HW GRF subnr in reg_offset().<br>
> [PATCH 16/57] i965/fs: Take into account trailing padding in regs_written() and regs_read().<br>
> [PATCH 17/57] i965/fs: Take into account misalignment in regs_written() and regs_read().<br>
> [PATCH 18/57] i965/vec4: Take into account misalignment in regs_written() and regs_read().<br>
> [PATCH 19/57] i965/fs: Don't consider LOAD_PAYLOAD with sub-GRF offset to behave like a raw copy.<br>
> [PATCH 20/57] i965/fs: Don't consider LOAD_PAYLOAD with stride > 1 source to behave like a raw copy.<br>
> [PATCH 21/57] i965/fs: Compare full register offsets in cmod propagation pass.<br>
> [PATCH 22/57] i965/fs: Fix can_propagate_from() source/destination overlap check.<br>
> [PATCH 23/57] i965/fs: Fix LOAD_PAYLOAD handling in register coalesce is_nop_mov().<br>
> [PATCH 24/57] i965/fs: Drop fs_inst::overwrites_reg() in favor of regions_overlap().<br>
> [PATCH 25/57] i965/fs: Stop using fs_reg::in_range() in favor of regions_overlap().<br>
> [PATCH 26/57] i965/vec4: Port regions_overlap() to the vec4 IR.<br>
> [PATCH 27/57] i965/vec4: Drop backend_reg::in_range() in favor of regions_overlap().<br>
> [PATCH 28/57] i965/fs: Take into account copy register offset during compute-to-mrf.<br>
> [PATCH 29/57] i965/fs: Fix bogus sub-MRF offset calculation in compute-to-mrf.<br>
> [PATCH 30/57] i965/fs: Switch mask_relative_to() used in compute-to-mrf to byte units.<br>
> [PATCH 31/57] i965/fs: Fix signedness of the return value of fs_inst::size_read().<br>
> [PATCH 32/57] i965/fs: Simplify byte_offset().<br>
> [PATCH 33/57] i965/fs: Simplify get_fpu_lowered_simd_width() by using inequalities instead of rounding.<br>
> [PATCH 34/57] i965/fs: Simplify and fix buggy stride/offset calculations using subscript().<br>
> [PATCH 35/57] i965/fs: Simplify result_live calculation in dead_code_eliminate().<br>
> [PATCH 36/57] i965/fs: Simplify a bunch of fs_inst::size_written calculations by using component_size().<br>
> [PATCH 37/57] i965/fs: Simplify copy propagation LOAD_PAYLOAD ACP setup.<br>
> [PATCH 38/57] i965/fs: Change region_contained_in() to use byte units.<br>
> [PATCH 39/57] i965/fs: Move region_contained_in to the IR header and fix for non-VGRF files.<br>
> [PATCH 40/57] i965/fs: Use region_contained_in() in compute-to-mrf coalescing pass.<br>
> [PATCH 41/57] i965/fs: Get rid of fs_inst::set_smear().<br>
> [PATCH 42/57] i965/fs: Misc simplification.<br>
> [PATCH 43/57] i965/fs: Print fs_reg::offset field consistently for all register files.<br>
> [PATCH 44/57] i965/vec4: Print src/dst_reg::offset field consistently for all register files.<br>
> [PATCH 45/57] i965/ir: Don't print ARF subnr values twice.<br>
> [PATCH 46/57] i965/ir: Update several stale comments.<br>
> [PATCH 47/57] i965/vec4: Simplify src/dst_reg to brw_reg conversion by using byte_offset().<br>
> [PATCH 48/57] i965/vec4: Change opt_vector_float to keep track of the last offset seen in bytes.<br>
> [PATCH 49/57] i965/vec4: Check that the write offsets match when setting dependency controls.<br>
> [PATCH 50/57] i965/vec4: Compare full register offsets in opt_register_coalesce nop move check.<br>
> [PATCH 51/57] i965/vec4: Don't coalesce registers with overlapping writes not matching the MOV source.<br>
> [PATCH 52/57] i965/vec4: Assign correct destination offset to rewritten instruction in register coalesce.<br>
> [PATCH 53/57] i965/vec4: Compare full register offsets in cmod propagation.<br>
> [PATCH 54/57] i965/vec4: Fix copy propagation for non-register-aligned regions.<br>
> [PATCH 55/57] i965/vec4: Don't spill non-GRF-aligned register regions.<br>
> [PATCH 56/57] i965/vec4: Assert that ATTR regions are register-aligned.<br>
> [PATCH 57/57] i965/vec4: Assert that pull constant load offsets are 16B-aligned.<br>
> _______________________________________________<br>
> mesa-dev mailing list<br>
> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
> <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br></p>