Commit 7d006b0d by Segher Boessenkool Committed by Segher Boessenkool

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
parent 513ecaea
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> 2015-11-16 Richard Biener <rguenther@suse.de>
PR tree-optimization/68306 PR tree-optimization/68306
...@@ -1462,6 +1462,13 @@ simplify_unary_operation_1 (enum rtx_code code, machine_mode mode, rtx op) ...@@ -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) #if defined(POINTERS_EXTEND_UNSIGNED)
/* As we do not know which address space the pointer is referring to, /* 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 we can do this only if the target does not support different pointer
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment