#10528: compile time performance regression with OverloadedStrings and Text -------------------------------------+------------------------------------- Reporter: jakewheat | Owner: bgamari Type: bug | Status: new Priority: high | Milestone: 7.10.3 Component: Compiler | Version: 7.10.2-rc2 Resolution: | Keywords: Operating System: Linux | Architecture: Type of failure: Compile-time | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by bgamari): It appears that inlining is occurring where there previously was none. For instance, each top-level bindings under 7.10.1 produces (in `-ddump- simpl`), {{{#!hs T10528.strings181 :: Text [GblId, Str=DmdType, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=False, ConLike=False, WorkFree=False, Expandable=False, Guidance=IF_ARGS [] 50 0}] T10528.strings181 = text-1.2.1.1:Data.Text.Show.unpackCString# "abstime"# }}} Whereas in 7.10.2 we get this, {{{#!hs T10528.strings_dt62 :: [Char] [GblId, Str=DmdType, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=False, ConLike=False, WorkFree=False, Expandable=False, Guidance=IF_ARGS [] 50 0}] T10528.strings_dt62 = unpackCString# "abstime"# Rec { -- RHS size: {terms: 220, types: 125, coercions: 9} T10528.strings476 [InlPrag=[0], Occ=LoopBreaker] :: forall s1_a3V7. Data.Text.Array.MArray s1_a3V7 -> Int -> [Char] -> Int# -> State# s1_a3V7 -> (# State# s1_a3V7, Text #) [GblId, Arity=5, Str=DmdType <L,U(U)><L,U(U)><S,1*U><L,U><L,U>] T10528.strings476 = ... end Rec } -- RHS size: {terms: 2, types: 0, coercions: 0} T10528.strings121 :: Int [GblId, Caf=NoCafRefs, Str=DmdType, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}] T10528.strings121 = I# 4# -- RHS size: {terms: 14, types: 15, coercions: 0} T10528.strings475 :: forall s1_a3V7. State# s1_a3V7 -> (# State# s1_a3V7, Text #) [GblId, Arity=1, Str=DmdType, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [0] 83 0}] T10528.strings475 = \ (@ s1_a3V7) (s2_a3V8 [OS=OneShot] :: State# s1_a3V7) -> case newByteArray# @ s1_a3V7 8# s2_a3V8 of _ [Occ=Dead] { (# ipv_a3Vu, ipv1_a3Vv #) -> T10528.strings476 @ s1_a3V7 (Data.Text.Array.MArray @ s1_a3V7 ipv1_a3Vv) T10528.strings121 T10528.strings_dt62 0# ipv_a3Vu } -- RHS size: {terms: 2, types: 1, coercions: 0} T10528.strings474 :: Text [GblId, Str=DmdType, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=False, ConLike=False, WorkFree=False, Expandable=False, Guidance=IF_ARGS [] 20 0}] T10528.strings474 = runSTRep @ Text T10528.strings475 }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10528#comment:6> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler