------- Comment #3 from rguenth at gcc dot gnu dot org  2006-10-19 14:31 -------
I can confirm this.  We are gimplifying some large tree(s) like

#150 0x00000000005257ff in gimplify_stmt (stmt_p=0x7fffcff543e8)
    at /space//rguenther/src/svn/gcc-4_1-branch/gcc/gimplify.c:4028
4028      gimplify_expr (stmt_p, NULL, NULL, is_gimple_stmt, fb_none);
(gdb) call debug_generic_expr (*stmt_p)
operator= (&TARGET_EXPR <D.120775, operator| (D.121290, (struct
parser<boost::spirit::alternative<boost::spirit::alternative
.......
[return slot optimization]>, &((struct definition<boost::spirit::scanner<const
char*,
boost::spirit::scanner_policies<boost::spirit::skipper_iteration_policy<boost::spirit::iteration_policy>,
boost::spirit::match_policy, boost::spirit::action_policy> > >D.98251 *)
thisD.100424)->hex_digit_ntD.101683)

and thus spend a lot of time in

#60 0x0000000000524020 in gimplify_modify_expr_rhs (expr_p=0x7fffcff50c60, 
    from_p=0x2ac5e2795090, to_p=0x2ac5e2795088, pre_p=0x7fffcff542e8, 
    post_p=0x7fffcff50f40, want_value=0 '\0')
    at /space//rguenther/src/svn/gcc-4_1-branch/gcc/gimplify.c:3183
3183            if (!CALL_EXPR_RETURN_SLOT_OPT (*from_p)

which in turn dispatches to i386.c:classify_argument at some point which is
a nice (*cough*) O(n^m) with m >= 2 complexity function.

And for some reason we won't return from frame #55, which is the topmost
classify_argument frame:

#57 0x00000000008ed590 in ix86_return_in_memory (type=0x2ac5dfd980b0)
    at /space//rguenther/src/svn/gcc-4_1-branch/gcc/config/i386/i386.c:3531
3531        return !examine_argument (mode, type, 1, &needed_intregs,
&needed_sseregs);
(gdb) down
#56 0x00000000008ebf29 in examine_argument (mode=BLKmode, type=0x2ac5dfd980b0, 
    in_return=1, int_nregs=0x7fffcff509c4, sse_nregs=0x7fffcff509c0)
    at /space//rguenther/src/svn/gcc-4_1-branch/gcc/config/i386/i386.c:2882
2882      int n = classify_argument (mode, type, class, 0);
(gdb) 
#55 0x00000000008eb47a in classify_argument (mode=BLKmode, 
    type=0x2ac5dfd980b0, classes=0x7fffcff50980, bit_offset=0)
    at /space//rguenther/src/svn/gcc-4_1-branch/gcc/config/i386/i386.c:2637
2637                       num = classify_argument (TYPE_MODE (type),
(gdb) finish
Run till exit from #55 0x00000000008eb47a in classify_argument (mode=BLKmode, 
    type=0x2ac5dfd980b0, classes=0x7fffcff50980, bit_offset=0)
    at /space//rguenther/src/svn/gcc-4_1-branch/gcc/config/i386/i386.c:2637

(it's probably not really dead here, just taking a long time to complete, as
finishing earlier frames takes more and more time)


-- 

rguenth at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hubicka at gcc dot gnu dot
                   |                            |org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29512

Reply via email to