aboutsummaryrefslogtreecommitdiff
path: root/gcc/targhooks.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@linaro.org>2017-08-30 11:09:56 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2017-08-30 11:09:56 +0000
commit1ce87609c91e51d7eee8284c5fe000c7d5b240db (patch)
tree546db64fb195401be1446efc42e41df63d77178e /gcc/targhooks.c
parent5c20c4af29da29d2bb74b1fdf3c116f564431878 (diff)
downloadgcc-1ce87609c91e51d7eee8284c5fe000c7d5b240db.zip
gcc-1ce87609c91e51d7eee8284c5fe000c7d5b240db.tar.gz
gcc-1ce87609c91e51d7eee8284c5fe000c7d5b240db.tar.bz2
[13/77] Make floatn_mode return an opt_scalar_float_mode
As per subject. 2017-08-30 Richard Sandiford <richard.sandiford@linaro.org> Alan Hayward <alan.hayward@arm.com> David Sherwood <david.sherwood@arm.com> gcc/ * target.def (default_floatn_mode): Return an opt_scalar_float_mode. * doc/tm.texi: Regenerate. * config/arm/arm.c (arm_floatn_mode): Return an opt_scalar_float_mode. * config/powerpcspe/powerpcspe.c (rs6000_floatn_mode): Likewise. * config/rs6000/rs6000.c (rs6000_floatn_mode): Likewise. * targhooks.h (default_floatn_mode): Likewise. * targhooks.c (default_floatn_mode): Likewise. * tree.c (build_common_tree_nodes): Update accordingly. Co-Authored-By: Alan Hayward <alan.hayward@arm.com> Co-Authored-By: David Sherwood <david.sherwood@arm.com> From-SVN: r251465
Diffstat (limited to 'gcc/targhooks.c')
-rw-r--r--gcc/targhooks.c34
1 files changed, 18 insertions, 16 deletions
diff --git a/gcc/targhooks.c b/gcc/targhooks.c
index 1be139f..76ef7c9 100644
--- a/gcc/targhooks.c
+++ b/gcc/targhooks.c
@@ -469,12 +469,13 @@ default_libgcc_floating_mode_supported_p (machine_mode mode)
/* Return the machine mode to use for the type _FloatN, if EXTENDED is
false, or _FloatNx, if EXTENDED is true, or VOIDmode if not
supported. */
-machine_mode
+opt_scalar_float_mode
default_floatn_mode (int n, bool extended)
{
if (extended)
{
- machine_mode cand1 = VOIDmode, cand2 = VOIDmode;
+ opt_scalar_float_mode cand1, cand2;
+ scalar_float_mode mode;
switch (n)
{
case 32:
@@ -499,20 +500,21 @@ default_floatn_mode (int n, bool extended)
/* Those are the only valid _FloatNx types. */
gcc_unreachable ();
}
- if (cand1 != VOIDmode
- && REAL_MODE_FORMAT (cand1)->ieee_bits > n
- && targetm.scalar_mode_supported_p (cand1)
- && targetm.libgcc_floating_mode_supported_p (cand1))
+ if (cand1.exists (&mode)
+ && REAL_MODE_FORMAT (mode)->ieee_bits > n
+ && targetm.scalar_mode_supported_p (mode)
+ && targetm.libgcc_floating_mode_supported_p (mode))
return cand1;
- if (cand2 != VOIDmode
- && REAL_MODE_FORMAT (cand2)->ieee_bits > n
- && targetm.scalar_mode_supported_p (cand2)
- && targetm.libgcc_floating_mode_supported_p (cand2))
+ if (cand2.exists (&mode)
+ && REAL_MODE_FORMAT (mode)->ieee_bits > n
+ && targetm.scalar_mode_supported_p (mode)
+ && targetm.libgcc_floating_mode_supported_p (mode))
return cand2;
}
else
{
- machine_mode cand = VOIDmode;
+ opt_scalar_float_mode cand;
+ scalar_float_mode mode;
switch (n)
{
case 16:
@@ -545,13 +547,13 @@ default_floatn_mode (int n, bool extended)
default:
break;
}
- if (cand != VOIDmode
- && REAL_MODE_FORMAT (cand)->ieee_bits == n
- && targetm.scalar_mode_supported_p (cand)
- && targetm.libgcc_floating_mode_supported_p (cand))
+ if (cand.exists (&mode)
+ && REAL_MODE_FORMAT (mode)->ieee_bits == n
+ && targetm.scalar_mode_supported_p (mode)
+ && targetm.libgcc_floating_mode_supported_p (mode))
return cand;
}
- return VOIDmode;
+ return opt_scalar_float_mode ();
}
/* Make some target macros useable by target-independent code. */