simplify-rtx: Simplify sign_extend of lshiftrt to zero_extend (PR68330)
Since r230164, in PR68330 combine ends up with a sign_extend of an lshiftrt by some constant, and it does not know to morph that into a zero_extract (the extend will always extend with zeroes). I think it is best to let simplify-rtx always replace such a sign_extend by a zero_extend, after which everything works as expected. 2015-11-15 Segher Boessenkool <segher@kernel.crashing.org> PR rtl-optimization/68330 * simplify-rtx.c (simplify_unary_operation_1): Simplify SIGN_EXTEND of LSHIFTRT by a non-zero constant integer. From-SVN: r230429
This commit is contained in:
parent
513ecaea6f
commit
7d006b0d34
2 changed files with 13 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
2015-11-16 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
|
||||
PR rtl-optimization/68330
|
||||
* simplify-rtx.c (simplify_unary_operation_1): Simplify SIGN_EXTEND
|
||||
of LSHIFTRT by a non-zero constant integer.
|
||||
|
||||
2015-11-16 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/68306
|
||||
|
|
|
@ -1462,6 +1462,13 @@ simplify_unary_operation_1 (enum rtx_code code, machine_mode mode, rtx op)
|
|||
}
|
||||
}
|
||||
|
||||
/* (sign_extend:M (lshiftrt:N <X> (const_int I))) is better as
|
||||
(zero_extend:M (lshiftrt:N <X> (const_int I))) if I is not 0. */
|
||||
if (GET_CODE (op) == LSHIFTRT
|
||||
&& CONST_INT_P (XEXP (op, 1))
|
||||
&& XEXP (op, 1) != const0_rtx)
|
||||
return simplify_gen_unary (ZERO_EXTEND, mode, op, GET_MODE (op));
|
||||
|
||||
#if defined(POINTERS_EXTEND_UNSIGNED)
|
||||
/* As we do not know which address space the pointer is referring to,
|
||||
we can do this only if the target does not support different pointer
|
||||
|
|
Loading…
Add table
Reference in a new issue