From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 57834 invoked by alias); 30 Apr 2015 09:23:44 -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 57818 invoked by uid 89); 30 Apr 2015 09:23:43 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-ob0-f182.google.com Received: from mail-ob0-f182.google.com (HELO mail-ob0-f182.google.com) (209.85.214.182) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 30 Apr 2015 09:23:42 +0000 Received: by obcux3 with SMTP id ux3so39810841obc.2 for ; Thu, 30 Apr 2015 02:23:40 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.60.92.131 with SMTP id cm3mr2655751oeb.23.1430385820681; Thu, 30 Apr 2015 02:23:40 -0700 (PDT) Received: by 10.76.115.167 with HTTP; Thu, 30 Apr 2015 02:23:40 -0700 (PDT) In-Reply-To: <1421837394-7619-2-git-send-email-rv@rasmusvillemoes.dk> References: <1421837394-7619-1-git-send-email-rv@rasmusvillemoes.dk> <1421837394-7619-2-git-send-email-rv@rasmusvillemoes.dk> Date: Thu, 30 Apr 2015 09:34:00 -0000 Message-ID: Subject: Re: [PATCH 1/4] match.pd: Add x + (x & 1) -> (x + 1) & ~1 pattern From: Richard Biener To: Rasmus Villemoes Cc: GCC Patches , Andrew Pinski Content-Type: text/plain; charset=UTF-8 X-IsSubscribed: yes X-SW-Source: 2015-04/txt/msg01986.txt.bz2 On Wed, Jan 21, 2015 at 11:49 AM, Rasmus Villemoes wrote: > gcc.dg/20150120-1.c: New test > > Rounding an integer to the next even integer is sometimes written x += > x & 1. The equivalent x = (x+1)&~1 usually uses one less register, and > in practical cases only the new value of x will be used (making it > unlikely that the subexpression x&1 has any uses). Now that we are in stage1 again You are missig a ChangeLog entry and fail to state how you tested the patch. Otherwise the patch looks ok. Thanks, Richard. > Signed-off-by: Rasmus Villemoes > --- > gcc/match.pd | 6 +++++ > gcc/testsuite/gcc.dg/20150120-1.c | 51 +++++++++++++++++++++++++++++++++++++++ > 2 files changed, 57 insertions(+) > create mode 100644 gcc/testsuite/gcc.dg/20150120-1.c > > diff --git gcc/match.pd gcc/match.pd > index 81c4ee6..ecefcfb 100644 > --- gcc/match.pd > +++ gcc/match.pd > @@ -255,6 +255,12 @@ along with GCC; see the file COPYING3. If not see > (bitop @0 @0) > (non_lvalue @0))) > > +/* x + (x & 1) -> (x + 1) & ~1 */ > +(simplify > + (plus:c @0 (bit_and@2 @0 integer_onep@1)) > + (if (TREE_CODE (@2) != SSA_NAME || has_single_use (@2)) > + (bit_and (plus @0 @1) (bit_not @1)))) > + > (simplify > (abs (negate @0)) > (abs @0)) > diff --git gcc/testsuite/gcc.dg/20150120-1.c gcc/testsuite/gcc.dg/20150120-1.c > new file mode 100644 > index 0000000..18906c4 > --- /dev/null > +++ gcc/testsuite/gcc.dg/20150120-1.c > @@ -0,0 +1,51 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -fdump-tree-original" } */ > + > +/* x + (x & 1) -> (x + 1) & ~1 */ > +int > +fn1 (int x) > +{ > + return x + (x & 1); > +} > +int > +fn2 (int x) > +{ > + return (x & 1) + x; > +} > +int > +fn3 (int x) > +{ > + return x + (1 & x); > +} > +int > +fn4 (int x) > +{ > + return (1 & x) + x; > +} > +unsigned int > +fn5 (unsigned int x) > +{ > + return x + (x & 1); > +} > +unsigned int > +fn6 (unsigned int x) > +{ > + return (x & 1) + x; > +} > +unsigned int > +fn7 (unsigned int x) > +{ > + return x + (x % 2); > +} > +unsigned int > +fn8 (unsigned int x) > +{ > + return (x % 2) + x; > +} > +unsigned int > +fn9 (unsigned int x) > +{ > + return (1LL & x) + x; > +} > + > +/* { dg-final { scan-tree-dump-times "x \\+ 1" 9 "original" } } */ > -- > 2.1.3 >