From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 92983 invoked by alias); 25 Jul 2017 14:19:08 -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 92227 invoked by uid 89); 25 Jul 2017 14:19:08 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.2 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:3361, 5,4 X-HELO: mail-lf0-f65.google.com Received: from mail-lf0-f65.google.com (HELO mail-lf0-f65.google.com) (209.85.215.65) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 25 Jul 2017 14:19:06 +0000 Received: by mail-lf0-f65.google.com with SMTP id 65so957789lfa.0 for ; Tue, 25 Jul 2017 07:19:05 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=8ey2ev26FRl5SuFp1JV+ziJBMrUxIsLdD7zlUwvuCnw=; b=tZiXgQK1WLOBwxcua5ioZ/uQTLguk1Sdef+1GbVYkqExD+btFttbOqeRdWGZc0Sqgb 6w6E8cjPKu8mzCj8RChml0iWxI1uvp/5E/R201pz+jD29xzbVsHuUMtU6FCQfufmoQ9S pD24pwnKqFo/AqDQZGPwl6V10ETWbXuu+eymJoMcDdnJzz9QnhSqBlLWyxrosCzrNf0H uRx935wsBexWjxXv7gf4NpMNARu6gxuPxU6mcHYrzj5XbxVJP+t55Bfffhe7KxC0qaZQ jTnPps86YVY3C1tWIZA6DdMNduqqAxXlsSY3MFHXrS0yawx+QykJ9CzyJkjj/KOApFyV NOAA== X-Gm-Message-State: AIVw1127a+q3gWVK7e0J+84NpnI07zjOz4IwCjNKuHI4K3mDCC0XFHjJ GCnnQT8lpWxGKbgOsSe+tIIz6YiHHg== X-Received: by 10.46.78.18 with SMTP id c18mr3481621ljb.126.1500992344175; Tue, 25 Jul 2017 07:19:04 -0700 (PDT) MIME-Version: 1.0 Received: by 10.25.31.134 with HTTP; Tue, 25 Jul 2017 07:19:03 -0700 (PDT) In-Reply-To: <20170721155550.5846-2-amonakov@ispras.ru> References: <20170721155550.5846-1-amonakov@ispras.ru> <20170721155550.5846-2-amonakov@ispras.ru> From: Richard Biener Date: Tue, 25 Jul 2017 14:19:00 -0000 Message-ID: Subject: Re: [PATCH v2 2/2] combine successive multiplications by constants To: Alexander Monakov Cc: GCC Patches Content-Type: text/plain; charset="UTF-8" X-IsSubscribed: yes X-SW-Source: 2017-07/txt/msg01576.txt.bz2 On Fri, Jul 21, 2017 at 5:55 PM, Alexander Monakov wrote: > Previous revision here: https://gcc.gnu.org/ml/gcc-patches/2017-07/msg01090.html > > Reassociate X * CST1 * CST2 to X * (CST1 * CST2). > > Changed in this revision: > - remove the check for @2 being 0 or -1 Ok. Thanks, Richard. > * match.pd ((X * CST1) * CST2): Simplify to X * (CST1 * CST2). > testsuite: > * gcc.dg/tree-ssa/assoc-2.c: Enhance. > * gcc.dg/tree-ssa/slsr-4.c: Adjust. > > --- > gcc/match.pd | 13 +++++++++++++ > gcc/testsuite/gcc.dg/tree-ssa/assoc-2.c | 13 ++++++++++++- > gcc/testsuite/gcc.dg/tree-ssa/slsr-4.c | 8 ++------ > 3 files changed, 27 insertions(+), 7 deletions(-) > > diff --git a/gcc/match.pd b/gcc/match.pd > index 39e1e5c..732b80c 100644 > --- a/gcc/match.pd > +++ b/gcc/match.pd > @@ -284,6 +284,19 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) > || mul != wi::min_value (TYPE_PRECISION (type), SIGNED)) > { build_zero_cst (type); }))))) > > +/* Combine successive multiplications. Similar to above, but handling > + overflow is different. */ > +(simplify > + (mult (mult @0 INTEGER_CST@1) INTEGER_CST@2) > + (with { > + bool overflow_p; > + wide_int mul = wi::mul (@1, @2, TYPE_SIGN (type), &overflow_p); > + } > + /* Skip folding on overflow: the only special case is @1 * @2 == -INT_MIN, > + otherwise undefined overflow implies that @0 must be zero. */ > + (if (!overflow_p || TYPE_OVERFLOW_WRAPS (type)) > + (mult @0 { wide_int_to_tree (type, mul); })))) > + > /* Optimize A / A to 1.0 if we don't care about > NaNs or Infinities. */ > (simplify > diff --git a/gcc/testsuite/gcc.dg/tree-ssa/assoc-2.c b/gcc/testsuite/gcc.dg/tree-ssa/assoc-2.c > index a92c882..cc0e9d4 100644 > --- a/gcc/testsuite/gcc.dg/tree-ssa/assoc-2.c > +++ b/gcc/testsuite/gcc.dg/tree-ssa/assoc-2.c > @@ -5,4 +5,15 @@ int f0(int a, int b){ > return a * 33 * b * 55; > } > > -/* { dg-final { scan-tree-dump-times "mult_expr" 2 "gimple" } } */ > +int f1(int a){ > + a *= 33; > + return a * 55; > +} > + > +int f2(int a, int b){ > + a *= 33; > + return a * b * 55; > +} > + > +/* { dg-final { scan-tree-dump-times "mult_expr" 7 "gimple" } } */ > +/* { dg-final { scan-tree-dump-times "mult_expr" 5 "optimized" } } */ > diff --git a/gcc/testsuite/gcc.dg/tree-ssa/slsr-4.c b/gcc/testsuite/gcc.dg/tree-ssa/slsr-4.c > index 17d7b4c..1e943b7 100644 > --- a/gcc/testsuite/gcc.dg/tree-ssa/slsr-4.c > +++ b/gcc/testsuite/gcc.dg/tree-ssa/slsr-4.c > @@ -23,13 +23,9 @@ f (int i) > foo (y); > } > > -/* { dg-final { scan-tree-dump-times "\\* 4" 1 "slsr" } } */ > -/* { dg-final { scan-tree-dump-times "\\* 10" 1 "slsr" } } */ > -/* { dg-final { scan-tree-dump-times "\\+ 20;" 1 "slsr" } } */ > +/* { dg-final { scan-tree-dump-times "\\* 40" 1 "slsr" } } */ > /* { dg-final { scan-tree-dump-times "\\+ 200" 1 "slsr" } } */ > -/* { dg-final { scan-tree-dump-times "\\- 16;" 1 "slsr" } } */ > /* { dg-final { scan-tree-dump-times "\\- 160" 1 "slsr" } } */ > -/* { dg-final { scan-tree-dump-times "\\* 4" 1 "optimized" } } */ > -/* { dg-final { scan-tree-dump-times "\\* 10" 1 "optimized" } } */ > +/* { dg-final { scan-tree-dump-times "\\* 40" 1 "optimized" } } */ > /* { dg-final { scan-tree-dump-times "\\+ 200" 1 "optimized" } } */ > /* { dg-final { scan-tree-dump-times "\\+ 40" 1 "optimized" } } */ > -- > 1.8.3.1 >