From patchwork Sun Oct 28 16:58:58 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Carlini X-Patchwork-Id: 194724 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 8A5AC2C007D for ; Mon, 29 Oct 2012 03:59:12 +1100 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1352048352; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Received:Received:Message-ID:Date:From:User-Agent:MIME-Version: To:CC:Subject:References:In-Reply-To:Content-Type:Mailing-List: Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:Sender:Delivered-To; bh=P6/3twCheseKZvDB3GGOhPAMKew=; b=RzwEQBGQYPXM1/IZl5NzfZbaaQiYHV5MwYmskjiCUewhqDFg79rJ0gZ/kAqj5n 2LSbivBdhtLB4O+m3kw1W+H7GPBmNo5iSCdQCFTDsL3ymfcNC7PnJfz0eQOUfod/ brAhnNUlVBnm8AuUHujZan6ZjPHoWeevDBY3TaSoI2OCs= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Received:Received:Received:Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject:References:In-Reply-To:Content-Type:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=i29QIcNOKefDQYcHdkS1ldmSqsjWEt4KIi/RmGXBMnEH+f8UFzXaI3JA+iZp8r 2eSS+gIgFYTd9d3fSa4HMp004tqN7c3lTRgdyaxt5Zf312z3+u/tQwE+xbMTpK79 557iDlYZNUl2HrwFpWoI95a+rKLp05l8kO/8LkZwfQkVg=; Received: (qmail 13643 invoked by alias); 28 Oct 2012 16:59:09 -0000 Received: (qmail 13635 invoked by uid 22791); 28 Oct 2012 16:59:08 -0000 X-SWARE-Spam-Status: No, hits=-7.9 required=5.0 tests=AWL, BAYES_00, KHOP_RCVD_UNTRUST, KHOP_THREADED, RCVD_IN_DNSWL_HI, RCVD_IN_HOSTKARMA_NO, RCVD_IN_HOSTKARMA_YE, RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from acsinet15.oracle.com (HELO acsinet15.oracle.com) (141.146.126.227) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 28 Oct 2012 16:59:03 +0000 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by acsinet15.oracle.com (Sentrion-MTA-4.2.2/Sentrion-MTA-4.2.2) with ESMTP id q9SGx1Pm013910 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Sun, 28 Oct 2012 16:59:02 GMT Received: from acsmt356.oracle.com (acsmt356.oracle.com [141.146.40.156]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q9SGx18K028932 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sun, 28 Oct 2012 16:59:01 GMT Received: from abhmt103.oracle.com (abhmt103.oracle.com [141.146.116.55]) by acsmt356.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q9SGx1Ui001971; Sun, 28 Oct 2012 11:59:01 -0500 Received: from [192.168.1.4] (/79.45.216.199) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Sun, 28 Oct 2012 09:59:01 -0700 Message-ID: <508D6452.3020203@oracle.com> Date: Sun, 28 Oct 2012 17:58:58 +0100 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121010 Thunderbird/16.0.1 MIME-Version: 1.0 To: Marc Glisse CC: gcc-patches@gcc.gnu.org Subject: Re: real_zerop for vectors References: <508D5339.2020501@oracle.com> <508D553F.80907@oracle.com> In-Reply-To: X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Hi, On 10/28/2012 05:51 PM, Marc Glisse wrote: > On Sun, 28 Oct 2012, Marc Glisse wrote: > > [there are 4 real_*p that only differ by 1 character] > >> It is true that we could have a single function in tree.c: >> bool real_intcstp (const_tree, int); > > The helper function could even take a REAL_VALUE_TYPE as second > argument, so the non-inline part doesn't have more work than currently. I was writing something like the below. Paolo. ///////////////// Index: tree.c =================================================================== --- tree.c (revision 192887) +++ tree.c (working copy) @@ -1984,20 +1984,39 @@ tree_floor_log2 (const_tree expr) : floor_log2 (low)); } +static int +real_somep (const_tree expr, REAL_VALUE_TYPE dcst) +{ + STRIP_NOPS (expr); + + switch (TREE_CODE (expr)) + { + case REAL_CST: + return REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dcst) + && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr)))); + case COMPLEX_CST: + return real_somep (TREE_REALPART (expr), dcst) + && real_somep (TREE_IMAGPART (expr), dconst0); + case VECTOR_CST: + { + unsigned i; + for (i = 0; i < VECTOR_CST_NELTS (expr); ++i) + if (!real_somep (VECTOR_CST_ELT (expr, i), dcst)) + return false; + return true; + } + default: + return false; + } +} + /* Return 1 if EXPR is the real constant zero. Trailing zeroes matter for decimal float constants, so don't return 1 for them. */ int real_zerop (const_tree expr) { - STRIP_NOPS (expr); - - return ((TREE_CODE (expr) == REAL_CST - && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0) - && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))))) - || (TREE_CODE (expr) == COMPLEX_CST - && real_zerop (TREE_REALPART (expr)) - && real_zerop (TREE_IMAGPART (expr)))); + return real_somep (expr, dconst0); } /* Return 1 if EXPR is the real constant one in real or complex form. @@ -2007,14 +2026,7 @@ real_zerop (const_tree expr) int real_onep (const_tree expr) { - STRIP_NOPS (expr); - - return ((TREE_CODE (expr) == REAL_CST - && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1) - && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))))) - || (TREE_CODE (expr) == COMPLEX_CST - && real_onep (TREE_REALPART (expr)) - && real_zerop (TREE_IMAGPART (expr)))); + return real_somep (expr, dconst1); } /* Return 1 if EXPR is the real constant two. Trailing zeroes matter @@ -2023,14 +2035,7 @@ real_onep (const_tree expr) int real_twop (const_tree expr) { - STRIP_NOPS (expr); - - return ((TREE_CODE (expr) == REAL_CST - && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2) - && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))))) - || (TREE_CODE (expr) == COMPLEX_CST - && real_twop (TREE_REALPART (expr)) - && real_zerop (TREE_IMAGPART (expr)))); + return real_somep (expr, dconst2); } /* Return 1 if EXPR is the real constant minus one. Trailing zeroes @@ -2039,14 +2044,7 @@ real_twop (const_tree expr) int real_minus_onep (const_tree expr) { - STRIP_NOPS (expr); - - return ((TREE_CODE (expr) == REAL_CST - && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconstm1) - && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))))) - || (TREE_CODE (expr) == COMPLEX_CST - && real_minus_onep (TREE_REALPART (expr)) - && real_zerop (TREE_IMAGPART (expr)))); + return real_somep (expr, dconstm1); } /* Nonzero if EXP is a constant or a cast of a constant. */