On 07/13/2017 02:48 AM, Richard Sandiford wrote:
> This patch adds is_a <scalar_int_mode> checks to various places that
> were optimising subregs or extractions in ways that only made sense
> for scalar integers.  Often the subreg transformations were looking
> for extends, truncates or shifts and trying to remove the subreg, which
> wouldn't be correct if the SUBREG_REG was a vector rather than a scalar.
> 
> The simplify_binary_operation_1 part also removes a redundant:
> 
>   GET_MODE (opleft) == GET_MODE (XEXP (opright, 0))
> 
> since this must be true for:
> 
>   (ior A (lshifrt B ...))  A == opleft, B == XEXP (opright, 0)
> 
> 2017-07-13  Richard Sandiford  <richard.sandif...@linaro.org>
>           Alan Hayward  <alan.hayw...@arm.com>
>           David Sherwood  <david.sherw...@arm.com>
> 
> gcc/
>       * combine.c (find_split_point): Add is_a <scalar_int_mode> checks.
>       (make_compound_operation_int): Likewise.
>       (change_zero_ext): Likewise.
>       * expr.c (convert_move): Likewise.
>       (convert_modes): Likewise.
>       * fwprop.c (forward_propagate_subreg): Likewise.
>       * loop-iv.c (get_biv_step_1): Likewise.
>       * optabs.c (widen_operand): Likewise.
>       * postreload.c (move2add_valid_value_p): Likewise.
>       * recog.c (simplify_while_replacing): Likewise.
>       * simplify-rtx.c (simplify_unary_operation_1): Likewise.
>       (simplify_binary_operation_1): Likewise.  Remove redundant
>       mode equality check.
> 
OK.
jeff

Reply via email to