[GHC] #7960: Compiling profiling CCS registration .c file takes far too long
GHC
ghc-devs at haskell.org
Tue Jun 4 13:41:25 CEST 2013
#7960: Compiling profiling CCS registration .c file takes far too long
-----------------------------------------+----------------------------------
Reporter: duncan | Owner:
Type: bug | Status: new
Priority: normal | Component: Compiler
Version: 7.6.3 | Keywords:
Os: Unknown/Multiple | Architecture: Unknown/Multiple
Failure: Compile-time performance bug | Blockedby:
Blocking: | Related:
-----------------------------------------+----------------------------------
When compiling executables for profiling, ghc generates a .c file
something like this:
{{{
#define IN_STG_CODE 0
#include "Rts.h"
#include "Stg.h"
static void prof_init_Main(void) __attribute__((constructor));
static void prof_init_Main(void)
{extern CostCentre Foo_bar_cc[];
REGISTER_CC(Foo_bar_cc);
...
}}}
When there are a large number of CCSs, e.g. 10's of 1,000s (as can easily
happen with large projects and using `-fprof-auto`) then of course this .c
file and this single C function become very large. The C compiler then
takes a very long time to compile it.
For example, with a .c file with ~27k lines (so about half that number of
CCSs), gcc 4.7.2 with -O1 takes about 20 minutes to compile. With -O0 it
takes about 4 seconds. Clearly this version of gcc does not cope very well
with this massive function at -O1 level.
I suggest that since the initialisation is not performance critical, and
it doesn't look like there is a lot to optimise here anyway, that ghc
compile this .c file without passing gcc the -O flag.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7960>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list