diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1994-08-12 18:59:14 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1994-08-12 18:59:14 -0400 |
commit | 426749e8af8eb4b0838ea81aaa9c41138ff160de (patch) | |
tree | 09267a907a7c02a245b25c1d427be0c7dce2118f | |
parent | a349007c7b27bdedaeffb33f32598d633565d33f (diff) | |
download | gcc-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.c | 9 |
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; |