From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 110048 invoked by alias); 3 May 2016 11:03:47 -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 109347 invoked by uid 89); 3 May 2016 11:03:46 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-spam-relays-external:74.125.82.68, H*RU:74.125.82.68 X-HELO: mail-wm0-f68.google.com Received: from mail-wm0-f68.google.com (HELO mail-wm0-f68.google.com) (74.125.82.68) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 03 May 2016 11:03:36 +0000 Received: by mail-wm0-f68.google.com with SMTP id e201so3078507wme.2 for ; Tue, 03 May 2016 04:03:36 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc; bh=rJkXr0nTKVsy8/BCPiyDhRTgOKGob0ld3MtODK21uVs=; b=FBR8OsbrXeUsGlwNvh91VpGoOzl1pj78rG/56R1Og+/VP3BiJR5IJR3jI9wiuVYFPi 5OL1DjYEJvBDH9CPwbvyeMoosZqYUySNwU6QO+Yw2/kZt8ERegGVUnwk00esHIGasAZT 1m+KO6yM2gcBLuB+nMst5o/KEv0D+MqtZeEfu93BxumK3/3ziAEMqwGSIO4nLvdstbEV T9Xq5aXz2cPBJisWq3BJo3Hb+L6l/QL2Tw6nUNjC2jFXMTxciprF3FiFikHCPPWml6LY bnMdEfoF07RMrArEjtruHQHYJZiDyJyxx3e8fGydKdxrvfSadDQX3OvjTcOjQU/ZfnWy 1YwQ== X-Gm-Message-State: AOPr4FV26C2vsT1eyaowiOqOwaWksY+J4fRSMpCBc7cExJcFtMQij4NHHgQH0V+C6AaggznpVo+9DYax5j34Cg== MIME-Version: 1.0 X-Received: by 10.28.168.133 with SMTP id r127mr2751532wme.9.1462273413598; Tue, 03 May 2016 04:03:33 -0700 (PDT) Received: by 10.194.113.102 with HTTP; Tue, 3 May 2016 04:03:33 -0700 (PDT) In-Reply-To: References: Date: Tue, 03 May 2016 11:03:00 -0000 Message-ID: Subject: Re: Canonicalize X u< X to UNORDERED_EXPR From: Richard Biener To: Marc Glisse Cc: GCC Patches Content-Type: text/plain; charset=UTF-8 X-IsSubscribed: yes X-SW-Source: 2016-05/txt/msg00177.txt.bz2 On Tue, May 3, 2016 at 8:36 AM, Marc Glisse wrote: > This removes the duplication. I also removed the case (A&B)&(A&C) which is > handled by reassoc. And I need 2 NOP checks, for the case where @0 is a > constant (that couldn't happen before my patch because canonicalization > would put the constant as second operand). Nicely spotted. Not sure we want to delay (A&B)&(A&C) until re-assoc. We have many patterns that reassoc would also catch, like (A + CST) + CST or (A + B)- A, albeit reassoc only handles the unsigned cases. > Bootstrap+regtest on powerpc64le-unknown-linux-gnu. Ok. Thanks, Richard. > 2016-05-03 Marc Glisse > > * match.pd ((A | B) & (A | C)): Generalize to BIT_XOR_EXPR. Mark > as commutative. Check both conversions are NOP. > ((A & B) OP (C & B)): Remove. > > -- > Marc Glisse > Index: gcc/match.pd > =================================================================== > --- gcc/match.pd (revision 235764) > +++ gcc/match.pd (working copy) > @@ -678,25 +678,26 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) > (simplify > (bit_xor:c (bit_and:c @0 @1) @1) > (bit_and (bit_not @0) @1)) > > /* Given a bit-wise operation CODE applied to ARG0 and ARG1, see if both > operands are another bit-wise operation with a common input. If so, > distribute the bit operations to save an operation and possibly two if > constants are involved. For example, convert > (A | B) & (A | C) into A | (B & C) > Further simplification will occur if B and C are constants. */ > -(for op (bit_and bit_ior) > - rop (bit_ior bit_and) > +(for op (bit_and bit_ior bit_xor) > + rop (bit_ior bit_and bit_and) > (simplify > - (op (convert? (rop:c @0 @1)) (convert? (rop @0 @2))) > - (if (tree_nop_conversion_p (type, TREE_TYPE (@0))) > + (op (convert? (rop:c @0 @1)) (convert? (rop:c @0 @2))) > + (if (tree_nop_conversion_p (type, TREE_TYPE (@1)) > + && tree_nop_conversion_p (type, TREE_TYPE (@2))) > (rop (convert @0) (op (convert @1) (convert @2)))))) > > > (simplify > (abs (abs@1 @0)) > @1) > (simplify > (abs (negate @0)) > (abs @0)) > (simplify > @@ -780,26 +781,20 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) > /* (x & y) | x -> x */ > (simplify > (bitop:c (rbitop:c @0 @1) @0) > @0) > /* (~x | y) & x -> x & y */ > /* (~x & y) | x -> x | y */ > (simplify > (bitop:c (rbitop:c (bit_not @0) @1) @0) > (bitop @0 @1))) > > -/* Simplify (A & B) OP0 (C & B) to (A OP0 C) & B. */ > -(for bitop (bit_and bit_ior bit_xor) > - (simplify > - (bitop (bit_and:c @0 @1) (bit_and @2 @1)) > - (bit_and (bitop @0 @2) @1))) > - > /* (x | CST1) & CST2 -> (x & CST2) | (CST1 & CST2) */ > (simplify > (bit_and (bit_ior @0 CONSTANT_CLASS_P@1) CONSTANT_CLASS_P@2) > (bit_ior (bit_and @0 @2) (bit_and @1 @2))) > > /* Combine successive equal operations with constants. */ > (for bitop (bit_and bit_ior bit_xor) > (simplify > (bitop (bitop @0 CONSTANT_CLASS_P@1) CONSTANT_CLASS_P@2) > (bitop @0 (bitop @1 @2)))) >