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