diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2018-01-03 21:42:42 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2018-01-03 21:42:42 +0000 |
commit | 73a699ae37a7fe98ad0b8c50ac95f5a882fd97da (patch) | |
tree | 00d1721d088da7634f082a1092a670af7ff12469 /gcc/expmed.c | |
parent | 79c3f1b3c7e8af1ce1b634326fafe772c4106484 (diff) | |
download | gcc-73a699ae37a7fe98ad0b8c50ac95f5a882fd97da.zip gcc-73a699ae37a7fe98ad0b8c50ac95f5a882fd97da.tar.gz gcc-73a699ae37a7fe98ad0b8c50ac95f5a882fd97da.tar.bz2 |
poly_int: GET_MODE_BITSIZE
This patch changes GET_MODE_BITSIZE from an unsigned short
to a poly_uint16.
2018-01-03 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* machmode.h (mode_to_bits): Return a poly_uint16 rather than an
unsigned short.
(GET_MODE_BITSIZE): Return a constant if ONLY_FIXED_SIZE_MODES,
or if measurement_type is polynomial.
* calls.c (shift_return_value): Treat GET_MODE_BITSIZE as polynomial.
* combine.c (make_extraction): Likewise.
* dse.c (find_shift_sequence): Likewise.
* dwarf2out.c (mem_loc_descriptor): Likewise.
* expmed.c (store_integral_bit_field, extract_bit_field_1): Likewise.
(extract_bit_field, extract_low_bits): Likewise.
* expr.c (convert_move, convert_modes, emit_move_insn_1): Likewise.
(optimize_bitfield_assignment_op, expand_assignment): Likewise.
(store_expr_with_bounds, store_field, expand_expr_real_1): Likewise.
* fold-const.c (optimize_bit_field_compare, merge_ranges): Likewise.
* gimple-fold.c (optimize_atomic_compare_exchange_p): Likewise.
* reload.c (find_reloads): Likewise.
* reload1.c (alter_reg): Likewise.
* stor-layout.c (bitwise_mode_for_mode, compute_record_mode): Likewise.
* targhooks.c (default_secondary_memory_needed_mode): Likewise.
* tree-if-conv.c (predicate_mem_writes): Likewise.
* tree-ssa-strlen.c (handle_builtin_memcmp): Likewise.
* tree-vect-patterns.c (adjust_bool_pattern): Likewise.
* tree-vect-stmts.c (vectorizable_simd_clone_call): Likewise.
* valtrack.c (dead_debug_insert_temp): Likewise.
* varasm.c (mergeable_constant_section): Likewise.
* config/sh/sh.h (LOCAL_ALIGNMENT): Use as_a <fixed_size_mode>.
gcc/ada/
* gcc-interface/misc.c (enumerate_modes): Treat GET_MODE_BITSIZE
as polynomial.
gcc/c-family/
* c-ubsan.c (ubsan_instrument_shift): Treat GET_MODE_BITSIZE
as polynomial.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r256200
Diffstat (limited to 'gcc/expmed.c')
-rw-r--r-- | gcc/expmed.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/gcc/expmed.c b/gcc/expmed.c index be6a138..ed21b27 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -867,7 +867,7 @@ store_integral_bit_field (rtx op0, opt_scalar_int_mode op0_mode, if (!MEM_P (op0) && !reverse && lowpart_bit_field_p (bitnum, bitsize, op0_mode.require ()) - && bitsize == GET_MODE_BITSIZE (fieldmode) + && known_eq (bitsize, GET_MODE_BITSIZE (fieldmode)) && optab_handler (movstrict_optab, fieldmode) != CODE_FOR_nothing) { struct expand_operand ops[2]; @@ -1638,9 +1638,10 @@ extract_bit_field_1 (rtx str_rtx, poly_uint64 bitsize, poly_uint64 bitnum, if (GET_MODE_INNER (new_mode) != GET_MODE_INNER (tmode)) { 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) + poly_uint64 nunits; + if (!multiple_p (GET_MODE_BITSIZE (GET_MODE (op0)), + GET_MODE_UNIT_BITSIZE (tmode), &nunits) + || !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) @@ -2043,9 +2044,9 @@ extract_bit_field (rtx str_rtx, poly_uint64 bitsize, poly_uint64 bitnum, machine_mode mode1; /* Handle -fstrict-volatile-bitfields in the cases where it applies. */ - if (GET_MODE_BITSIZE (GET_MODE (str_rtx)) > 0) + if (maybe_ne (GET_MODE_BITSIZE (GET_MODE (str_rtx)), 0)) mode1 = GET_MODE (str_rtx); - else if (target && GET_MODE_BITSIZE (GET_MODE (target)) > 0) + else if (target && maybe_ne (GET_MODE_BITSIZE (GET_MODE (target)), 0)) mode1 = GET_MODE (target); else mode1 = tmode; @@ -2361,7 +2362,7 @@ extract_low_bits (machine_mode mode, machine_mode src_mode, rtx src) if (GET_MODE_CLASS (mode) == MODE_CC || GET_MODE_CLASS (src_mode) == MODE_CC) return NULL_RTX; - if (GET_MODE_BITSIZE (mode) == GET_MODE_BITSIZE (src_mode) + if (known_eq (GET_MODE_BITSIZE (mode), GET_MODE_BITSIZE (src_mode)) && targetm.modes_tieable_p (mode, src_mode)) { rtx x = gen_lowpart_common (mode, src); |