On Sat, Apr 18, 2009 at 7:01 PM, Dave Korn <dave.korn.cyg...@googlemail.com> wrote: > > Hi, > > I'm getting a stack overflow caused by *very* deep recursion while trying to > build gnu/javax/swing/text/html/parser/HTML_401F.o in libjava, bootstrapping > HEAD on i686-pc-cygwin. > > With the default per-thread stack size of 2MB, it crashes in > tree_ssa_phiprop_1(), which by the time of the crash has recursed to a depth > that I can actually honestly describe as "OVER 9000"! If I boost the stack to > 4MB, I find that the recursion does actually bottom out at some point, since > the compile completes, but I tested at 3MB and it crashed at a recursion depth > of 13924. > > I know that boostrapping libjava is a tough job and pretty intensive on > memory demands, but is this level of nesting actually to be expected, or has > something gone astray?
Well, this is one of the usual ways of iterating over the CFG, so this is certainly not unexpected. Maybe for some reason gsi is not scalarized and stack usage of that function is unusually high? Richard. > cheers, > DaveK > -- > Breakpoint 1, tree_ssa_phiprop_1 (bb=0x7efd0580, phivn=0x3d3c9a8, n=150236) > at /gnu/gcc/gcc/gcc/tree-ssa-phiprop.c:333 > 333 { > (gdb) bt -13 > #9198 0x007e069c in tree_ssa_phiprop_1 (bb=<value optimized out>, > phivn=<value optimized out>, n=150236) > at /gnu/gcc/gcc/gcc/tree-ssa-phiprop.c:344 > #9199 0x007e069c in tree_ssa_phiprop_1 (bb=<value optimized out>, > phivn=<value optimized out>, n=150236) > at /gnu/gcc/gcc/gcc/tree-ssa-phiprop.c:344 > #9200 0x007e069c in tree_ssa_phiprop_1 (bb=<value optimized out>, > phivn=<value optimized out>, n=150236) > at /gnu/gcc/gcc/gcc/tree-ssa-phiprop.c:344 > #9201 0x007e1063 in tree_ssa_phiprop () > at /gnu/gcc/gcc/gcc/tree-ssa-phiprop.c:360 > #9202 0x0053d646 in execute_one_pass (pass=<value optimized out>) > at /gnu/gcc/gcc/gcc/passes.c:1290 > #9203 0x0053d8ac in execute_pass_list (pass=0xbb4b80) > at /gnu/gcc/gcc/gcc/passes.c:1339 > #9204 0x0053d8bf in execute_pass_list (pass=0xbb3e60) > at /gnu/gcc/gcc/gcc/passes.c:1340 > #9205 0x0079f5e0 in tree_rest_of_compilation (fndecl=0x7ff72c80) > at /gnu/gcc/gcc/gcc/tree-optimize.c:437 > #9206 0x005b8bc5 in cgraph_expand_function (node=0x7ff74c00) > at /gnu/gcc/gcc/gcc/cgraphunit.c:1048 > #9207 0x005ba950 in cgraph_optimize () at /gnu/gcc/gcc/gcc/cgraphunit.c:1107 > #9208 0x00443e4a in java_parse_file (set_yydebug=0) > at /gnu/gcc/gcc/gcc/java/jcf-parse.c:1987 > #9209 0x00475b64 in toplev_main (argc=32, argv=0x2f19be8) > at /gnu/gcc/gcc/gcc/toplev.c:976 > #9210 0x0044e2f0 in main (argc=32, argv=0x2f19be8) > at /gnu/gcc/gcc/gcc/main.c:35 > (gdb) print *bb > $1 = {preds = 0x7d1e2920, succs = 0x7d1e2980, aux = 0x0, loop_father = 0x0, > dom = {0x3b3c798, 0x0}, prev_bb = 0x7efd0540, next_bb = 0x7efd05c0, il = { > gimple = 0x7f10ba80, rtl = 0x7f10ba80}, count = 0, index = 18400, > loop_depth = 0, frequency = 252, flags = 3} > (gdb) print *bb->dom[0] > $2 = {data = 0x7efd0580, dfs_num_in = 9200, dfs_num_out = 34433, > father = 0x3b3c738, son = 0x3b3c7f8, left = 0x3b3c768, right = 0x3b3c768, > rightmost_occ = 0x3b3fcd0, parent_occ = 0x3768630} > (gdb) print *bb->dom[0]->son > $3 = {data = 0x7efd0600, dfs_num_in = 9201, dfs_num_out = 34430, > father = 0x3b3c798, son = 0x3b3c858, left = 0x3b3c7c8, right = 0x3b3c7c8, > rightmost_occ = 0x3b3fd20, parent_occ = 0x3768680} > (gdb) print *bb->dom[0]->son->son > $4 = {data = 0x7efd0700, dfs_num_in = 9202, dfs_num_out = 34427, > father = 0x3b3c7f8, son = 0x3b3c8b8, left = 0x3b3c828, right = 0x3b3c828, > rightmost_occ = 0x3b3fd70, parent_occ = 0x37686d0} > (gdb) print *bb->dom[0]->son->son->son > $5 = {data = 0x7efd07c0, dfs_num_in = 9203, dfs_num_out = 34424, > father = 0x3b3c858, son = 0x3b3c918, left = 0x3b3c888, right = 0x3b3c888, > rightmost_occ = 0x3b3fdc0, parent_occ = 0x3768720} > (gdb) print *bb->dom[0]->son->son->son->son > $6 = {data = 0x7efd0840, dfs_num_in = 9204, dfs_num_out = 34421, > father = 0x3b3c8b8, son = 0x3b3c978, left = 0x3b3c8e8, right = 0x3b3c8e8, > rightmost_occ = 0x3b3fe10, parent_occ = 0x3768770} > (gdb) print *bb->dom[0]->son->son->son->son->son->son->son->son->son->son->son > ->son > $7 = {data = 0x7efd0e80, dfs_num_in = 9212, dfs_num_out = 34397, > father = 0x3b3cbb8, son = 0x3b3cc78, left = 0x3b3cbe8, right = 0x3b3cbe8, > rightmost_occ = 0x3b40090, parent_occ = 0x37689f0} > (gdb) print *bb->dom[0]->son->son->son->son->son->son->son->son->son->son->son > ->son->son->son->son->son->son->son->son->son->son->son->son->son > $8 = {data = 0x7efd1780, dfs_num_in = 9224, dfs_num_out = 34361, > father = 0x3b3d038, son = 0x3b3d0f8, left = 0x3b3d068, right = 0x3b3d068, > rightmost_occ = 0x3b40450, parent_occ = 0x3768db0} > (gdb) print *bb->dom[0]->son->son->son->son->son->son->son->son->son->son->son > ->son->son->son->son->son->son->son->son->son->son->son->son->son->son->son->s > on->son->son->son->son->son->son->son->son->son->son->son->son->son->son->son- >>son->son->son->son->son->son->son->son->son->son->son->son->son->son > $9 = {data = 0x7efd2f80, dfs_num_in = 9256, dfs_num_out = 34265, > father = 0x3b3dc38, son = 0x3b3dcf8, left = 0x3b3dc68, right = 0x3b3dc68, > rightmost_occ = 0x3b40e50, parent_occ = 0x37697c0} > (gdb) print *bb->dom[0]->son->son->son->son->son->son->son->son->son->son->son > ->son->son->son->son->son->son->son->son->son->son->son->son->son->son->son->s > on->son->son->son->son->son->son->son->son->son->son->son->son->son->son->son- >>son->son->son->son->son->son->son->son->son->son->son->son->son->son->son->so > n->son->son->son->son->son->son->son->son->son->son->son->son->son->son->son-> > son->son->son->son->son->son->son->son->son->son->son->son->son->son->son->son > ->son->son->son->son->son->son->son->son->son->son->son->son->son->son->son->s > on->son->son->son->son->son->son->son->son->son->son->son->son->son->son->son- >>son->son->son->son->son->son->son->son->son->son->son->son->son->son->son->so > n->son->son->son->son->son->son->son->son->son->son->son->son->son->son->son-> > son->son->son->son->son->son->son->son->son->son->son->son->son->son->son->son > ->son->son->son->son->son->son->son->son->son->son->son->son->son > $10 = {data = 0x7efd88c0, dfs_num_in = 9380, dfs_num_out = 33893, > father = 0x3b439b8, son = 0x3b43a78, left = 0x3b439e8, right = 0x3b439e8, > rightmost_occ = 0x3b46d70, parent_occ = 0x376be80} > (gdb) > (gdb) c 20 > Will ignore next 19 crossings of breakpoint 1. Continuing. > > Breakpoint 1, tree_ssa_phiprop_1 (bb=0x7efd1480, phivn=0x3d3c9a8, n=150236) > at /gnu/gcc/gcc/gcc/tree-ssa-phiprop.c:333 > 333 { > (gdb) c 20 > Will ignore next 19 crossings of breakpoint 1. Continuing. > > Breakpoint 1, tree_ssa_phiprop_1 (bb=0x7efd2340, phivn=0x3d3c9a8, n=150236) > at /gnu/gcc/gcc/gcc/tree-ssa-phiprop.c:333 > 333 { > (gdb) c 20 > Will ignore next 19 crossings of breakpoint 1. Continuing. > > Program received signal SIGSEGV, Segmentation fault. > tree_ssa_phiprop_1 (bb=<value optimized out>, phivn=<value optimized out>, > n=150236) at /gnu/gcc/gcc/gcc/tree-ssa-phiprop.c:333 > 333 { > (gdb) > >