From 6f7e2c0c96d06c08555d84dadda568a01ff6a79c Mon Sep 17 00:00:00 2001 From: Roger Sayle <roger@eyesopen.com> Date: Tue, 14 Jun 2005 05:57:26 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 7 +++++++ gcc/reg-stack.c | 5 +++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ee9433529e12..5e2d4deb31d5 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 7007fcb2bd60..7ee3be2d0106 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; } -- GitLab