
#7258: Compiling DynFlags is jolly slow -------------------------------------+------------------------------------- Reporter: simonpj | Owner: simonpj Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.6.1 Resolution: | Keywords: deriving-perf 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 tdammers): getLine examples: monadic-bind style: {{{ [1 of 1] Compiling D ( examples/t-10-getline.hs, examples/t-10-getline.o ) ==================== Tidy Core ==================== Result size of Tidy Core = {terms: 182, types: 231, coercions: 0} -- RHS size: {terms: 5, types: 12, coercions: 0} field10 field10 = \ ds_d1JC -> case ds_d1JC of _ { DT ds1_d1JD ds2_d1JE ds3_d1JF ds4_d1JG ds5_d1JH ds6_d1JI ds7_d1JJ ds8_d1JK ds9_d1JL ds10_d1JM -> ds10_d1JM } -- RHS size: {terms: 5, types: 12, coercions: 0} field9 field9 = \ ds_d1Jr -> case ds_d1Jr of _ { DT ds1_d1Js ds2_d1Jt ds3_d1Ju ds4_d1Jv ds5_d1Jw ds6_d1Jx ds7_d1Jy ds8_d1Jz ds9_d1JA ds10_d1JB -> ds9_d1JA } -- RHS size: {terms: 5, types: 12, coercions: 0} field8 field8 = \ ds_d1Jg -> case ds_d1Jg of _ { DT ds1_d1Jh ds2_d1Ji ds3_d1Jj ds4_d1Jk ds5_d1Jl ds6_d1Jm ds7_d1Jn ds8_d1Jo ds9_d1Jp ds10_d1Jq -> ds8_d1Jo } -- RHS size: {terms: 5, types: 12, coercions: 0} field7 field7 = \ ds_d1J5 -> case ds_d1J5 of _ { DT ds1_d1J6 ds2_d1J7 ds3_d1J8 ds4_d1J9 ds5_d1Ja ds6_d1Jb ds7_d1Jc ds8_d1Jd ds9_d1Je ds10_d1Jf -> ds7_d1Jc } -- RHS size: {terms: 5, types: 12, coercions: 0} field6 field6 = \ ds_d1IU -> case ds_d1IU of _ { DT ds1_d1IV ds2_d1IW ds3_d1IX ds4_d1IY ds5_d1IZ ds6_d1J0 ds7_d1J1 ds8_d1J2 ds9_d1J3 ds10_d1J4 -> ds6_d1J0 } -- RHS size: {terms: 5, types: 12, coercions: 0} field5 field5 = \ ds_d1IJ -> case ds_d1IJ of _ { DT ds1_d1IK ds2_d1IL ds3_d1IM ds4_d1IN ds5_d1IO ds6_d1IP ds7_d1IQ ds8_d1IR ds9_d1IS ds10_d1IT -> ds5_d1IO } -- RHS size: {terms: 5, types: 12, coercions: 0} field4 field4 = \ ds_d1Iy -> case ds_d1Iy of _ { DT ds1_d1Iz ds2_d1IA ds3_d1IB ds4_d1IC ds5_d1ID ds6_d1IE ds7_d1IF ds8_d1IG ds9_d1IH ds10_d1II -> ds4_d1IC } -- RHS size: {terms: 5, types: 12, coercions: 0} field3 field3 = \ ds_d1In -> case ds_d1In of _ { DT ds1_d1Io ds2_d1Ip ds3_d1Iq ds4_d1Ir ds5_d1Is ds6_d1It ds7_d1Iu ds8_d1Iv ds9_d1Iw ds10_d1Ix -> ds3_d1Iq } -- RHS size: {terms: 5, types: 12, coercions: 0} field2 field2 = \ ds_d1Ic -> case ds_d1Ic of _ { DT ds1_d1Id ds2_d1Ie ds3_d1If ds4_d1Ig ds5_d1Ih ds6_d1Ii ds7_d1Ij ds8_d1Ik ds9_d1Il ds10_d1Im -> ds2_d1Ie } -- RHS size: {terms: 5, types: 12, coercions: 0} field0 field0 = \ ds_d1I1 -> case ds_d1I1 of _ { DT ds1_d1I2 ds2_d1I3 ds3_d1I4 ds4_d1I5 ds5_d1I6 ds6_d1I7 ds7_d1I8 ds8_d1I9 ds9_d1Ia ds10_d1Ib -> ds1_d1I2 } -- RHS size: {terms: 2, types: 0, coercions: 0} $trModule1_r1EM $trModule1_r1EM = TrNameS "main"# -- RHS size: {terms: 2, types: 0, coercions: 0} $trModule2_r1Ke $trModule2_r1Ke = TrNameS "D"# -- RHS size: {terms: 3, types: 0, coercions: 0} $trModule $trModule = Module $trModule1_r1EM $trModule2_r1Ke -- RHS size: {terms: 2, types: 0, coercions: 0} $tc'DT1_r1Kf $tc'DT1_r1Kf = TrNameS "'DT"# -- RHS size: {terms: 5, types: 0, coercions: 0} $tc'DT $tc'DT = TyCon 9521127001609462311## 17424978011088396301## $trModule $tc'DT1_r1Kf -- RHS size: {terms: 2, types: 0, coercions: 0} $tcDT1_r1Kg $tcDT1_r1Kg = TrNameS "DT"# -- RHS size: {terms: 5, types: 0, coercions: 0} $tcDT $tcDT = TyCon 14693474152448962618## 5168028270650093369## $trModule $tcDT1_r1Kg -- RHS size: {terms: 93, types: 82, coercions: 0} getlD getlD =
= $fMonadIO (<$> $fFunctorIO (read $fReadInt) getLine) (\ field1_aGE -> >>= $fMonadIO (<$> $fFunctorIO (read $fReadInt) getLine) (\ field12_aGF -> >>= $fMonadIO (<$> $fFunctorIO (read $fReadInt) getLine) (\ field13_aGG -> >>= $fMonadIO (<$> $fFunctorIO (read $fReadInt) getLine) (\ field14_aGH -> >>= $fMonadIO (<$> $fFunctorIO (read $fReadInt) getLine) (\ field15_aGI -> >>= $fMonadIO (<$> $fFunctorIO (read $fReadInt) getLine) (\ field16_aGJ -> >>= $fMonadIO (<$> $fFunctorIO (read $fReadInt) getLine) (\ field17_aGK -> >>= $fMonadIO (<$> $fFunctorIO (read $fReadInt) getLine) (\ field18_aGL -> >>= $fMonadIO (<$> $fFunctorIO (read $fReadInt) getLine) (\ field19_aGM -> >>= $fMonadIO (<$> $fFunctorIO (read $fReadInt) getLine) (\ field20_aGN -> return $fMonadIO (DT field1_aGE field12_aGF field13_aGG field14_aGH field15_aGI field16_aGJ field17_aGK field18_aGL field19_aGM field20_aGN)))))))))))
}}} vs. applicative: {{{ [1 of 1] Compiling D ( examples/t-10-getline-appl.hs, examples/t-10-getline-appl.o ) ==================== Tidy Core ==================== Result size of Tidy Core = {terms: 160, types: 264, coercions: 0} -- RHS size: {terms: 5, types: 12, coercions: 0} field10 field10 = \ ds_d1Je -> case ds_d1Je of _ { DT ds1_d1Jf ds2_d1Jg ds3_d1Jh ds4_d1Ji ds5_d1Jj ds6_d1Jk ds7_d1Jl ds8_d1Jm ds9_d1Jn ds10_d1Jo -> ds10_d1Jo } -- RHS size: {terms: 5, types: 12, coercions: 0} field9 field9 = \ ds_d1J3 -> case ds_d1J3 of _ { DT ds1_d1J4 ds2_d1J5 ds3_d1J6 ds4_d1J7 ds5_d1J8 ds6_d1J9 ds7_d1Ja ds8_d1Jb ds9_d1Jc ds10_d1Jd -> ds9_d1Jc } -- RHS size: {terms: 5, types: 12, coercions: 0} field8 field8 = \ ds_d1IS -> case ds_d1IS of _ { DT ds1_d1IT ds2_d1IU ds3_d1IV ds4_d1IW ds5_d1IX ds6_d1IY ds7_d1IZ ds8_d1J0 ds9_d1J1 ds10_d1J2 -> ds8_d1J0 } -- RHS size: {terms: 5, types: 12, coercions: 0} field7 field7 = \ ds_d1IH -> case ds_d1IH of _ { DT ds1_d1II ds2_d1IJ ds3_d1IK ds4_d1IL ds5_d1IM ds6_d1IN ds7_d1IO ds8_d1IP ds9_d1IQ ds10_d1IR -> ds7_d1IO } -- RHS size: {terms: 5, types: 12, coercions: 0} field6 field6 = \ ds_d1Iw -> case ds_d1Iw of _ { DT ds1_d1Ix ds2_d1Iy ds3_d1Iz ds4_d1IA ds5_d1IB ds6_d1IC ds7_d1ID ds8_d1IE ds9_d1IF ds10_d1IG -> ds6_d1IC } -- RHS size: {terms: 5, types: 12, coercions: 0} field5 field5 = \ ds_d1Il -> case ds_d1Il of _ { DT ds1_d1Im ds2_d1In ds3_d1Io ds4_d1Ip ds5_d1Iq ds6_d1Ir ds7_d1Is ds8_d1It ds9_d1Iu ds10_d1Iv -> ds5_d1Iq } -- RHS size: {terms: 5, types: 12, coercions: 0} field4 field4 = \ ds_d1Ia -> case ds_d1Ia of _ { DT ds1_d1Ib ds2_d1Ic ds3_d1Id ds4_d1Ie ds5_d1If ds6_d1Ig ds7_d1Ih ds8_d1Ii ds9_d1Ij ds10_d1Ik -> ds4_d1Ie } -- RHS size: {terms: 5, types: 12, coercions: 0} field3 field3 = \ ds_d1HZ -> case ds_d1HZ of _ { DT ds1_d1I0 ds2_d1I1 ds3_d1I2 ds4_d1I3 ds5_d1I4 ds6_d1I5 ds7_d1I6 ds8_d1I7 ds9_d1I8 ds10_d1I9 -> ds3_d1I2 } -- RHS size: {terms: 5, types: 12, coercions: 0} field2 field2 = \ ds_d1HO -> case ds_d1HO of _ { DT ds1_d1HP ds2_d1HQ ds3_d1HR ds4_d1HS ds5_d1HT ds6_d1HU ds7_d1HV ds8_d1HW ds9_d1HX ds10_d1HY -> ds2_d1HQ } -- RHS size: {terms: 5, types: 12, coercions: 0} field0 field0 = \ ds_d1HD -> case ds_d1HD of _ { DT ds1_d1HE ds2_d1HF ds3_d1HG ds4_d1HH ds5_d1HI ds6_d1HJ ds7_d1HK ds8_d1HL ds9_d1HM ds10_d1HN -> ds1_d1HE } -- RHS size: {terms: 2, types: 0, coercions: 0} $trModule1_r1Ey $trModule1_r1Ey = TrNameS "main"# -- RHS size: {terms: 2, types: 0, coercions: 0} $trModule2_r1JQ $trModule2_r1JQ = TrNameS "D"# -- RHS size: {terms: 3, types: 0, coercions: 0} $trModule $trModule = Module $trModule1_r1Ey $trModule2_r1JQ -- RHS size: {terms: 2, types: 0, coercions: 0} $tc'DT1_r1JR $tc'DT1_r1JR = TrNameS "'DT"# -- RHS size: {terms: 5, types: 0, coercions: 0} $tc'DT $tc'DT = TyCon 9521127001609462311## 17424978011088396301## $trModule $tc'DT1_r1JR -- RHS size: {terms: 2, types: 0, coercions: 0} $tcDT1_r1JS $tcDT1_r1JS = TrNameS "DT"# -- RHS size: {terms: 5, types: 0, coercions: 0} $tcDT $tcDT = TyCon 14693474152448962618## 5168028270650093369## $trModule $tcDT1_r1JS -- RHS size: {terms: 71, types: 115, coercions: 0} getlD getlD = <*> $fApplicativeIO (<*> $fApplicativeIO (<*> $fApplicativeIO (<*> $fApplicativeIO (<*> $fApplicativeIO (<*> $fApplicativeIO (<*> $fApplicativeIO (<*> $fApplicativeIO (<*> $fApplicativeIO (<$> $fFunctorIO DT (<$> $fFunctorIO (read $fReadInt) getLine)) (<$> $fFunctorIO (read $fReadInt) getLine)) (<$> $fFunctorIO (read $fReadInt) getLine)) (<$> $fFunctorIO (read $fReadInt) getLine)) (<$> $fFunctorIO (read $fReadInt) getLine)) (<$> $fFunctorIO (read $fReadInt) getLine)) (<$> $fFunctorIO (read $fReadInt) getLine)) (<$> $fFunctorIO (read $fReadInt) getLine)) (<$> $fFunctorIO (read $fReadInt) getLine)) (<$> $fFunctorIO (read $fReadInt) getLine) }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/7258#comment:46 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler