Hello,

Should we try to get this refactoring in stage 3 or park it for next stage 1?

Cheers,
Andre

On 10/12/2019 13:36, Andre Vieira (lists) wrote:
Hi,

This patch aims at refactoring the vectorizer code to no longer need to reset DR_OFFSET for epilogue vectorization and instead keep track of DR_OFFSET changes per dr_vec_info and just update it as needed.  I added a member of type 'tree' called 'offset' to dr_vec_info, which keeps track of the changes to the data_reference's offset per dr_vec_info and thus per instance of loop vectorization.  To get the current loop's DR_OFFSET I introduced a function 'get_dr_vinfo_offset' which will add the dr_vec_info's offset to either the data_reference's innermost offset or the offset of the 'innermost_loop_behavior' returned by 'vect_dr_behavior' depending on whether 'get_dr_vinfo_offset's second parameter 'check_outer' is true.  This is to mimic the behavior of using the outer loop relative 'innermost_loop_behavior' in 'vect_create_addr_base_for_vector_ref'.

I regression tested vect.exp on aarch64 and x86_64. I also regression tested libgomp on aarch64 and x86_64, no changes, but there were quite a few test failures with the commit I based this patch on...

Is this OK for trunk or shall I wait until libgomp stabilizes?

2019-12-10  Andre Vieira  <andre.simoesdiasvie...@arm.com>

        * tree-vect-data-refs.c (vect_create_addr_base_for_vector_ref): Use
         get_dr_vinfo_offset
        * tree-vect-loop.c (update_epilogue_loop_vinfo):  Remove orig_drs_init
         parameter and its use to reset DR_OFFSET's.
         (vect_transform_loop): Remove orig_drs_init argument.
        * tree-vect-loop-manip.c (vect_update_init_of_dr): Update the offset
         member of dr_vec_info rather than the offset of the associated
         data_reference's innermost_loop_behavior.
        (vect_update_init_of_dr): Pass dr_vec_info instead of data_reference.
         (vect_do_peeling): Remove orig_drs_init parameter and its
         construction.
         * tree-vect-stmts.c (check_scan_store): Replace use of DR_OFFSET
         with get_dr_vinfo_offset.
         (vectorizable_store): Likewise.
         (vectorizable_load): Likewise.

Reply via email to