This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[08/77] Simplify gen_trunc/extend_conv_libfunc
- From: Richard Sandiford <richard dot sandiford at linaro dot org>
- To: gcc-patches at gcc dot gnu dot org
- Date: Thu, 13 Jul 2017 09:40:55 +0100
- Subject: [08/77] Simplify gen_trunc/extend_conv_libfunc
- Authentication-results: sourceware.org; auth=none
- References: <8760ewohsv.fsf@linaro.org>
Replace checks of:
GET_MODE_CLASS (fmode) != MODE_FLOAT && !DECIMAL_FLOAT_MODE_P (fmode)
with !is_a <scalar_float_mode> 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))
2017-07-13 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* optabs-libfuncs.c (gen_trunc_conv_libfunc): Use is_a
<scalar_float_mode>. Simplify.
(gen_extend_conv_libfunc): Likewise.
Index: gcc/optabs-libfuncs.c
===================================================================
--- gcc/optabs-libfuncs.c 2017-07-13 09:18:22.933278054 +0100
+++ gcc/optabs-libfuncs.c 2017-07-13 09:18:24.309132693 +0100
@@ -579,24 +579,20 @@ gen_trunc_conv_libfunc (convert_optab ta
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 <scalar_float_mode> (fmode, &float_fmode)
+ || !is_a <scalar_float_mode> (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 t
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 <scalar_float_mode> (fmode, &float_fmode)
+ || !is_a <scalar_float_mode> (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);
}