From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 97501 invoked by alias); 21 Jul 2015 09:16:56 -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 97489 invoked by uid 89); 21 Jul 2015 09:16:54 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00,SPF_PASS autolearn=ham version=3.3.2 X-HELO: eu-smtp-delivery-143.mimecast.com Received: from eu-smtp-delivery-143.mimecast.com (HELO eu-smtp-delivery-143.mimecast.com) (207.82.80.143) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 21 Jul 2015 09:16:53 +0000 Received: from cam-owa1.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.140]) by eu-smtp-1.mimecast.com with ESMTP id uk-mta-12-CSO3QWlORNyt6BSRBvJO7g-1; Tue, 21 Jul 2015 10:16:48 +0100 Received: from [10.2.207.50] ([10.1.2.79]) by cam-owa1.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 21 Jul 2015 10:16:48 +0100 Message-ID: <55AE0E00.7060507@arm.com> Date: Tue, 21 Jul 2015 09:26:00 -0000 From: Kyrill Tkachov User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0 MIME-Version: 1.0 To: Richard Biener CC: GCC Patches Subject: Re: [PATCH][match.pd] PR middle-end/66915 Restrict A - B -> A + (-B) to non-fixed-point types References: <55AD0572.3010200@arm.com> In-Reply-To: X-MC-Unique: CSO3QWlORNyt6BSRBvJO7g-1 Content-Type: text/plain; charset=WINDOWS-1252; format=flowed Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes X-SW-Source: 2015-07/txt/msg01715.txt.bz2 On 21/07/15 08:24, Richard Biener wrote: > On Mon, 20 Jul 2015, Kyrill Tkachov wrote: > >> Hi all, >> >> This patch fixes the PR in question which is a miscompilation of >> gcc.dg/fixed-point/unary.c on arm. >> It just restricts the A - B -> A + (-B) transformation when the type is >> fixed-point. >> >> This fixes the testcase for me. >> Is this the right approach? >> >> Bootstrap and test on arm and x86 running. >> >> Ok if testing is clean? > Ok, but I think the fold-const.c code has the same issue, no: > > /* A - B -> A + (-B) if B is easily negatable. */ > if (negate_expr_p (arg1) > && !TYPE_OVERFLOW_SANITIZED (type) > && ((FLOAT_TYPE_P (type) > /* Avoid this transformation if B is a positive REAL_CST. > */ > && (TREE_CODE (arg1) !=3D REAL_CST > || REAL_VALUE_NEGATIVE (TREE_REAL_CST (arg1)))) > || INTEGRAL_TYPE_P (type))) > return fold_build2_loc (loc, PLUS_EXPR, type, > fold_convert_loc (loc, type, arg0), > fold_convert_loc (loc, type, > negate_expr (arg1))); > > ah, no. The above only applies to float-type and integral-types. > > Thus yes, your patch is ok. Can you double-check the other pattern, > > /* -(A + B) -> (-B) - A. */ > (simplify > (negate (plus:c @0 negate_expr_p@1)) > (if (!HONOR_SIGN_DEPENDENT_ROUNDING (element_mode (type)) > && !HONOR_SIGNED_ZEROS (element_mode (type))) > (minus (negate @1) @0))) > > ? Thanks, committed with r226028. I can add (FLOAT_TYPE_P (type) || INTEGRAL_TYPE_P (type)) to the condition. That would more closely mirror the original logic, right? That passes x86_64 bootstrap and aarch64 testing looks ok. > > Thanks, > Richard. > >> Thanks, >> Kyrill >> >> >> 2015-07-20 Kyrylo Tkachov >> >> PR middle-end/66915 >> * match.pd (A - B -> A + (-B)): Don't allow folding >> when type if a fixed-point type. >>