aboutsummaryrefslogtreecommitdiff
path: root/gcc/expmed.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@linaro.org>2017-09-05 19:57:39 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2017-09-05 19:57:39 +0000
commit9da15d4097fa2fde5c2a5f1681db8fd04488a563 (patch)
tree4f9be4daf0cecba38b9ccc0040c50f9f84bf3f6e /gcc/expmed.c
parentddc203a7b15306287792a3eed6abfe306e3d26ad (diff)
downloadgcc-9da15d4097fa2fde5c2a5f1681db8fd04488a563.zip
gcc-9da15d4097fa2fde5c2a5f1681db8fd04488a563.tar.gz
gcc-9da15d4097fa2fde5c2a5f1681db8fd04488a563.tar.bz2
Make mode_for_vector return an opt_mode
...following on from the mode_for_size change. The patch also removes machmode.h versions of the stor-layout.c comments, since the comments in the .c file are more complete. 2017-09-05 Richard Sandiford <richard.sandiford@linaro.org> gcc/ * machmode.h (mode_for_vector): Return an opt_mode. * stor-layout.c (mode_for_vector): Likewise. (mode_for_int_vector): Update accordingly. (layout_type): Likewise. * config/i386/i386.c (emit_memmov): Likewise. (ix86_expand_set_or_movmem): Likewise. (ix86_expand_vector_init): Likewise. (ix86_get_mask_mode): Likewise. * config/powerpcspe/powerpcspe.c (rs6000_expand_vec_perm_const_1): Likewise. * config/rs6000/rs6000.c (rs6000_expand_vec_perm_const_1): Likewise. * expmed.c (extract_bit_field_1): Likewise. * expr.c (expand_expr_real_2): Likewise. * optabs-query.c (can_vec_perm_p): Likewise. (can_vec_mask_load_store_p): Likewise. * optabs.c (expand_vec_perm): Likewise. * targhooks.c (default_get_mask_mode): Likewise. * tree-vect-stmts.c (vectorizable_store): Likewise. (vectorizable_load): Likewise. (get_vectype_for_scalar_type_and_size): Likewise. From-SVN: r251730
Diffstat (limited to 'gcc/expmed.c')
-rw-r--r--gcc/expmed.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/gcc/expmed.c b/gcc/expmed.c
index 894e369..7f0cb0a 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -1578,10 +1578,11 @@ extract_bit_field_1 (rtx str_rtx, unsigned HOST_WIDE_INT bitsize,
machine_mode new_mode = GET_MODE (op0);
if (GET_MODE_INNER (new_mode) != GET_MODE_INNER (tmode))
{
- new_mode = mode_for_vector (GET_MODE_INNER (tmode),
- GET_MODE_BITSIZE (GET_MODE (op0))
- / GET_MODE_UNIT_BITSIZE (tmode));
- if (!VECTOR_MODE_P (new_mode)
+ scalar_mode inner_mode = GET_MODE_INNER (tmode);
+ unsigned int nunits = (GET_MODE_BITSIZE (GET_MODE (op0))
+ / GET_MODE_UNIT_BITSIZE (tmode));
+ if (!mode_for_vector (inner_mode, nunits).exists (&new_mode)
+ || !VECTOR_MODE_P (new_mode)
|| GET_MODE_SIZE (new_mode) != GET_MODE_SIZE (GET_MODE (op0))
|| GET_MODE_INNER (new_mode) != GET_MODE_INNER (tmode)
|| !targetm.vector_mode_supported_p (new_mode))