diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/simplify-rtx.c | 9 |
2 files changed, 15 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 746b08e..4de6391 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-07-19 Segher Boessenkool <segher@kernel.crashing.org> + + PR rtl-optimization/81423 + * simplify-rtx.c (simplify_truncation): Handle truncating an IOR + with a constant that is -1 in the truncated to mode. + 2017-07-19 Jan Hubicka <hubicka@ucw.cz> * predict.c (propagate_unlikely_bbs_forward): Break out from ... diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 3bce329..ef41479 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -857,6 +857,15 @@ simplify_truncation (machine_mode mode, rtx op, return simplify_gen_unary (TRUNCATE, mode, XEXP (op, 0), GET_MODE (XEXP (op, 0))); + /* (truncate:A (ior X C)) is (const_int -1) if C is equal to that already, + in mode A. */ + if (GET_CODE (op) == IOR + && SCALAR_INT_MODE_P (mode) + && SCALAR_INT_MODE_P (op_mode) + && CONST_INT_P (XEXP (op, 1)) + && trunc_int_for_mode (INTVAL (XEXP (op, 1)), mode) == -1) + return constm1_rtx; + return NULL_RTX; } |