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

--- Comment #36 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-09-05 
10:59:52 UTC ---
If I fix that (PR54489) by iterating over immediate dominators when querying
AVAIL_OUT
instead of accumulating then other loop opts quickly take over in compile-time,
but memory usage stays reasonable at -O1.  LIM is now the pass that pushes
memory usage to 1.8GB - all other optimization passes are happy with just
~800MB.  The issue with LIM is that it analyzes the whole function instead
of working on outermost loops at a time (PR54488).  Then of course IRA
comes along and wrecks memory usage again ... (create_loop_tree_nodes).
One can tame down IRA a bit using -fno-ira-loop-pressure -fira-region=one.
We then arrive at roughly a constant 900MB memory usage for the full(!)
testcase at -O1 and

Execution times (seconds)
 phase opt and generate  : 495.90 (99%) usr   1.98 (98%) sys 499.91 (99%) wall 
870508 kB (92%) ggc
 df reaching defs        :  19.16 ( 4%) usr   0.06 ( 3%) sys  19.18 ( 4%) wall 
     0 kB ( 0%) ggc
 alias stmt walking      :  28.75 ( 6%) usr   0.21 (10%) sys  29.12 ( 6%) wall 
  2336 kB ( 0%) ggc
 tree SSA rewrite        :  63.42 (13%) usr   0.02 ( 1%) sys  63.77 (13%) wall 
 18830 kB ( 2%) ggc
 tree SSA incremental    :  74.64 (15%) usr   0.03 ( 1%) sys  74.44 (15%) wall 
 25886 kB ( 3%) ggc
 dominance frontiers     : 101.71 (20%) usr   0.09 ( 4%) sys 102.17 (20%) wall 
     0 kB ( 0%) ggc
 dominance computation   :  52.56 (11%) usr   0.09 ( 4%) sys  53.35 (11%) wall 
     0 kB ( 0%) ggc
 loop invariant motion   : 101.20 (20%) usr   0.10 ( 5%) sys 101.75 (20%) wall 
  2700 kB ( 0%) ggc
 TOTAL                 : 498.79             2.03           502.87            
947764 kB

(all entries > 10s)

The incremental SSA stuff is complete loop unrolling / IV canonicalization
which does SSA update once per loop (similar to what loop header copying
formerly did).  Fixing that leads to

Execution times (seconds)
 phase opt and generate  : 214.62 (99%) usr   1.53 (96%) sys 217.41 (99%) wall 
870508 kB (92%) ggc
 df reaching defs        :  23.07 (11%) usr   0.01 ( 1%) sys  23.10 (10%) wall 
     0 kB ( 0%) ggc
 alias stmt walking      :  28.51 (13%) usr   0.23 (14%) sys  28.93 (13%) wall 
  2336 kB ( 0%) ggc
 loop invariant motion   : 105.43 (48%) usr   0.01 ( 1%) sys 106.22 (48%) wall 
  2700 kB ( 0%) ggc
 TOTAL                 : 217.56             1.59           220.44            
947764 kB

so RTL invariant motion is now the main offender ;)

Reply via email to