* integrate.c (expand_inline_function): Handle CONCAT DECL_RESULT.

From-SVN: r42515
This commit is contained in:
Richard Henderson 2001-05-23 15:53:54 -07:00 committed by Richard Henderson
parent f8710242d3
commit 9688f9ada6
2 changed files with 29 additions and 0 deletions

View File

@ -1,3 +1,7 @@
2001-05-23 Richard Henderson <rth@redhat.com>
* integrate.c (expand_inline_function): Handle CONCAT DECL_RESULT.
2001-05-23 Neil Booth <neil@daikokuya.demon.co.uk>
* cpp.texi: Update for handling of charconsts.

View File

@ -1083,6 +1083,31 @@ expand_inline_function (fndecl, parms, target, ignore, type,
else
map->reg_map[REGNO (loc)] = reg_to_map;
}
else if (GET_CODE (loc) == CONCAT)
{
enum machine_mode departing_mode = TYPE_MODE (type);
enum machine_mode arriving_mode
= GET_MODE (DECL_RTL (DECL_RESULT (fndecl)));
if (departing_mode != arriving_mode)
abort ();
if (GET_CODE (XEXP (loc, 0)) != REG
|| GET_CODE (XEXP (loc, 1)) != REG)
abort ();
/* Don't use MEMs as direct targets because on some machines
substituting a MEM for a REG makes invalid insns.
Let the combiner substitute the MEM if that is valid. */
if (target == 0 || GET_CODE (target) != REG
|| GET_MODE (target) != departing_mode)
target = gen_reg_rtx (departing_mode);
if (GET_CODE (target) != CONCAT)
abort ();
map->reg_map[REGNO (XEXP (loc, 0))] = XEXP (target, 0);
map->reg_map[REGNO (XEXP (loc, 1))] = XEXP (target, 1);
}
else
abort ();