
#12022: unsafeShiftL and unsafeShiftR are not marked as INLINE -------------------------------------+------------------------------------- Reporter: Rufflewind | Owner: (none) Type: feature request | Status: new Priority: normal | Milestone: Component: libraries/base | Version: 7.10.3 Resolution: | Keywords: performance, | inline, bits Operating System: Unknown/Multiple | Architecture: Type of failure: Runtime | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by m-renaud): This all predates me but in comment 2 above thomie@ points out: "But that `Note` is older (2008) than the commit that introduced `unsafeShiftL/R` ([f1c593e01d740fde1202f84aa37ad4cc95ec7272], 2011)." In fact, these functions ''are'' marked INLINE in the typeclass definition when they were introduced, and if the assumption is that GHC ''should'' always inline them, then why not make that explicit in the Int and Word instances? It appears this may have simply been an oversight. In containers if these functions are not inlined it is my understanding that there is a performance hit which is why there is custom code to ensure that these shifts are inlined (https://github.com/haskell/containers/blob/master/Utils/Containers/Internal/...). -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12022#comment:8 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler