
#14928: TH eats 50 GB memory when creating ADT with multiple constructors -------------------------------------+------------------------------------- Reporter: YitzGale | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.6.1 Component: Template Haskell | Version: 8.2.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Compile-time | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by bgamari): The biggest allocator while compiling this program with `-O0` appears to be CodeGen: {{{ !!! Renamer/typechecker [Foundation]: finished in 22503.88 milliseconds, allocated 2682.425 megabytes !!! Desugar [Foundation]: finished in 396.31 milliseconds, allocated 647.120 megabytes !!! Simplifier [Foundation]: finished in 485.76 milliseconds, allocated 675.006 megabytes !!! CoreTidy [Foundation]: finished in 45.90 milliseconds, allocated 88.678 megabytes !!! CorePrep [Foundation]: finished in 168.78 milliseconds, allocated 252.445 megabytes !!! CodeGen [Foundation]: finished in 17228.95 milliseconds, allocated 24917.560 megabytes }}} In particular, we spend a significant amount of time in register allocation and producing assembler. {{{ COST CENTRE MODULE SRC %time %alloc hscCompileCoreExpr' HscMain compiler/main/HscMain.hs:(1805,1)-(1827,24) 63.6 0.1 pprNativeCode AsmCodeGen compiler/nativeGen/AsmCodeGen.hs:(529,37)-(530,65) 5.5 18.5 RegAlloc-linear AsmCodeGen compiler/nativeGen/AsmCodeGen.hs:(658,27)-(660,55) 4.2 12.5 regLiveness AsmCodeGen compiler/nativeGen/AsmCodeGen.hs:(591,17)-(593,52) 3.5 10.1 tc_rn_src_decls TcRnDriver compiler/typecheck/TcRnDriver.hs:(491,4)-(555,7) 2.8 8.0 StgCmm HscMain compiler/main/HscMain.hs:(1463,13)-(1464,62) 2.7 7.8 genMachCode AsmCodeGen compiler/nativeGen/AsmCodeGen.hs:(580,17)-(582,62) 2.4 6.6 NativeCodeGen CodeOutput compiler/main/CodeOutput.hs:166:18-78 1.8 4.0 layoutStack CmmPipeline compiler/cmm/CmmPipeline.hs:(98,13)-(100,40) 1.6 4.3 fixStgRegisters AsmCodeGen compiler/nativeGen/AsmCodeGen.hs:566:17-42 1.3 1.2 cmmToCmm AsmCodeGen compiler/nativeGen/AsmCodeGen.hs:571:17-50 1.0 2.4 sequenceBlocks AsmCodeGen compiler/nativeGen/AsmCodeGen.hs:699:17-49 0.8 1.7 doSRTs CmmPipeline compiler/cmm/CmmPipeline.hs:47:46-71 0.6 1.1 Digraph.scc Digraph compiler/utils/Digraph.hs:277:44-67 0.5 2.2 cmmCfgOpts(1) CmmPipeline compiler/cmm/CmmPipeline.hs:64:13-62 0.5 1.6 revPostorder CmmUtils compiler/cmm/CmmUtils.hs:561:5-47 0.5 1.0 deSugar HscMain compiler/main/HscMain.hs:544:7-44 0.4 1.4 simplExprF1-App Simplify compiler/simplCore/Simplify.hs:(866,34)-(883,62) 0.3 1.3 occAnalBind.assoc OccurAnal compiler/simplCore/OccurAnal.hs:819:13-60 0.3 1.1 }}} Compiling with `-O1` tells a very similar story; each simplifier pass only allocates a gigabyte or two, with codegen allocating several tens of GB. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14928#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler