simplify-rtx.c (simplify_subreg): Use the correct mode when determining whether a SUBREG of a CONCAT refers to...

* simplify-rtx.c (simplify_subreg): Use the correct mode when
	determining whether a SUBREG of a CONCAT refers to the first or
	second component.

From-SVN: r120101
This commit is contained in:
Roger Sayle 2006-12-21 04:35:05 +00:00 committed by Roger Sayle
parent 128ccfb078
commit a957d77fc3
2 changed files with 20 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2006-12-20 Roger Sayle <roger@eyesopen.com>
* simplify-rtx.c (simplify_subreg): Use the correct mode when
determining whether a SUBREG of a CONCAT refers to the first or
second component.
2006-12-21 Ben Elliston <bje@au.ibm.com>
* config/spu/spu.c (spu_builtin_mul_widen_even): Remove unused

View File

@ -4648,13 +4648,22 @@ simplify_subreg (enum machine_mode outermode, rtx op,
of real and imaginary part. */
if (GET_CODE (op) == CONCAT)
{
unsigned int inner_size, final_offset;
unsigned int part_size, final_offset;
rtx part, res;
inner_size = GET_MODE_UNIT_SIZE (innermode);
part = byte < inner_size ? XEXP (op, 0) : XEXP (op, 1);
final_offset = byte % inner_size;
if (final_offset + GET_MODE_SIZE (outermode) > inner_size)
part_size = GET_MODE_UNIT_SIZE (GET_MODE (XEXP (op, 0)));
if (byte < part_size)
{
part = XEXP (op, 0);
final_offset = byte;
}
else
{
part = XEXP (op, 1);
final_offset = byte - part_size;
}
if (final_offset + GET_MODE_SIZE (outermode) > part_size)
return NULL_RTX;
res = simplify_subreg (outermode, part, GET_MODE (part), final_offset);