aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-08-13 14:30:00 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1993-08-13 14:30:00 -0400
commit23d5d23d23a4f75d7ecbaff702deb77d8fac0f7a (patch)
treea77f097f4a04b0dbf2bd3c102220c5b41cd7b53e /gcc
parent842fbaaafeb551c99d19c4be4b3c070edc8247af (diff)
downloadgcc-23d5d23d23a4f75d7ecbaff702deb77d8fac0f7a.zip
gcc-23d5d23d23a4f75d7ecbaff702deb77d8fac0f7a.tar.gz
gcc-23d5d23d23a4f75d7ecbaff702deb77d8fac0f7a.tar.bz2
(expand_inline_function): Copy args that are in hard regs instead of
substiting them directly into insns. From-SVN: r5154
Diffstat (limited to 'gcc')
-rw-r--r--gcc/integrate.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/integrate.c b/gcc/integrate.c
index 894a938..bb48c28 100644
--- a/gcc/integrate.c
+++ b/gcc/integrate.c
@@ -1390,11 +1390,16 @@ expand_inline_function (fndecl, parms, target, ignore, type, structure_value_add
constant equivalence.
If LOC is REG_USERVAR_P, the usual case, COPY must also have
- that flag set if it is a register. */
+ that flag set if it is a register.
+
+ Also, don't allow hard registers here; they might not be valid
+ when substituted into insns. */
if ((GET_CODE (copy) != REG && GET_CODE (copy) != SUBREG)
|| (GET_CODE (copy) == REG && REG_USERVAR_P (loc)
- && ! REG_USERVAR_P (copy)))
+ && ! REG_USERVAR_P (copy))
+ || (GET_CODE (copy) == REG
+ && REGNO (copy) < FIRST_PSEUDO_REGISTER))
{
temp = copy_to_mode_reg (GET_MODE (loc), copy);
REG_USERVAR_P (temp) = REG_USERVAR_P (loc);