------- Comment #95 from stevenb dot gcc at gmail dot com 2009-02-15 11:26 ------- Subject: Re: [4.3/4.4 Regression] Inordinate compile times on large routines
Re: Comment #94 The trouble with LCM in RTL (i.e. GCSE-PRE) is not that it is slow (or that it is disabled -- istr it is enabled at -O2), and also not that it is edge based. The problem is that it doesn't handle cascading expressions, because that just doesn't fit in the LCM framework. You have to iterate RTL GCSE-PRE to move the same invariants as what RTL LICM (i.e. loop-invariant.c) can achieve. (GCSE-PRE is old code from a time when GCC didn't really have a proper CFG. It is edge based because for block based you need critical edge splitting, which was was prohibitively expensive in the Old Days. Nowadays, gcse.c+lcm.c works in cfglayout mode and pre-splitting critical edges would be cheap, so it would be a good idea to experiment with a block based GCSE-PRE rewrite...) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26854