diff options
author | Jeffrey A Law <law@cygnus.com> | 1999-08-30 07:05:29 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1999-08-30 01:05:29 -0600 |
commit | f83a09927c55b74be89ec85a0d98b3aab4846812 (patch) | |
tree | 181140c567be541bcd9d2e6082e168f6940ae3b4 /gcc/integrate.c | |
parent | 08017b74f3b9f1b88013d61db295bd50e8b5f113 (diff) | |
download | gcc-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.c | 9 |
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. */ |