Cope with inlining functions which return a multiword CONCAT value
From-SVN: r24328
This commit is contained in:
parent
c49445e001
commit
ddc54eaa30
|
@ -1,3 +1,13 @@
|
|||
Tue Dec 15 11:55:30 1998 Nick Clifton <nickc@cygnus.com>
|
||||
|
||||
* integrate.c (copy_rtx_and_substitute): If a SUBREG is
|
||||
replaced by a CONCAT whoes components do not have the same
|
||||
mode as the original SUBREG, use a new SUBREG to restore the
|
||||
mode.
|
||||
|
||||
* emit-rtl.c (subreg_realpart_p): Cope with subregs containing
|
||||
multiword complex values.
|
||||
|
||||
1998-12-15 Zack Weinberg <zack@rabi.phys.columbia.edu>
|
||||
|
||||
* cppalloc.c: Add xstrdup here.
|
||||
|
|
|
@ -942,7 +942,7 @@ subreg_realpart_p (x)
|
|||
if (GET_CODE (x) != SUBREG)
|
||||
abort ();
|
||||
|
||||
return SUBREG_WORD (x) == 0;
|
||||
return SUBREG_WORD (x) * UNITS_PER_WORD < GET_MODE_UNIT_SIZE (GET_MODE (SUBREG_REG (x)));
|
||||
}
|
||||
|
||||
/* Assuming that X is an rtx (e.g., MEM, REG or SUBREG) for a value,
|
||||
|
|
|
@ -2451,7 +2451,17 @@ copy_rtx_and_substitute (orig, map)
|
|||
return gen_rtx_SUBREG (GET_MODE (orig), SUBREG_REG (copy),
|
||||
SUBREG_WORD (orig) + SUBREG_WORD (copy));
|
||||
else if (GET_CODE (copy) == CONCAT)
|
||||
return (subreg_realpart_p (orig) ? XEXP (copy, 0) : XEXP (copy, 1));
|
||||
{
|
||||
rtx retval = subreg_realpart_p (orig) ? XEXP (copy, 0) : XEXP (copy, 1);
|
||||
|
||||
if (GET_MODE (retval) == GET_MODE (orig))
|
||||
return retval;
|
||||
else
|
||||
return gen_rtx_SUBREG (GET_MODE (orig), retval,
|
||||
(SUBREG_WORD (orig) %
|
||||
(GET_MODE_UNIT_SIZE (GET_MODE (SUBREG_REG (orig)))
|
||||
/ (unsigned) UNITS_PER_WORD)));
|
||||
}
|
||||
else
|
||||
return gen_rtx_SUBREG (GET_MODE (orig), copy,
|
||||
SUBREG_WORD (orig));
|
||||
|
|
Loading…
Reference in New Issue