From patchwork Fri Aug 11 11:07:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 134418 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b824:0:b0:3f2:4152:657d with SMTP id z4csp1005379vqi; Fri, 11 Aug 2023 04:07:57 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFWNyxnML4CB+FOu05pRB5txbPsti1YJivEi74LS4J04PC9L/DQZ8OwPjfcOXC20HHKliKQ X-Received: by 2002:a17:907:77d3:b0:99b:4956:e4e3 with SMTP id kz19-20020a17090777d300b0099b4956e4e3mr1437089ejc.8.1691752077344; Fri, 11 Aug 2023 04:07:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691752077; cv=none; d=google.com; s=arc-20160816; b=VaoaQTn1pGo2yEAssvQ6L99CfCsSWyAdsio1w27yQlnmeBYWW0qVsy3Eoz9hn3irAZ me3Q39C/TklcsKE9FEo/dsTij7mh8imd74XN2fY7y0HZdDzBKjkXaB0Fmx+XqdsxFxv6 xsjJbFHzXrnxfBekNq+R1j9PEkJ7fpXl8FbJmJRA8TwbPu+hovSATeMpw4CCEy6i+yL9 pSMGh78P06fgkLg6wWd0rhoOIqTXDUzzGA4VJMo9LWc1K7yAENfWYfc2D29w0VPyA7Qd 1laelFyVdBKm8ZL0LwgrBzLeB9jlf7j6a1RCpaqR6lu3Xy7pFyzkKVwDP0qYLjSvL+J+ c8Xw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:message-id :mime-version:subject:to:date:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=hhUUGPZqXHqlvM89Y5VDs3+7rhvGxk1FWM5L5Kq+ehE=; fh=etb9MYHN7HLF/sff76ICVdPeKiI8ZsjoOL2bcdG0aog=; b=FNTOp7U2DIOOH2mi/3Avjm8ij4w27Ya7X8L3BiiyEoHdiO1V56vL0EBxKwlL2OOmdm 283DpVXeI7vwBHfse/4GPZkkaVDeLjHDgzrry1+URHKNie80NOOKndu4OKFL9ADD0bro gftt6UOPzxUTmTI7WERo4fIYjlony1Hf2/YprqQQ2clFjaO+kdqJAM5SBJb62RZgiZme ibH101VzHSVly3obAKQx7X+4wiTD2sWc2ysj3gjnsaDqmvAKaHEcVLjYkV3YSxqdb2kn 7YvzU5eU/vW2FKUUiKQ/4X7j0zw612sgqOBA7HHcJmMooOgtyWiUsrwBh+nLD+WB3f1t LbQA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=H2ZHsyQa; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id k11-20020a17090646cb00b0098df1cbe2aesi3212890ejs.1008.2023.08.11.04.07.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Aug 2023 04:07:57 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=H2ZHsyQa; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3E6D43857C44 for ; Fri, 11 Aug 2023 11:07:56 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3E6D43857C44 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1691752076; bh=hhUUGPZqXHqlvM89Y5VDs3+7rhvGxk1FWM5L5Kq+ehE=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=H2ZHsyQaw1XXaXNRnFkU0qsNO29ZGrpBOEq+/A47X4lGJ0zUArvzzycYORTsoOJut bqeWml2CYmrUVcC0bUd8ZKmBJ+/Sg7ahNFUN4eOBfZ6U8wi46aqTpdNanzTMTGEjZA 21fZq4oRfgYJ9xaFMzboTm9kaaPnLJ1xJvucn/CE= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2001:67c:2178:6::1c]) by sourceware.org (Postfix) with ESMTPS id 5C84E3858D20 for ; Fri, 11 Aug 2023 11:07:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5C84E3858D20 Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 67AFD21867 for ; Fri, 11 Aug 2023 11:07:12 +0000 (UTC) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 5486D13592 for ; Fri, 11 Aug 2023 11:07:12 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id uw1gE2AW1mRORgAAMHmgww (envelope-from ) for ; Fri, 11 Aug 2023 11:07:12 +0000 Date: Fri, 11 Aug 2023 13:07:11 +0200 (CEST) To: gcc-patches@gcc.gnu.org Subject: [PATCH] Improve BB vectorization opt-info MIME-Version: 1.0 Message-Id: <20230811110712.5486D13592@imap2.suse-dmz.suse.de> X-Spam-Status: No, score=-11.2 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 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-Patchwork-Original-From: Richard Biener via Gcc-patches From: Richard Biener Reply-To: Richard Biener Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1773930626254793923 X-GMAIL-MSGID: 1773930626254793923 The following makes us more correctly print the used vector size when doing BB vectorization and also print all involved SLP graph roots, not just the random one we ended up picking as leader. In particular the last bit improves diffing opt-info between different GCC revs but it also requires some testsuite adjustments. Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. * tree-vect-slp.cc (vect_slp_region): Provide opt-info for all SLP subgraph entries. Dump the used vector size based on the SLP subgraph entry root vector type. * g++.dg/vect/slp-pr87105.cc: Adjust. * gcc.dg/vect/bb-slp-17.c: Likewise. * gcc.dg/vect/bb-slp-20.c: Likewise. * gcc.dg/vect/bb-slp-21.c: Likewise. * gcc.dg/vect/bb-slp-22.c: Likewise. * gcc.dg/vect/bb-slp-subgroups-2.c: Likewise. --- gcc/testsuite/g++.dg/vect/slp-pr87105.cc | 2 +- gcc/testsuite/gcc.dg/vect/bb-slp-17.c | 5 ++- gcc/testsuite/gcc.dg/vect/bb-slp-20.c | 3 +- gcc/testsuite/gcc.dg/vect/bb-slp-21.c | 3 +- gcc/testsuite/gcc.dg/vect/bb-slp-22.c | 2 +- .../gcc.dg/vect/bb-slp-subgroups-2.c | 2 +- gcc/tree-vect-slp.cc | 37 ++++++++++++------- 7 files changed, 33 insertions(+), 21 deletions(-) diff --git a/gcc/testsuite/g++.dg/vect/slp-pr87105.cc b/gcc/testsuite/g++.dg/vect/slp-pr87105.cc index d07b1cd46b7..17017686792 100644 --- a/gcc/testsuite/g++.dg/vect/slp-pr87105.cc +++ b/gcc/testsuite/g++.dg/vect/slp-pr87105.cc @@ -99,7 +99,7 @@ void quadBoundingBoxA(const Point bez[3], Box& bBox) noexcept { // We should have if-converted everything down to straight-line code // { dg-final { scan-tree-dump-times "" 1 "slp2" } } -// { dg-final { scan-tree-dump-times "basic block part vectorized" 1 "slp2" { xfail { { ! vect_element_align } && { ! vect_hw_misalign } } } } } +// { dg-final { scan-tree-dump-times "Basic block will be vectorized using SLP" 1 "slp2" { xfail { { ! vect_element_align } && { ! vect_hw_misalign } } } } } // It's a bit awkward to detect that all stores were vectorized but the // following more or less does the trick // { dg-final { scan-tree-dump "vect_\[^\r\m\]* = MIN" "slp2" { xfail { { ! vect_element_align } && { ! vect_hw_misalign } } } } } diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-17.c b/gcc/testsuite/gcc.dg/vect/bb-slp-17.c index fc3ef42f51a..e7bb06bf816 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-17.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-17.c @@ -58,5 +58,6 @@ int main (void) } /* We need V2SI vector add support for the b[] vectorization, if we don't - have that we might only see the store vectorized and thus 2 subgraphs. */ -/* { dg-final { scan-tree-dump-times "optimized: basic block" 1 "slp2" { target { vect_int_mult && vect64 } } } } */ + have that we might only see the store vectorized. In any case we have + two subgraph entries. */ +/* { dg-final { scan-tree-dump-times "optimized: basic block" 2 "slp2" { target { vect_int_mult && vect64 } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-20.c b/gcc/testsuite/gcc.dg/vect/bb-slp-20.c index 134858c934a..7b25f91fbd3 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-20.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-20.c @@ -63,6 +63,7 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "optimized: basic block" 1 "slp2" { target vect_int_mult } } } */ +/* { dg-final { scan-tree-dump-times "Basic block will be vectorized using SLP" 1 "slp2" { target vect_int_mult } } } */ +/* { dg-final { scan-tree-dump-times "optimized: basic block" 2 "slp2" { target vect_int_mult } } } */ /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "slp2" { target vect_int_mult } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-21.c b/gcc/testsuite/gcc.dg/vect/bb-slp-21.c index d4c98d67f55..45054cd3c29 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-21.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-21.c @@ -63,6 +63,7 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "optimized: basic block" 1 "slp2" } } */ +/* { dg-final { scan-tree-dump-times "Basic block will be vectorized using SLP" 1 "slp2" } } */ +/* { dg-final { scan-tree-dump-times "optimized: basic block" 2 "slp2" } } */ /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "slp2" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-22.c b/gcc/testsuite/gcc.dg/vect/bb-slp-22.c index 92cc2a51abd..7bf7e2c4feb 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-22.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-22.c @@ -63,5 +63,5 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "optimized: basic block" 1 "slp2" } } */ +/* { dg-final { scan-tree-dump-times "Basic block will be vectorized using SLP" 1 "slp2" } } */ /* { dg-final { scan-tree-dump "vectorizing SLP node starting from: _\[0-9\]+ = _\[0-9\]+ \\\* a0" "slp2" { target vect_int_mult } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-subgroups-2.c b/gcc/testsuite/gcc.dg/vect/bb-slp-subgroups-2.c index 968cdf1cc51..ead8d92f202 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-subgroups-2.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-subgroups-2.c @@ -39,4 +39,4 @@ main (int argc, char **argv) } /* { dg-final { scan-tree-dump-times "Basic block will be vectorized using SLP" 1 "slp2" } } */ -/* { dg-final { scan-tree-dump-times "optimized: basic block" 1 "slp2" } } */ +/* { dg-final { scan-tree-dump-times "optimized: basic block" 2 "slp2" } } */ diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index f02921564c9..41997d5a546 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -7574,25 +7574,34 @@ vect_slp_region (vec bbs, vec datarefs, "using SLP\n"); vectorized = true; + /* Dump before scheduling as store vectorization will remove + the original stores and mess with the instance tree + so querying its location will eventually ICE. */ + if (flag_checking) + for (slp_instance sub : instance->subgraph_entries) + gcc_assert (SLP_TREE_VECTYPE (SLP_INSTANCE_TREE (sub))); + unsigned HOST_WIDE_INT bytes; + if (dump_enabled_p ()) + for (slp_instance sub : instance->subgraph_entries) + { + tree vtype = SLP_TREE_VECTYPE (SLP_INSTANCE_TREE (sub)); + if (GET_MODE_SIZE (TYPE_MODE (vtype)).is_constant (&bytes)) + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, + sub->location (), + "basic block part vectorized using %wu " + "byte vectors\n", bytes); + else + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, + sub->location (), + "basic block part vectorized using " + "variable length vectors\n"); + } + dump_user_location_t saved_vect_location = vect_location; vect_location = instance->location (); vect_schedule_slp (bb_vinfo, instance->subgraph_entries); - unsigned HOST_WIDE_INT bytes; - if (dump_enabled_p ()) - { - if (GET_MODE_SIZE - (bb_vinfo->vector_mode).is_constant (&bytes)) - dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, vect_location, - "basic block part vectorized using %wu " - "byte vectors\n", bytes); - else - dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, vect_location, - "basic block part vectorized using " - "variable length vectors\n"); - } - vect_location = saved_vect_location; } }