diff options
author | Jeffrey A Law <law@cygnus.com> | 1999-11-01 06:04:59 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1999-10-31 23:04:59 -0700 |
commit | 36a1fa96c3382e0bdb50036e79bba334bc4b3199 (patch) | |
tree | 580af2d0bced1efa3355f1aa72c6d1f02db2a527 /gcc | |
parent | 64b6368a9ae1bb20ec5d3cae80e4f7ccbfa2b174 (diff) | |
download | gcc-36a1fa96c3382e0bdb50036e79bba334bc4b3199.zip gcc-36a1fa96c3382e0bdb50036e79bba334bc4b3199.tar.gz gcc-36a1fa96c3382e0bdb50036e79bba334bc4b3199.tar.bz2 |
integrate.c (expand_inline_function): Fix bugs in previous change from Oct 28, 1999.
* integrate.c (expand_inline_function): Fix bugs in previous
change from Oct 28, 1999.
From-SVN: r30312
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/integrate.c | 20 |
2 files changed, 17 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bae5847..3e20f164 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Sun Oct 31 23:03:25 1999 Jeffrey A Law (law@cygnus.com) + + * integrate.c (expand_inline_function): Fix bugs in previous + change from Oct 28, 1999. + Sun Oct 31 20:27:45 1999 Mark Mitchell <mark@codesourcery.com> * stmt.c (expand_value_return): Fix typo in this change: diff --git a/gcc/integrate.c b/gcc/integrate.c index c7420ab..3668ab9 100644 --- a/gcc/integrate.c +++ b/gcc/integrate.c @@ -1091,24 +1091,28 @@ expand_inline_function (fndecl, parms, target, ignore, type, else if (set != 0 && rtx_equal_p (SET_DEST (set), virtual_stack_vars_rtx)) { + HOST_WIDE_INT offset; temp = map->reg_map[REGNO (SET_DEST (set))]; temp = VARRAY_CONST_EQUIV (map->const_equiv_varray, REGNO (temp)).rtx; - if (GET_CODE (temp) != PLUS - || ! rtx_equal_p (XEXP (temp, 0), virtual_stack_vars_rtx) - || GET_CODE (XEXP (temp, 1)) != CONST_INT) + if (rtx_equal_p (temp, virtual_stack_vars_rtx)) + offset = 0; + else if (GET_CODE (temp) == PLUS + && rtx_equal_p (XEXP (temp, 0), virtual_stack_vars_rtx) + && GET_CODE (XEXP (temp, 1)) == CONST_INT) + offset = INTVAL (XEXP (temp, 1)); + else abort (); if (rtx_equal_p (SET_SRC (set), stack_pointer_rtx)) temp = SET_SRC (set); else - temp - = force_operand (plus_constant (SET_SRC (set), - - INTVAL (XEXP (temp, 1))), - NULL_RTX); + temp = force_operand (plus_constant (SET_SRC (set), + - offset), + NULL_RTX); - copy = emit_move_insn (SET_DEST (set), temp); + copy = emit_move_insn (virtual_stack_vars_rtx, temp); } else |