diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/combine.c | 15 |
2 files changed, 9 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4de6391..96c0e35 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-07-19 Segher Boessenkool <segher@kernel.crashing.org> + + 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 <segher@kernel.crashing.org> PR rtl-optimization/81423 diff --git a/gcc/combine.c b/gcc/combine.c index c1eec91..8dc62b5 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. */ |