[Bug middle-end/17075] [3.5 Regression] galgel crashes if compiled with -foptimize-sibling-calls
steven at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Sun Aug 22 21:54:00 GMT 2004
------- 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
More information about the Gcc-bugs
mailing list