From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28404 invoked by alias); 9 Dec 2016 12:57:50 -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 28329 invoked by uid 89); 9 Dec 2016 12:57:49 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-4.9 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:3638 X-HELO: foss.arm.com Received: from foss.arm.com (HELO foss.arm.com) (217.140.101.70) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 09 Dec 2016 12:57:40 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 95C5E707; Fri, 9 Dec 2016 04:57:39 -0800 (PST) Received: from localhost (e105548-lin.manchester.arm.com [10.45.32.67]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 406E33F477 for ; Fri, 9 Dec 2016 04:57:39 -0800 (PST) From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, richard.sandiford@arm.com Subject: [8/67] Simplify gen_trunc/extend_conv_libfunc References: <87h96dp8u6.fsf@e105548-lin.cambridge.arm.com> Date: Fri, 09 Dec 2016 12:57:00 -0000 In-Reply-To: <87h96dp8u6.fsf@e105548-lin.cambridge.arm.com> (Richard Sandiford's message of "Fri, 09 Dec 2016 12:48:01 +0000") Message-ID: <87inqtnttq.fsf@e105548-lin.cambridge.arm.com> User-Agent: Gnus/5.130012 (Ma Gnus v0.12) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SW-Source: 2016-12/txt/msg00777.txt.bz2 Replace checks of: GET_MODE_CLASS (fmode) != MODE_FLOAT && !DECIMAL_FLOAT_MODE_P (fmode) with !is_a and use MODE_CLASS equality/inequality instead of: (GET_MODE_CLASS (tmode) == MODE_FLOAT && DECIMAL_FLOAT_MODE_P (fmode)) || (GET_MODE_CLASS (fmode) == MODE_FLOAT && DECIMAL_FLOAT_MODE_P (tmode)) and: (GET_MODE_CLASS (tmode) == MODE_FLOAT && GET_MODE_CLASS (fmode) == MODE_FLOAT) || (DECIMAL_FLOAT_MODE_P (fmode) && DECIMAL_FLOAT_MODE_P (tmode)) gcc/ 2016-11-30 Richard Sandiford Alan Hayward David Sherwood * optabs-libfuncs.c (gen_trunc_conv_libfunc): Use is_a . Simplify. (gen_extend_conv_libfunc): Likewise. diff --git a/gcc/optabs-libfuncs.c b/gcc/optabs-libfuncs.c index 9d9ffbd..75fd677 100644 --- a/gcc/optabs-libfuncs.c +++ b/gcc/optabs-libfuncs.c @@ -579,24 +579,20 @@ gen_trunc_conv_libfunc (convert_optab tab, machine_mode tmode, machine_mode fmode) { - if (GET_MODE_CLASS (tmode) != MODE_FLOAT && !DECIMAL_FLOAT_MODE_P (tmode)) - return; - if (GET_MODE_CLASS (fmode) != MODE_FLOAT && !DECIMAL_FLOAT_MODE_P (fmode)) - return; - if (tmode == fmode) + scalar_float_mode float_tmode, float_fmode; + if (!is_a (fmode, &float_fmode) + || !is_a (tmode, &float_tmode) + || float_tmode == float_fmode) return; - if ((GET_MODE_CLASS (tmode) == MODE_FLOAT && DECIMAL_FLOAT_MODE_P (fmode)) - || (GET_MODE_CLASS (fmode) == MODE_FLOAT && DECIMAL_FLOAT_MODE_P (tmode))) - gen_interclass_conv_libfunc (tab, opname, tmode, fmode); + if (GET_MODE_CLASS (float_tmode) != GET_MODE_CLASS (float_fmode)) + gen_interclass_conv_libfunc (tab, opname, float_tmode, float_fmode); - if (GET_MODE_PRECISION (fmode) <= GET_MODE_PRECISION (tmode)) + if (GET_MODE_PRECISION (float_fmode) <= GET_MODE_PRECISION (float_tmode)) return; - if ((GET_MODE_CLASS (tmode) == MODE_FLOAT - && GET_MODE_CLASS (fmode) == MODE_FLOAT) - || (DECIMAL_FLOAT_MODE_P (fmode) && DECIMAL_FLOAT_MODE_P (tmode))) - gen_intraclass_conv_libfunc (tab, opname, tmode, fmode); + if (GET_MODE_CLASS (float_tmode) == GET_MODE_CLASS (float_fmode)) + gen_intraclass_conv_libfunc (tab, opname, float_tmode, float_fmode); } /* Pick proper libcall for extend_optab. We need to chose if we do @@ -608,23 +604,19 @@ gen_extend_conv_libfunc (convert_optab tab, machine_mode tmode, machine_mode fmode) { - if (GET_MODE_CLASS (tmode) != MODE_FLOAT && !DECIMAL_FLOAT_MODE_P (tmode)) - return; - if (GET_MODE_CLASS (fmode) != MODE_FLOAT && !DECIMAL_FLOAT_MODE_P (fmode)) - return; - if (tmode == fmode) + scalar_float_mode float_tmode, float_fmode; + if (!is_a (fmode, &float_fmode) + || !is_a (tmode, &float_tmode) + || float_tmode == float_fmode) return; - if ((GET_MODE_CLASS (tmode) == MODE_FLOAT && DECIMAL_FLOAT_MODE_P (fmode)) - || (GET_MODE_CLASS (fmode) == MODE_FLOAT && DECIMAL_FLOAT_MODE_P (tmode))) - gen_interclass_conv_libfunc (tab, opname, tmode, fmode); + if (GET_MODE_CLASS (float_tmode) != GET_MODE_CLASS (float_fmode)) + gen_interclass_conv_libfunc (tab, opname, float_tmode, float_fmode); - if (GET_MODE_PRECISION (fmode) > GET_MODE_PRECISION (tmode)) + if (GET_MODE_PRECISION (float_fmode) > GET_MODE_PRECISION (float_tmode)) return; - if ((GET_MODE_CLASS (tmode) == MODE_FLOAT - && GET_MODE_CLASS (fmode) == MODE_FLOAT) - || (DECIMAL_FLOAT_MODE_P (fmode) && DECIMAL_FLOAT_MODE_P (tmode))) + if (GET_MODE_CLASS (float_tmode) == GET_MODE_CLASS (float_fmode)) gen_intraclass_conv_libfunc (tab, opname, tmode, fmode); }