From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 77441 invoked by alias); 28 Feb 2020 07:56:23 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 77430 invoked by uid 89); 28 Feb 2020 07:56:23 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-22.4 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.1 spammy=honza, guessing, Honza X-HELO: mx0a-001b2d01.pphosted.com Received: from mx0a-001b2d01.pphosted.com (HELO mx0a-001b2d01.pphosted.com) (148.163.156.1) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 28 Feb 2020 07:56:21 +0000 Received: from pps.filterd (m0098393.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 01S7tTQ8113989; Fri, 28 Feb 2020 02:56:20 -0500 Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 2yepx54ucu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Feb 2020 02:56:19 -0500 Received: from m0098393.ppops.net (m0098393.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 01S7uJcb116284; Fri, 28 Feb 2020 02:56:19 -0500 Received: from ppma03dal.us.ibm.com (b.bd.3ea9.ip4.static.sl-reverse.com [169.62.189.11]) by mx0a-001b2d01.pphosted.com with ESMTP id 2yepx54uc9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Feb 2020 02:56:19 -0500 Received: from pps.filterd (ppma03dal.us.ibm.com [127.0.0.1]) by ppma03dal.us.ibm.com (8.16.0.27/8.16.0.27) with SMTP id 01S7tUC4012675; Fri, 28 Feb 2020 07:56:18 GMT Received: from b03cxnp08025.gho.boulder.ibm.com (b03cxnp08025.gho.boulder.ibm.com [9.17.130.17]) by ppma03dal.us.ibm.com with ESMTP id 2yepv2khnj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Feb 2020 07:56:18 +0000 Received: from b03ledav005.gho.boulder.ibm.com (b03ledav005.gho.boulder.ibm.com [9.17.130.236]) by b03cxnp08025.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 01S7uG7V62128492 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 28 Feb 2020 07:56:16 GMT Received: from b03ledav005.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AFAC7BE058; Fri, 28 Feb 2020 07:56:16 +0000 (GMT) Received: from b03ledav005.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6850DBE054; Fri, 28 Feb 2020 07:56:16 +0000 (GMT) Received: from genoa.aus.stglabs.ibm.com (unknown [9.40.192.157]) by b03ledav005.gho.boulder.ibm.com (Postfix) with ESMTPS; Fri, 28 Feb 2020 07:56:16 +0000 (GMT) From: Jiufu Guo To: Jan Hubicka Cc: Jeff Law , Pat Haugen , gcc-patches@gcc.gnu.org, wschmidt@linux.ibm.com, segher@kernel.crashing.org Subject: Re: [PATCH V2] correct COUNT and PROB for unrolled loop References: <1580717822-6073-1-git-send-email-guojiufu@linux.ibm.com> <20200203162337.GK22868@kam.mff.cuni.cz> Date: Fri, 28 Feb 2020 07:56:00 -0000 In-Reply-To: (Jiufu Guo's message of "Mon, 17 Feb 2020 14:23:08 +0800") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2020-02/txt/msg01602.txt.bz2 Jiufu Guo writes: Hi! I'd like to ping following patch. just in case it may make sense to include in GCC 10. Thanks! https://gcc.gnu.org/ml/gcc-patches/2020-02/msg00927.html Jiufu > Hi Honza and all, > > I updated the patch a little as below. Bootstrap and regtest are ok > on powerpc64le. > > Is OK for trunk? > > Thanks for comments. > Jiufu > > diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c > index 727e951..ded0046 100644 > --- a/gcc/cfgloopmanip.c > +++ b/gcc/cfgloopmanip.c > @@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see > #include "gimplify-me.h" > #include "tree-ssa-loop-manip.h" > #include "dumpfile.h" > +#include "cfgrtl.h" > > static void copy_loops_to (class loop **, int, > class loop *); > @@ -1258,14 +1259,30 @@ duplicate_loop_to_header_edge (class loop *loop, edge e, > /* If original loop is executed COUNT_IN times, the unrolled > loop will account SCALE_MAIN_DEN times. */ > scale_main = count_in.probability_in (scale_main_den); > + > + /* If we are guessing at the number of iterations and count_in > + becomes unrealistically small, reset probability. */ > + if (!(count_in.reliable_p () || loop->any_estimate)) > + { > + profile_count new_count_in = count_in.apply_probability (scale_main); > + profile_count preheader_count = loop_preheader_edge (loop)->count (); > + if (new_count_in.apply_scale (1, 10) < preheader_count) > + scale_main = profile_probability::likely (); > + } > + > scale_act = scale_main * prob_pass_main; > } > else > { > + profile_count new_loop_count; > profile_count preheader_count = e->count (); > - for (i = 0; i < ndupl; i++) > - scale_main = scale_main * scale_step[i]; > scale_act = preheader_count.probability_in (count_in); > + /* Compute final preheader count after peeling NDUPL copies. */ > + for (i = 0; i < ndupl; i++) > + preheader_count = preheader_count.apply_probability (scale_step[i]); > + /* Subtract out exit(s) from peeled copies. */ > + new_loop_count = count_in - (e->count () - preheader_count); > + scale_main = new_loop_count.probability_in (count_in); > } > } > > @@ -1381,6 +1398,38 @@ duplicate_loop_to_header_edge (class loop *loop, edge e, > scale_bbs_frequencies (new_bbs, n, scale_act); > scale_act = scale_act * scale_step[j]; > } > + > + /* Need to update PROB of exit edge and corresponding COUNT. */ > + if (orig && is_latch && (!bitmap_bit_p (wont_exit, j + 1)) > + && bbs_to_scale) > + { > + edge new_exit = new_spec_edges[SE_ORIG]; > + profile_count new_count_in = new_exit->src->count; > + profile_count preheader_count = loop_preheader_edge (loop)->count (); > + edge e; > + edge_iterator ei; > + > + FOR_EACH_EDGE (e, ei, new_exit->src->succs) > + if (e != new_exit) > + break; > + > + gcc_assert (e && e != new_exit); > + > + new_exit->probability = preheader_count.probability_in (new_count_in); > + e->probability = new_exit->probability.invert (); > + > + profile_count new_latch_count > + = new_exit->src->count.apply_probability (e->probability); > + profile_count old_latch_count = e->dest->count; > + > + EXECUTE_IF_SET_IN_BITMAP (bbs_to_scale, 0, i, bi) > + scale_bbs_frequencies_profile_count (new_bbs + i, 1, > + new_latch_count, > + old_latch_count); > + > + if (current_ir_type () != IR_GIMPLE) > + update_br_prob_note (e->src); > + } > } > free (new_bbs); > free (orig_loops); > diff --git a/gcc/testsuite/gcc.dg/pr68212.c b/gcc/testsuite/gcc.dg/pr68212.c > new file mode 100644 > index 0000000..f3b7c22 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/pr68212.c > @@ -0,0 +1,13 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -fno-tree-vectorize -funroll-loops --param max-unroll-times=4 -fdump-rtl-alignments" } */ > + > +void foo(long int *a, long int *b, long int n) > +{ > + long int i; > + > + for (i = 0; i < n; i++) > + a[i] = *b; > +} > + > +/* { dg-final { scan-rtl-dump-times "internal loop alignment added" 1 "alignments"} } */ > +