From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 129BD3858292 for ; Tue, 5 Jul 2022 10:41:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 129BD3858292 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 096AA2B; Tue, 5 Jul 2022 03:41:50 -0700 (PDT) Received: from localhost (e121540-lin.manchester.arm.com [10.32.98.37]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 36F4E3F792; Tue, 5 Jul 2022 03:41:49 -0700 (PDT) From: Richard Sandiford To: Richard Biener Mail-Followup-To: Richard Biener , gcc-patches@gcc.gnu.org, richard.sandiford@arm.com Cc: gcc-patches@gcc.gnu.org Subject: Re: [PATCH] Maintain LC SSA when doing SVE vectorization References: <20220704130120.E955B1342C@imap2.suse-dmz.suse.de> Date: Tue, 05 Jul 2022 11:41:47 +0100 In-Reply-To: <20220704130120.E955B1342C@imap2.suse-dmz.suse.de> (Richard Biener's message of "Mon, 4 Jul 2022 15:01:20 +0200 (CEST)") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Status: No, score=-55.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, SPF_HELO_NONE, SPF_NONE, 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: Tue, 05 Jul 2022 10:41:51 -0000 Richard Biener writes: > The final loop IV use after the loop has that not in LC SSA > (and inserts not simplified _2 = _3 - 0 stmts). In particular > since it splits the exit edge when there's a virtual PHI in the > destination it breaks virtual LC SSA form (but likely also > non-virtual). > > The following properly inserts LC PHIs instead. > > Bootstrap & regtest pending on x86_64-unknown-linux-gnu. > > OK if that succeeds? LGTM, thanks. Richard > > Thanks, > Richard. > > 2022-07-04 Richard Biener > > * tree-vect-loop-manip.cc (vect_set_loop_condition_normal): > Maintain LC SSA. > --- > gcc/tree-vect-loop-manip.cc | 19 ++++++++++++++++--- > 1 file changed, 16 insertions(+), 3 deletions(-) > > diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc > index 895957472c9..eba71c50428 100644 > --- a/gcc/tree-vect-loop-manip.cc > +++ b/gcc/tree-vect-loop-manip.cc > @@ -920,9 +920,22 @@ vect_set_loop_condition_normal (class loop *loop, tree niters, tree step, > > if (final_iv) > { > - gassign *assign = gimple_build_assign (final_iv, MINUS_EXPR, > - indx_after_incr, init); > - gsi_insert_on_edge_immediate (single_exit (loop), assign); > + gassign *assign; > + edge exit = single_exit (loop); > + gcc_assert (single_pred_p (exit->dest)); > + tree phi_dest > + = integer_zerop (init) ? final_iv : copy_ssa_name (indx_after_incr); > + /* Make sure to maintain LC SSA form here and elide the subtraction > + if the value is zero. */ > + gphi *phi = create_phi_node (phi_dest, exit->dest); > + add_phi_arg (phi, indx_after_incr, exit, UNKNOWN_LOCATION); > + if (!integer_zerop (init)) > + { > + assign = gimple_build_assign (final_iv, MINUS_EXPR, > + phi_dest, init); > + gimple_stmt_iterator gsi = gsi_after_labels (exit->dest); > + gsi_insert_before (&gsi, assign, GSI_SAME_STMT); > + } > } > > return cond_stmt;