------- Comment #7 from ubizjak at gmail dot com 2009-11-11 10:37 -------
We recurse with:
simplify_replace_fn_rtx called, x =
(expr_list:REG_DEP_TRUE (symbol_ref:DI ("_OtsGeqX") [flags 0x41])
(expr_list:REG_DEP_TRUE (mem:TF (reg/f:DI 75 [ array_3(D)->data ]) [3 S16
A128])
(expr_list:REG_DEP_TRUE (reg:TF 76)
(nil))))
simplify_replace_fn_rtx called, x =
(symbol_ref:DI ("_OtsGeqX") [flags 0x41])
simplify_replace_fn_rtx called, x =
(expr_list:REG_DEP_TRUE (mem:TF (reg/f:DI 75 [ array_3(D)->data ]) [3 S16
A128])
(expr_list:REG_DEP_TRUE (reg:TF 76)
(nil)))
simplify_replace_fn_rtx called, x =
(mem:TF (reg/f:DI 75 [ array_3(D)->data ]) [3 S16 A128])
simplify_replace_fn_rtx called, x =
(reg/f:DI 75 [ array_3(D)->data ])
simplify_replace_fn_rtx called, x =
(expr_list:REG_DEP_TRUE (reg:TF 76)
(nil))
simplify_replace_fn_rtx called, x =
(reg:TF 76)
gcc dies in "case 'e':", recursing with (nil) from:
(expr_list:REG_DEP_TRUE (reg:TF 76)
(nil))
The fix is then trivial, like [no whitespace diff]:
--cut here--
Index: simplify-rtx.c
===================================================================
--- simplify-rtx.c (revision 154088)
+++ simplify-rtx.c (working copy)
@@ -489,6 +489,8 @@ simplify_replace_fn_rtx (rtx x, const_rt
break;
case 'e':
+ if (XEXP (x, i))
+ {
op = simplify_replace_fn_rtx (XEXP (x, i), old_rtx, fn, data);
if (op != XEXP (x, i))
{
@@ -496,6 +498,7 @@ simplify_replace_fn_rtx (rtx x, const_rt
newx = shallow_copy_rtx (x);
XEXP (newx, i) = op;
}
+ }
break;
}
return newx;
--cut here--
--
ubizjak at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |ubizjak at gmail dot com
|dot org |
Status|NEW |ASSIGNED
Last reconfirmed|2009-11-11 10:01:06 |2009-11-11 10:37:52
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41930