From: Richard Biener <richard.guenther@gmail.com>
To: Richard Sandiford <richard.sandiford@arm.com>,
GCC Patches <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH] vect: Move vector costs to loop_vec_info
Date: Mon, 8 Nov 2021 12:06:16 +0100 [thread overview]
Message-ID: <CAFiYyc0ZKTq35Em2-NUb8B0PDy9jnFfr-uopn8bOSrZs0k1D8Q@mail.gmail.com> (raw)
In-Reply-To: <mpth7cm29tc.fsf@arm.com>
On Mon, Nov 8, 2021 at 11:59 AM Richard Sandiford via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> target_cost_data is in vec_info but is really specific to
> loop_vec_info. This patch moves it there and renames it to
> vector_costs, to distinguish it from scalar target costs.
>
> Tested on aarch64-linux-gnu and x86_64-linux-gnu. OK to install?
OK.
Thanks,
Richard.
> Richard
>
>
> gcc/
> * tree-vectorizer.h (vec_info::target_cost_data): Replace with...
> (_loop_vec_info::vector_costs): ...this.
> (LOOP_VINFO_TARGET_COST_DATA): Delete.
> * tree-vectorizer.c (vec_info::vec_info): Remove target_cost_data
> initialization.
> (vec_info::~vec_info): Remove corresponding delete.
> * tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Initialize
> vector_costs to null.
> (_loop_vec_info::~_loop_vec_info): Delete vector_costs.
> (vect_analyze_loop_operations): Update after above changes.
> (vect_analyze_loop_2): Likewise.
> (vect_estimate_min_profitable_iters): Likewise.
> * tree-vect-slp.c (vect_slp_analyze_operations): Likewise.
> ---
> gcc/tree-vect-loop.c | 14 ++++++++------
> gcc/tree-vect-slp.c | 13 ++++++-------
> gcc/tree-vectorizer.c | 4 +---
> gcc/tree-vectorizer.h | 7 +++----
> 4 files changed, 18 insertions(+), 20 deletions(-)
>
> diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
> index a28bb6321d7..b6a631d4384 100644
> --- a/gcc/tree-vect-loop.c
> +++ b/gcc/tree-vect-loop.c
> @@ -821,6 +821,7 @@ _loop_vec_info::_loop_vec_info (class loop *loop_in, vec_info_shared *shared)
> num_iters (NULL_TREE),
> num_iters_unchanged (NULL_TREE),
> num_iters_assumptions (NULL_TREE),
> + vector_costs (nullptr),
> th (0),
> versioning_threshold (0),
> vectorization_factor (0),
> @@ -932,6 +933,7 @@ _loop_vec_info::~_loop_vec_info ()
> delete ivexpr_map;
> delete scan_map;
> epilogue_vinfos.release ();
> + delete vector_costs;
>
> /* When we release an epiloge vinfo that we do not intend to use
> avoid clearing AUX of the main loop which should continue to
> @@ -1765,7 +1767,7 @@ vect_analyze_loop_operations (loop_vec_info loop_vinfo)
> }
> } /* bbs */
>
> - add_stmt_costs (loop_vinfo->target_cost_data, &cost_vec);
> + add_stmt_costs (loop_vinfo->vector_costs, &cost_vec);
>
> /* All operations in the loop are either irrelevant (deal with loop
> control, or dead), or only used outside the loop and can be moved
> @@ -2375,7 +2377,7 @@ start_over:
> LOOP_VINFO_INT_NITERS (loop_vinfo));
> }
>
> - LOOP_VINFO_TARGET_COST_DATA (loop_vinfo) = init_cost (loop_vinfo, false);
> + loop_vinfo->vector_costs = init_cost (loop_vinfo, false);
>
> /* Analyze the alignment of the data-refs in the loop.
> Fail if a data reference is found that cannot be vectorized. */
> @@ -2742,8 +2744,8 @@ again:
> LOOP_VINFO_COMP_ALIAS_DDRS (loop_vinfo).release ();
> LOOP_VINFO_CHECK_UNEQUAL_ADDRS (loop_vinfo).release ();
> /* Reset target cost data. */
> - delete LOOP_VINFO_TARGET_COST_DATA (loop_vinfo);
> - LOOP_VINFO_TARGET_COST_DATA (loop_vinfo) = nullptr;
> + delete loop_vinfo->vector_costs;
> + loop_vinfo->vector_costs = nullptr;
> /* Reset accumulated rgroup information. */
> release_vec_loop_controls (&LOOP_VINFO_MASKS (loop_vinfo));
> release_vec_loop_controls (&LOOP_VINFO_LENS (loop_vinfo));
> @@ -3919,7 +3921,7 @@ vect_estimate_min_profitable_iters (loop_vec_info loop_vinfo,
> int scalar_outside_cost = 0;
> int assumed_vf = vect_vf_for_cost (loop_vinfo);
> int npeel = LOOP_VINFO_PEELING_FOR_ALIGNMENT (loop_vinfo);
> - vector_costs *target_cost_data = LOOP_VINFO_TARGET_COST_DATA (loop_vinfo);
> + vector_costs *target_cost_data = loop_vinfo->vector_costs;
>
> /* Cost model disabled. */
> if (unlimited_cost_model (LOOP_VINFO_LOOP (loop_vinfo)))
> @@ -4265,7 +4267,7 @@ vect_estimate_min_profitable_iters (loop_vec_info loop_vinfo,
> }
>
> /* Complete the target-specific cost calculations. */
> - finish_cost (LOOP_VINFO_TARGET_COST_DATA (loop_vinfo), &vec_prologue_cost,
> + finish_cost (loop_vinfo->vector_costs, &vec_prologue_cost,
> &vec_inside_cost, &vec_epilogue_cost);
>
> vec_outside_cost = (int)(vec_prologue_cost + vec_epilogue_cost);
> diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
> index 7e1061c8c4e..d437bfd20d0 100644
> --- a/gcc/tree-vect-slp.c
> +++ b/gcc/tree-vect-slp.c
> @@ -4889,16 +4889,15 @@ vect_slp_analyze_operations (vec_info *vinfo)
> else
> {
> i++;
> -
> - /* For BB vectorization remember the SLP graph entry
> - cost for later. */
> - if (is_a <bb_vec_info> (vinfo))
> - instance->cost_vec = cost_vec;
> - else
> + if (loop_vec_info loop_vinfo = dyn_cast<loop_vec_info> (vinfo))
> {
> - add_stmt_costs (vinfo->target_cost_data, &cost_vec);
> + add_stmt_costs (loop_vinfo->vector_costs, &cost_vec);
> cost_vec.release ();
> }
> + else
> + /* For BB vectorization remember the SLP graph entry
> + cost for later. */
> + instance->cost_vec = cost_vec;
> }
> }
>
> diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c
> index a2e13acb6d2..9ef76ce654b 100644
> --- a/gcc/tree-vectorizer.c
> +++ b/gcc/tree-vectorizer.c
> @@ -459,8 +459,7 @@ shrink_simd_arrays
> vec_info::vec_info (vec_info::vec_kind kind_in, vec_info_shared *shared_)
> : kind (kind_in),
> shared (shared_),
> - stmt_vec_info_ro (false),
> - target_cost_data (nullptr)
> + stmt_vec_info_ro (false)
> {
> stmt_vec_infos.create (50);
> }
> @@ -470,7 +469,6 @@ vec_info::~vec_info ()
> for (slp_instance &instance : slp_instances)
> vect_free_slp_instance (instance);
>
> - delete target_cost_data;
> free_stmt_vec_infos ();
> }
>
> diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h
> index b552e9dccce..1cd6cc036f2 100644
> --- a/gcc/tree-vectorizer.h
> +++ b/gcc/tree-vectorizer.h
> @@ -408,9 +408,6 @@ public:
> stmt in the chain. */
> auto_vec<stmt_vec_info> grouped_stores;
>
> - /* Cost data used by the target cost model. */
> - class vector_costs *target_cost_data;
> -
> /* The set of vector modes used in the vectorized region. */
> mode_set used_vector_modes;
>
> @@ -590,6 +587,9 @@ public:
> /* Condition under which this loop is analyzed and versioned. */
> tree num_iters_assumptions;
>
> + /* The cost of the vector code. */
> + class vector_costs *vector_costs;
> +
> /* Threshold of number of iterations below which vectorization will not be
> performed. It is calculated from MIN_PROFITABLE_ITERS and
> param_min_vect_loop_bound. */
> @@ -843,7 +843,6 @@ public:
> #define LOOP_VINFO_SLP_UNROLLING_FACTOR(L) (L)->slp_unrolling_factor
> #define LOOP_VINFO_REDUCTIONS(L) (L)->reductions
> #define LOOP_VINFO_REDUCTION_CHAINS(L) (L)->reduction_chains
> -#define LOOP_VINFO_TARGET_COST_DATA(L) (L)->target_cost_data
> #define LOOP_VINFO_PEELING_FOR_GAPS(L) (L)->peeling_for_gaps
> #define LOOP_VINFO_PEELING_FOR_NITER(L) (L)->peeling_for_niter
> #define LOOP_VINFO_NO_DATA_DEPENDENCIES(L) (L)->no_data_dependencies
> --
> 2.25.1
prev parent reply other threads:[~2021-11-08 11:06 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-08 10:58 Richard Sandiford
2021-11-08 11:06 ` Richard Biener [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAFiYyc0ZKTq35Em2-NUb8B0PDy9jnFfr-uopn8bOSrZs0k1D8Q@mail.gmail.com \
--to=richard.guenther@gmail.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=richard.sandiford@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).