diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2017-08-30 11:11:32 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2017-08-30 11:11:32 +0000 |
commit | 7c61657f68cc45bdbbfcfd762dbfd7021f3acb3f (patch) | |
tree | 983ecb0098267a20b4cb1756c1fd29aebe17c9bd /gcc/loop-invariant.c | |
parent | 64ab8765d7e45ed19d4a571b2aaba0abf7f834c3 (diff) | |
download | gcc-7c61657f68cc45bdbbfcfd762dbfd7021f3acb3f.zip gcc-7c61657f68cc45bdbbfcfd762dbfd7021f3acb3f.tar.gz gcc-7c61657f68cc45bdbbfcfd762dbfd7021f3acb3f.tar.bz2 |
[25/77] Use is_a <scalar_int_mode> for bitmask optimisations
Explicitly check for scalar_int_mode in code that maps arithmetic
to full-mode bit operations. These operations wouldn't work correctly
for vector modes, for example. In many cases this is enforced also by
checking whether an operand is CONST_INT_P, but there were other cases
where the condition is more indirect.
2017-08-30 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* combine.c (combine_simplify_rtx): Add checks for
is_a <scalar_int_mode>.
(simplify_if_then_else): Likewise.
(make_field_assignment): Likewise.
(simplify_comparison): Likewise.
* ifcvt.c (noce_try_bitop): Likewise.
* loop-invariant.c (canonicalize_address_mult): Likewise.
* simplify-rtx.c (simplify_unary_operation_1): Likewise.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r251477
Diffstat (limited to 'gcc/loop-invariant.c')
-rw-r--r-- | gcc/loop-invariant.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/gcc/loop-invariant.c b/gcc/loop-invariant.c index cda42ef..1cdb5cb 100644 --- a/gcc/loop-invariant.c +++ b/gcc/loop-invariant.c @@ -774,16 +774,16 @@ canonicalize_address_mult (rtx x) FOR_EACH_SUBRTX_VAR (iter, array, x, NONCONST) { rtx sub = *iter; - - if (GET_CODE (sub) == ASHIFT + scalar_int_mode sub_mode; + if (is_a <scalar_int_mode> (GET_MODE (sub), &sub_mode) + && GET_CODE (sub) == ASHIFT && CONST_INT_P (XEXP (sub, 1)) - && INTVAL (XEXP (sub, 1)) < GET_MODE_BITSIZE (GET_MODE (sub)) + && INTVAL (XEXP (sub, 1)) < GET_MODE_BITSIZE (sub_mode) && INTVAL (XEXP (sub, 1)) >= 0) { HOST_WIDE_INT shift = INTVAL (XEXP (sub, 1)); PUT_CODE (sub, MULT); - XEXP (sub, 1) = gen_int_mode (HOST_WIDE_INT_1 << shift, - GET_MODE (sub)); + XEXP (sub, 1) = gen_int_mode (HOST_WIDE_INT_1 << shift, sub_mode); iter.skip_subrtxes (); } } |