aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2004-03-04 14:03:02 -0500
committerDJ Delorie <dj@gcc.gnu.org>2004-03-04 14:03:02 -0500
commit58f206d65d331d1e19f6d9e0a7851381861e113d (patch)
tree2458692ef3527d5fd22f85be7644cb5e06383a05 /gcc
parente9eba25540d02efc8ccbf450be20d3d874c36846 (diff)
downloadgcc-58f206d65d331d1e19f6d9e0a7851381861e113d.zip
gcc-58f206d65d331d1e19f6d9e0a7851381861e113d.tar.gz
gcc-58f206d65d331d1e19f6d9e0a7851381861e113d.tar.bz2
re PR rtl-optimization/14282 (ICE in sh-elf-gcc with -m4-single-only and -O2)
PR optimization/14282 * sched-deps.c (sched_analyze_insn): Allow a stack adjustment between a call and the assignment of its return value. From-SVN: r78925
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/sched-deps.c8
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 03a47a3..4f53e6b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2004-03-04 DJ Delorie <dj@redhat.com>
+
+ PR optimization/14282
+ * sched-deps.c (sched_analyze_insn): Allow a stack adjustment
+ between a call and the assignment of its return value.
+
2004-03-04 Kazu Hirata <kazu@cs.umass.edu>
* config/h8300/h8300.c: Put a comment for every function.
diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c
index 754142f..ad96281 100644
--- a/gcc/sched-deps.c
+++ b/gcc/sched-deps.c
@@ -1127,7 +1127,13 @@ sched_analyze_insn (struct deps *deps, rtx x, rtx insn, rtx loop_notes)
tmp = SET_SRC (set);
if (GET_CODE (tmp) == SUBREG)
tmp = SUBREG_REG (tmp);
- if (GET_CODE (tmp) == REG)
+ if ((GET_CODE (tmp) == PLUS
+ || GET_CODE (tmp) == MINUS)
+ && GET_CODE (XEXP (tmp, 0)) == REG
+ && REGNO (XEXP (tmp, 0)) == STACK_POINTER_REGNUM
+ && dest_regno == STACK_POINTER_REGNUM)
+ src_regno = STACK_POINTER_REGNUM;
+ else if (GET_CODE (tmp) == REG)
src_regno = REGNO (tmp);
else
goto end_call_group;