From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28841 invoked by alias); 22 Aug 2004 21:54:35 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 28826 invoked by uid 48); 22 Aug 2004 21:54:34 -0000 Date: Sun, 22 Aug 2004 21:54:00 -0000 Message-ID: <20040822215434.28825.qmail@sourceware.org> From: "steven at gcc dot gnu dot org" To: gcc-bugs@gcc.gnu.org In-Reply-To: <20040818091442.17075.lei@il.ibm.com> References: <20040818091442.17075.lei@il.ibm.com> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug middle-end/17075] [3.5 Regression] galgel crashes if compiled with -foptimize-sibling-calls X-Bugzilla-Reason: CC X-SW-Source: 2004-08/txt/msg02221.txt.bz2 List-Id: ------- Additional Comments From steven at gcc dot gnu dot org 2004-08-22 21:54 ------- The problem appears to be that the function result assignment is removed in this part of the patch: + while (NEXT_INSN (last)) + { + /* For instance an sqrt builtin expander expands if with + sibcall in the then and label for `else`. */ + if (LABEL_P (NEXT_INSN (last))) + break; + delete_insn (NEXT_INSN (last)); + } "before" is just before we enter this loop, after is when we've finished the loop: --- before 2004-08-22 23:43:38.188246232 +0200 +++ after 2004-08-22 23:44:31.837195217 +0200 @@ -27,21 +27,9 @@ (nil)) (nil)) -(barrier 17 15 16) +(barrier 17 15 19) -(insn 16 17 18 (parallel [ - (set (reg/f:SI 7 sp) - (plus:SI (reg/f:SI 7 sp) - (const_int 8 [0x8]))) - (clobber (reg:CC 17 flags)) - ]) -1 (nil) - (nil)) - -(insn 18 16 19 (set (reg:DF 61) - (reg:DF 8 st)) -1 (nil) - (nil)) - -(code_label 19 18 20 2 "" [0 uses]) +(code_label 19 17 20 2 "" [0 uses]) (insn 20 19 0 (set (reg:DF 58 [ T.0 ]) (reg:DF 61)) -1 (nil) The result of that loop is that the set for reg 61 is deleted, so that when we do (set (T.0) (reg 61)), nothing has set reg 61 to the function result at that point. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17075