Commit e4d60406 by Dominik Vogt Committed by Segher Boessenkool

combine: Handle mode expanding zero_extracts in change_zero_ext.

Example:

  (zero_extract:DI (reg:SI)
                   (const_int 24)
                   (const_int 0))

-->

  (and:DI (subreg:DI (lshiftrt:SI (reg:SI) (const_int 8))
                     0)
          (const_int 16777215))


2016-12-12  Dominik Vogt  <vogt@linux.vnet.ibm.com>

	* combine.c (change_zero_ext): Handle mode expanding zero_extracts.

From-SVN: r243578
parent fe366b87
2016-12-12 Dominik Vogt <vogt@linux.vnet.ibm.com>
* combine.c (change_zero_ext): Handle mode expanding zero_extracts.
2016-12-12 Uros Bizjak <ubizjak@gmail.com>
PR target/78738
......@@ -11237,18 +11237,24 @@ change_zero_ext (rtx pat)
if (GET_CODE (x) == ZERO_EXTRACT
&& CONST_INT_P (XEXP (x, 1))
&& CONST_INT_P (XEXP (x, 2))
&& GET_MODE (XEXP (x, 0)) == mode)
&& GET_MODE (XEXP (x, 0)) != VOIDmode
&& GET_MODE_PRECISION (GET_MODE (XEXP (x, 0)))
<= GET_MODE_PRECISION (mode))
{
machine_mode inner_mode = GET_MODE (XEXP (x, 0));
size = INTVAL (XEXP (x, 1));
int start = INTVAL (XEXP (x, 2));
if (BITS_BIG_ENDIAN)
start = GET_MODE_PRECISION (mode) - size - start;
start = GET_MODE_PRECISION (inner_mode) - size - start;
if (start)
x = gen_rtx_LSHIFTRT (mode, XEXP (x, 0), GEN_INT (start));
x = gen_rtx_LSHIFTRT (inner_mode, XEXP (x, 0), GEN_INT (start));
else
x = XEXP (x, 0);
if (mode != inner_mode)
x = gen_lowpart_SUBREG (mode, x);
}
else if (GET_CODE (x) == ZERO_EXTEND
&& SCALAR_INT_MODE_P (mode)
......
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