This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/54146] Very slow compile with attribute((flatten))
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 06 Aug 2012 08:45:12 +0000
- Subject: [Bug tree-optimization/54146] Very slow compile with attribute((flatten))
- Auto-submitted: auto-generated
- References: <bug-54146-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54146
--- Comment #19 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-08-06 08:45:12 UTC ---
(In reply to comment #17)
> (In reply to comment #14)
> > if-conversion : 177.26 (but due to loop_optimizer_init)
>
> Hmm, this is not loop_optimizer_init. All time is spent in the two memset calls
> in cond_move_process_if_block:
>
> /* Build a mapping for each block to the value used for each
> register. */
> max_reg = max_reg_num ();
> size = (max_reg + 1) * sizeof (rtx);
> then_vals = (rtx *) alloca (size);
> else_vals = (rtx *) alloca (size);
> memset (then_vals, 0, size);
> memset (else_vals, 0, size);
>
> There are O(1e6) registers in the test case, and O(1e5) basic blocks. So we end
> up memset'ing O(10)MB X O(1e5)times = O(1e6)MB (assuming 64 bits pointers so
> that each rtx is O(10) bytes).
>
> I have a few ideas to fix this problem.
Ick, I suppose similar issues exist on the tree level for passes that
think that memory / compile-time usage O(number-of-ssa-names or basic-blocks)
is "ok" (and I suppose it really _is_ ok ...?)