[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