From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x52b.google.com (mail-ed1-x52b.google.com [IPv6:2a00:1450:4864:20::52b]) by sourceware.org (Postfix) with ESMTPS id F36F53858033 for ; Mon, 8 Nov 2021 11:06:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org F36F53858033 Received: by mail-ed1-x52b.google.com with SMTP id r12so60795509edt.6 for ; Mon, 08 Nov 2021 03:06:28 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=ZaIBw2/3rbiu95KYVu1fxT8xXQiBkuoP/PdZTLyCy98=; b=pEaYqotrIgn1ElVkJpeiGyHT7NFrRC4ixh73EaQGvycZVB6/cwL4KB8UPQ3ynEaKE7 px30AOzUto+3T3+V3aHWiAJGsS3xUKiG45fPajA1zWBH1oKaZfSo69PWTi3FILbd6o7M lO7SNjTMPkvrArc+A8OFysMrWBFIqhCKJWHnvIeWv8HhIW13lhvOfCCzC7dEQffCkJUu 8nKFoV0AuTUmmVVhgy4K580ePNmermrEwAW8tCLpVa5xtAqpj5UwG2Z6U7A3gLApuDJo IHyxtwWkOU2esyM025v1L/xBMr/0HeMrZ96sA5NWV8l/onQUdE90mQcXZRMbBvF1/z3f lwoQ== X-Gm-Message-State: AOAM533dSmZkcX3bVbkVg04ZYf8UXT80uoMBWrNvFJO196o9ySxWPhJI b4kbAC8nXht68OtLZ+HpVe6COjuVKMJ7vcfTDwILZtSa X-Google-Smtp-Source: ABdhPJyuYw0moFytO5a2fmMPPOwmKTXjUQKEGhqbOHkrgaEBEDfmlXK6HfDwufo281U4SyEwfnW3/4MgeFc+JtH1zsI= X-Received: by 2002:a17:907:6d28:: with SMTP id sa40mr68198933ejc.201.1636369587338; Mon, 08 Nov 2021 03:06:27 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Richard Biener Date: Mon, 8 Nov 2021 12:06:16 +0100 Message-ID: Subject: Re: [PATCH] vect: Move vector costs to loop_vec_info To: Richard Sandiford , GCC Patches Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-8.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Nov 2021 11:06:30 -0000 On Mon, Nov 8, 2021 at 11:59 AM Richard Sandiford via Gcc-patches 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 (vinfo)) > - instance->cost_vec = cost_vec; > - else > + if (loop_vec_info loop_vinfo = dyn_cast (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 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