From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13041 invoked by alias); 6 Aug 2014 12:09:25 -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 13029 invoked by uid 89); 6 Aug 2014 12:09:24 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-wg0-f43.google.com Received: from mail-wg0-f43.google.com (HELO mail-wg0-f43.google.com) (74.125.82.43) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Wed, 06 Aug 2014 12:09:23 +0000 Received: by mail-wg0-f43.google.com with SMTP id l18so2446524wgh.26 for ; Wed, 06 Aug 2014 05:09:19 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.194.221.6 with SMTP id qa6mr15079865wjc.39.1407326959755; Wed, 06 Aug 2014 05:09:19 -0700 (PDT) Received: by 10.194.20.69 with HTTP; Wed, 6 Aug 2014 05:09:19 -0700 (PDT) In-Reply-To: <20140805142142.GW7393@tucnak.redhat.com> References: <53BA4458.30804@linaro.org> <53BFD000.1030909@linaro.org> <53C34734.2080103@linaro.org> <53DB1CE2.3080401@linaro.org> <53DBBA6B.3070507@linaro.org> <20140805142142.GW7393@tucnak.redhat.com> Date: Wed, 06 Aug 2014 12:09:00 -0000 Message-ID: Subject: Re: [PATCH 2/2] Enable elimination of zext/sext From: Richard Biener To: Jakub Jelinek Cc: Kugan , "gcc-patches@gcc.gnu.org" Content-Type: text/plain; charset=UTF-8 X-IsSubscribed: yes X-SW-Source: 2014-08/txt/msg00462.txt.bz2 On Tue, Aug 5, 2014 at 4:21 PM, Jakub Jelinek wrote: > On Tue, Aug 05, 2014 at 04:17:41PM +0200, Richard Biener wrote: >> what's the semantic of setting SRP_SIGNED_AND_UNSIGNED >> on the subreg? That is, for the created (subreg:lhs_mode >> (reg: N))? > > SRP_SIGNED_AND_UNSIGNED on a subreg should mean that > the subreg is both zero and sign extended, which means > that the topmost bit of the narrower mode is known to be zero, > and all bits above it in the wider mode are known to be zero too. > SRP_SIGNED means that the topmost bit of the narrower mode is > either 0 or 1 and depending on that the above wider mode bits > are either all 0 or all 1. > SRP_UNSIGNED means that regardless of the topmost bit value, > all above wider mode bits are 0. Ok, then from the context of the patch we already know that either SRP_UNSIGNED or SRP_SIGNED is true which means that the value is sign- or zero-extended. I suppose inside promoted_for_type_p TYPE_MODE (TREE_TYPE (ssa)) == lhs_mode, I'm not sure why you pass !unsignedp as lhs_uns. Now, from 'ssa' alone we can't tell anything about a larger mode registers value if that is either zero- or sign-extended. But we know that those bits are properly zero-extended if unsignedp and properly sign-extended if !unsignedp? So what the predicate tries to prove is that sign- and zero-extending results in the same larger-mode value. This is true if the MSB of the smaller mode is not set. Let's assume that smaller mode is that of 'ssa' then the test is just return (!tree_int_cst_sign_bit (min) && !tree_int_cst_sign_bit (max)); no? Thanks, Richard. > Jakub