diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1993-08-13 14:30:00 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1993-08-13 14:30:00 -0400 |
commit | 23d5d23d23a4f75d7ecbaff702deb77d8fac0f7a (patch) | |
tree | a77f097f4a04b0dbf2bd3c102220c5b41cd7b53e /gcc | |
parent | 842fbaaafeb551c99d19c4be4b3c070edc8247af (diff) | |
download | gcc-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.c | 9 |
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); |