diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4de6391a0f5..96c0e351624 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-07-19 Segher Boessenkool + + PR rtl-optimization/81423 + * combine.c (make_compound_operation_int): Don't try to optimize + the AND of a SUBREG of an LSHIFTRT if that SUBREG is paradoxical. + 2017-07-19 Segher Boessenkool PR rtl-optimization/81423 diff --git a/gcc/combine.c b/gcc/combine.c index c1eec91a5d1..8dc62b57266 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -7956,18 +7956,9 @@ make_compound_operation_int (machine_mode mode, rtx *x_ptr, XEXP (inner_x0, 1), i, 1, 0, in_code == COMPARE); - if (new_rtx) - { - /* If we narrowed the mode when dropping the subreg, then - we must zero-extend to keep the semantics of the AND. */ - if (GET_MODE_SIZE (inner_mode) >= GET_MODE_SIZE (mode)) - ; - else if (SCALAR_INT_MODE_P (inner_mode)) - new_rtx = simplify_gen_unary (ZERO_EXTEND, mode, - new_rtx, inner_mode); - else - new_rtx = NULL; - } + /* If we narrowed the mode when dropping the subreg, then we lose. */ + if (GET_MODE_SIZE (inner_mode) < GET_MODE_SIZE (mode)) + new_rtx = NULL; /* If that didn't give anything, see if the AND simplifies on its own. */