From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 83781 invoked by alias); 10 Nov 2015 11:16:22 -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 83634 invoked by uid 89); 10 Nov 2015 11:16:22 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Tue, 10 Nov 2015 11:16:12 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id D4B6C96EA; Tue, 10 Nov 2015 11:16:10 +0000 (UTC) Received: from localhost.localdomain (vpn1-6-250.ams2.redhat.com [10.36.6.250]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id tAABG9UA016012; Tue, 10 Nov 2015 06:16:10 -0500 Subject: Re: [PATCH 1/2] simplify-rtx: Simplify trunc of and of shiftrt To: Segher Boessenkool , gcc-patches@gcc.gnu.org References: <1d3e9ff999e20e4eb13a5825ac084074bd05a397.1447053652.git.segher@kernel.crashing.org> Cc: dje.gcc@gmail.com From: Bernd Schmidt Message-ID: <5641D1F9.3090104@redhat.com> Date: Tue, 10 Nov 2015 11:16:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: <1d3e9ff999e20e4eb13a5825ac084074bd05a397.1447053652.git.segher@kernel.crashing.org> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2015-11/txt/msg01189.txt.bz2 On 11/09/2015 08:33 AM, Segher Boessenkool wrote: > If we have > > (truncate:M1 (and:M2 (lshiftrt:M2 (x:M2) C) C2)) > > we can write it instead as > > (and:M1 (lshiftrt:M1 (truncate:M1 (x:M2)) C) C2) > > > + /* Likewise (truncate:QI (and:SI (lshiftrt:SI (x:SI) C) C2)) into > + (and:QI (lshiftrt:QI (truncate:QI (x:SI)) C) C2) for suitable C > + and C2. */ > + if (GET_CODE (op) == AND > + && (GET_CODE (XEXP (op, 0)) == LSHIFTRT > + || GET_CODE (XEXP (op, 0)) == ASHIFTRT) > + && CONST_INT_P (XEXP (XEXP (op, 0), 1)) > + && CONST_INT_P (XEXP (op, 1)) > + && UINTVAL (XEXP (XEXP (op, 0), 1)) < precision > + && ((GET_MODE_MASK (mode) >> UINTVAL (XEXP (XEXP (op, 0), 1))) > + & UINTVAL (XEXP (op, 1))) > + == ((GET_MODE_MASK (op_mode) >> UINTVAL (XEXP (XEXP (op, 0), 1))) > + & UINTVAL (XEXP (op, 1)))) In general this would be easier to read if there were intermediate variables called shift_amount and mask. I'm not entirely sure what the last condition here is supposed to test. Is it related to... > + return simplify_gen_binary (AND, mode, op0, XEXP (op, 1)); ... the fact that here I think you'd have to trunc_int_for_mode the AND amount for the smaller mode? Bernd