[GHC] #15113: Do not make CAFs from literal strings
GHC
ghc-devs at haskell.org
Mon Jun 18 08:15:51 UTC 2018
#15113: Do not make CAFs from literal strings
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner: (none)
Type: bug | Status: patch
Priority: normal | Milestone: 8.8.1
Component: Compiler | Version: 8.2.2
Resolution: | Keywords: CAFs
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s): Phab:D4717
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by simonpj):
I like the idea of trying this out.
It might actually make programs allocate more (because we start using
call-by-name), but it's usually very short-lived allocation.
To judge the effect, you might want to add a way to show the total SRT
table sizes (statically); and the number of SRT links traversed by the
garbage collector (dynamically). Reducing these two is the main point, so
we should measure them. For the latter, perhaps add to the `-ticky`
stats?
Variants to explore
* Broaden scope: do this for non-top-level bindings as well as top-level
ones. (The Phab patch has bug on this point; it does it only for the
non-top-level ones!)
* Broaden scope: do this for any function marked CONLIKE. Currently those
functions (in `libraries/`) are
{{{
./ghc-prim/GHC/CString.hs:74:{-# NOINLINE CONLIKE unpackCString# #-}
./ghc-prim/GHC/CString.hs:124:{-# NOINLINE CONLIKE unpackCStringUtf8# #-}
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:74:#define CONLIKE
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:157:{-# INLINE
CONLIKE size #-}
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:161:{-# INLINE
CONLIKE runF #-}
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:166:{-# INLINE
CONLIKE emptyF #-}
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:171:{-# INLINE
CONLIKE pairF #-}
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:185:{-# INLINE
CONLIKE contramapF #-}
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:190:{-# INLINE
CONLIKE toB #-}
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:195:{-# INLINE
CONLIKE liftFixedToBounded #-}
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:199:{-# INLINE
CONLIKE storableToF #-}
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:204:{-# INLINE
CONLIKE liftIOF #-}
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:218:{-# INLINE
CONLIKE sizeBound #-}
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:225:{-# INLINE
CONLIKE runB #-}
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:238:{-# INLINE
CONLIKE contramapB #-}
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:243:{-# INLINE
CONLIKE emptyB #-}
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:248:{-# INLINE
CONLIKE pairB #-}
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:264:{-# INLINE
CONLIKE eitherB #-}
./bytestring/Data/ByteString/Builder/Prim/Internal.hs:277:{-# INLINE
CONLIKE condB #-}
}}}
I have no idea if this idea would be a good one for those functions in
`bytestring`; maybe not.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15113#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list