From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by sourceware.org (Postfix) with ESMTPS id 21E42385AE40 for ; Mon, 4 Jul 2022 11:20:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 21E42385AE40 Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out2.suse.de (Postfix) with ESMTP id 008A51F988; Mon, 4 Jul 2022 11:20:18 +0000 (UTC) Received: from wotan.suse.de (wotan.suse.de [10.160.0.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by relay2.suse.de (Postfix) with ESMTPS id D070F2C14E; Mon, 4 Jul 2022 11:20:17 +0000 (UTC) Date: Mon, 4 Jul 2022 11:20:17 +0000 (UTC) From: Richard Biener To: gcc-patches@gcc.gnu.org cc: richard.sandiford@arm.com Subject: Re: [PATCH] Keep virtual SSA up-to-date in vectorizer Message-ID: User-Agent: Alpine 2.22 (LSU 394 2020-01-19) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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, 04 Jul 2022 11:20:20 -0000 On Mon, 4 Jul 2022, Richard Biener wrote: > The following removes a FIXME where we fail(ed) to keep virtual > SSA up-to-date, patching up the remaining two cases I managed to > trigger. I've left an assert so that we pick up cases arising > for the cases I wasn't able to trigger. > > Bootstrapped and tested on x86_64-unknown-linux-gnu, I've also > built SPEC CPU 2017 with and without LTO and zen2 arch. > > I eventually do expect fallout, so sorry for that in advance. While I read the comment following the new assert multiple times only after pushing I realized this will actually break load-lanes. I'm looking for a testcase that hits it right now but I'll followup with a partial revert for targets supporting load_lanes. Richard. > Pushed to trunk. > > Richard. > > 2022-07-04 Richard Biener > > * tree-vect-loop-manip.cc (vect_do_peeling): Assert that > no SSA update is needed instead of updating virtual SSA > form. > * tree-vect-stmts.cc (vectorizable_load): For hoisted > invariant load use the loop entry virtual use. > For emulated gather loads use the virtual use of the > original stmt like vect_finish_stmt_generation would do. > --- > gcc/tree-vect-loop-manip.cc | 11 ++++------- > gcc/tree-vect-stmts.cc | 15 ++++++++++++--- > 2 files changed, 16 insertions(+), 10 deletions(-) > > diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc > index ae5533e0f68..81e29d564d6 100644 > --- a/gcc/tree-vect-loop-manip.cc > +++ b/gcc/tree-vect-loop-manip.cc > @@ -2683,14 +2683,11 @@ vect_do_peeling (loop_vec_info loop_vinfo, tree niters, tree nitersm1, > class loop *first_loop = loop; > bool irred_flag = loop_preheader_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP; > > - /* We might have a queued need to update virtual SSA form. As we > - delete the update SSA machinery below after doing a regular > + /* Historically we might have a queued need to update virtual SSA form. > + As we delete the update SSA machinery below after doing a regular > incremental SSA update during loop copying make sure we don't > - lose that fact. > - ??? Needing to update virtual SSA form by renaming is unfortunate > - but not all of the vectorizer code inserting new loads / stores > - properly assigns virtual operands to those statements. */ > - update_ssa (TODO_update_ssa_only_virtuals); > + lose that fact. */ > + gcc_assert (!need_ssa_update_p (cfun)); > > create_lcssa_for_virtual_phi (loop); > > diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc > index 346d8ce2804..d6a6fe3fb38 100644 > --- a/gcc/tree-vect-stmts.cc > +++ b/gcc/tree-vect-stmts.cc > @@ -9024,9 +9024,16 @@ vectorizable_load (vec_info *vinfo, > "hoisting out of the vectorized loop: %G", stmt); > scalar_dest = copy_ssa_name (scalar_dest); > tree rhs = unshare_expr (gimple_assign_rhs1 (stmt)); > - gsi_insert_on_edge_immediate > - (loop_preheader_edge (loop), > - gimple_build_assign (scalar_dest, rhs)); > + edge pe = loop_preheader_edge (loop); > + gphi *vphi = get_virtual_phi (loop->header); > + tree vuse; > + if (vphi) > + vuse = PHI_ARG_DEF_FROM_EDGE (vphi, pe); > + else > + vuse = gimple_vuse (gsi_stmt (*gsi)); > + gimple *new_stmt = gimple_build_assign (scalar_dest, rhs); > + gimple_set_vuse (new_stmt, vuse); > + gsi_insert_on_edge_immediate (pe, new_stmt); > } > /* These copies are all equivalent, but currently the representation > requires a separate STMT_VINFO_VEC_STMT for each one. */ > @@ -9769,6 +9776,8 @@ vectorizable_load (vec_info *vinfo, > tree ref = build2 (MEM_REF, ltype, ptr, > build_int_cst (ref_type, 0)); > new_stmt = gimple_build_assign (elt, ref); > + gimple_set_vuse (new_stmt, > + gimple_vuse (gsi_stmt (*gsi))); > gimple_seq_add_stmt (&stmts, new_stmt); > CONSTRUCTOR_APPEND_ELT (ctor_elts, NULL_TREE, elt); > } > -- Richard Biener SUSE Software Solutions Germany GmbH, Frankenstra