This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/17075] [3.5 Regression] galgel crashes if compiled with -foptimize-sibling-calls
- From: "steven at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 22 Aug 2004 21:54:34 -0000
- Subject: [Bug middle-end/17075] [3.5 Regression] galgel crashes if compiled with -foptimize-sibling-calls
- References: <20040818091442.17075.lei@il.ibm.com>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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