aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1999-11-01 06:04:59 +0000
committerJeff Law <law@gcc.gnu.org>1999-10-31 23:04:59 -0700
commit36a1fa96c3382e0bdb50036e79bba334bc4b3199 (patch)
tree580af2d0bced1efa3355f1aa72c6d1f02db2a527 /gcc
parent64b6368a9ae1bb20ec5d3cae80e4f7ccbfa2b174 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/integrate.c20
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