aboutsummaryrefslogtreecommitdiff
path: root/gcc/integrate.c
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1999-08-30 07:05:29 +0000
committerJeff Law <law@gcc.gnu.org>1999-08-30 01:05:29 -0600
commitf83a09927c55b74be89ec85a0d98b3aab4846812 (patch)
tree181140c567be541bcd9d2e6082e168f6940ae3b4 /gcc/integrate.c
parent08017b74f3b9f1b88013d61db295bd50e8b5f113 (diff)
downloadgcc-f83a09927c55b74be89ec85a0d98b3aab4846812.zip
gcc-f83a09927c55b74be89ec85a0d98b3aab4846812.tar.gz
gcc-f83a09927c55b74be89ec85a0d98b3aab4846812.tar.bz2
integrate.c (copy_rtx_and_substitute): Handle internal_arg_pointer just like we would the virtual incoming args...
* integrate.c (copy_rtx_and_substitute): Handle internal_arg_pointer just like we would the virtual incoming args register when integrating. From-SVN: r28980
Diffstat (limited to 'gcc/integrate.c')
-rw-r--r--gcc/integrate.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/integrate.c b/gcc/integrate.c
index b59518e..b3e681c 100644
--- a/gcc/integrate.c
+++ b/gcc/integrate.c
@@ -2291,7 +2291,9 @@ copy_rtx_and_substitute (orig, map)
Small hard registers are returned as-is. Pseudo-registers
go through their `reg_map'. */
regno = REGNO (orig);
- if (regno <= LAST_VIRTUAL_REGISTER)
+ if (regno <= LAST_VIRTUAL_REGISTER
+ || (map->integrating
+ && DECL_SAVED_INSNS (map->fndecl)->internal_arg_pointer == orig))
{
/* Some hard registers are also mapped,
but others are not translated. */
@@ -2342,7 +2344,10 @@ copy_rtx_and_substitute (orig, map)
emit_insn_after (seq, map->insns_at_start);
return temp;
}
- else if (regno == VIRTUAL_INCOMING_ARGS_REGNUM)
+ else if (regno == VIRTUAL_INCOMING_ARGS_REGNUM
+ || (map->integrating
+ && (DECL_SAVED_INSNS (map->fndecl)->internal_arg_pointer
+ == orig)))
{
/* Do the same for a block to contain any arguments referenced
in memory. */