[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