diff options
author | Andre Vieira <andre.simoesdiasvieira@arm.com> | 2020-01-10 13:33:10 +0000 |
---|---|---|
committer | Andre Vieira <avieira@gcc.gnu.org> | 2020-01-10 13:33:10 +0000 |
commit | 67723321fb917e94acf5844c2524ca3d9655ff7b (patch) | |
tree | 0806370357ddf99d3d69bf501bd92a197b18ff8f /gcc/tree-vect-loop.c | |
parent | 6b412bf65c0947d589d0eaf6348f29e24cda01c9 (diff) | |
download | gcc-67723321fb917e94acf5844c2524ca3d9655ff7b.zip gcc-67723321fb917e94acf5844c2524ca3d9655ff7b.tar.gz gcc-67723321fb917e94acf5844c2524ca3d9655ff7b.tar.bz2 |
[vect] Keep track of DR_OFFSET advance in dr_vec_info rather than data_reference
gcc/ChangeLog:
2020-01-10 Andre Vieira <andre.simoesdiasvieira@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.
From-SVN: r280107
Diffstat (limited to 'gcc/tree-vect-loop.c')
-rw-r--r-- | gcc/tree-vect-loop.c | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index cf9b7bc..596eafc 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -8333,8 +8333,7 @@ find_in_mapping (tree t, void *context) prologue of the main loop. */ static void -update_epilogue_loop_vinfo (class loop *epilogue, tree advance, - drs_init_vec &orig_drs_init) +update_epilogue_loop_vinfo (class loop *epilogue, tree advance) { loop_vec_info epilogue_vinfo = loop_vec_info_for_loop (epilogue); auto_vec<gimple *> stmt_worklist; @@ -8344,16 +8343,10 @@ update_epilogue_loop_vinfo (class loop *epilogue, tree advance, gphi_iterator epilogue_phi_gsi; stmt_vec_info stmt_vinfo = NULL, related_vinfo; basic_block *epilogue_bbs = get_loop_body (epilogue); + unsigned i; LOOP_VINFO_BBS (epilogue_vinfo) = epilogue_bbs; - /* Restore original data_reference's offset, before the previous loop and its - prologue. */ - std::pair<data_reference*, tree> *dr_init; - unsigned i; - for (i = 0; orig_drs_init.iterate (i, &dr_init); i++) - DR_OFFSET (dr_init->first) = dr_init->second; - /* Advance data_reference's with the number of iterations of the previous loop and its prologue. */ vect_update_inits_of_drs (epilogue_vinfo, advance, PLUS_EXPR); @@ -8569,7 +8562,7 @@ vect_transform_loop (loop_vec_info loop_vinfo) epilogue = vect_do_peeling (loop_vinfo, niters, nitersm1, &niters_vector, &step_vector, &niters_vector_mult_vf, th, check_profitability, niters_no_overflow, - &advance, orig_drs_init); + &advance); if (LOOP_VINFO_SCALAR_LOOP (loop_vinfo) && LOOP_VINFO_SCALAR_LOOP_SCALING (loop_vinfo).initialized_p ()) @@ -8828,7 +8821,7 @@ vect_transform_loop (loop_vec_info loop_vinfo) if (epilogue) { - update_epilogue_loop_vinfo (epilogue, advance, orig_drs_init); + update_epilogue_loop_vinfo (epilogue, advance); epilogue->simduid = loop->simduid; epilogue->force_vectorize = loop->force_vectorize; |