aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2005-06-14 05:57:26 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2005-06-14 05:57:26 +0000
commit6f7e2c0c96d06c08555d84dadda568a01ff6a79c (patch)
tree4e2a3aedbd40e21bd136b4bf24914c6fa0844132 /gcc
parentad1f3d7a3424b7b3ee6d4ae0e51288035fffe07a (diff)
downloadgcc-6f7e2c0c96d06c08555d84dadda568a01ff6a79c.zip
gcc-6f7e2c0c96d06c08555d84dadda568a01ff6a79c.tar.gz
gcc-6f7e2c0c96d06c08555d84dadda568a01ff6a79c.tar.bz2
re PR rtl-optimization/22053 (ACATS ICE cxg2002 cxg2008 cxg2019 cxg2020 cxg2021 compensate_edge, at reg-stack.c:2671)
PR rtl-optimization/22053 * reg-stack.c (compensate_edge): Correct mistake in the assertion checking of EDGE_ABNORMAL_CALL edges; complex return values can result in the top two stack slots, st(0) and st(1), being live. From-SVN: r100926
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/reg-stack.c5
2 files changed, 10 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ee94335..5e2d4de 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2005-06-13 Roger Sayle <roger@eyesopen.com>
+
+ PR rtl-optimization/22053
+ * reg-stack.c (compensate_edge): Correct mistake in the assertion
+ checking of EDGE_ABNORMAL_CALL edges; complex return values can
+ result in the top two stack slots, st(0) and st(1), being live.
+
2005-06-13 Jeff Law <law@redhat.com>
* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): No longer
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c
index 7007fcb..7ee3be2 100644
--- a/gcc/reg-stack.c
+++ b/gcc/reg-stack.c
@@ -2667,8 +2667,9 @@ compensate_edge (edge e, FILE *file)
{
/* Assert that the lifetimes are as we expect -- one value
live at st(0) on the end of the source block, and no
- values live at the beginning of the destination block. */
- gcc_assert (source_stack->top == 0);
+ values live at the beginning of the destination block.
+ For complex return values, we may have st(1) live as well. */
+ gcc_assert (source_stack->top == 0 || source_stack->top == 1);
gcc_assert (target_stack->top == -1);
return false;
}