aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-08-12 18:59:14 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-08-12 18:59:14 -0400
commit426749e8af8eb4b0838ea81aaa9c41138ff160de (patch)
tree09267a907a7c02a245b25c1d427be0c7dce2118f
parenta349007c7b27bdedaeffb33f32598d633565d33f (diff)
downloadgcc-426749e8af8eb4b0838ea81aaa9c41138ff160de.zip
gcc-426749e8af8eb4b0838ea81aaa9c41138ff160de.tar.gz
gcc-426749e8af8eb4b0838ea81aaa9c41138ff160de.tar.bz2
(expand_function_start): Add redundant copy to static_chain_incoming_rtx if...
(expand_function_start): Add redundant copy to static_chain_incoming_rtx if SMALL_REGISTER_CLASS so inlining works properly. From-SVN: r7909
-rw-r--r--gcc/function.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/function.c b/gcc/function.c
index e482f1d..947972f 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -4972,11 +4972,14 @@ expand_function_start (subr, parms_have_cleanups)
if (tem && ! obey_regdecls)
{
#ifdef SMALL_REGISTER_CLASSES
+ /* If the static chain originally came in a register, put it back
+ there, then move it out in the next insn. The reason for
+ this peculiar code is to satisfy function integration. */
if (GET_CODE (static_chain_incoming_rtx) == REG)
- last_ptr = copy_to_reg (last_ptr);
- else
+ emit_move_insn (static_chain_incoming_rtx, last_ptr);
#endif
- last_ptr = copy_to_reg (static_chain_incoming_rtx);
+
+ last_ptr = copy_to_reg (static_chain_incoming_rtx);
}
context_display = 0;