
#14865: GHC Defeats Manual Worker Wrapper with Unboxed Sum -------------------------------------+------------------------------------- Reporter: andrewthad | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.5 Resolution: | Keywords: UnboxedSums Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by andrewthad): It's weird that trying to manually apply the static argument transformation (which is probably not a performance win here anyway) gets in the way of this. For example, the following code produces the same core I originally was getting: {{{ findByte :: Int -> Int -> Word8 -> ByteArray -> Maybe Int findByte !off !len0 !w0 !arr0 = boxMaybeInt (goA off (len0 + off) w0 arr0) goA :: Int -> Int -> Word8 -> ByteArray -> Maybe# Int# goA !ix0 !end !w !arr = goB ix0 where goB :: Int -> Maybe# Int# goB !ix = if ix < end then if PM.indexByteArray arr ix == w then (# | unboxInt ix #) else goB (ix + 1) else (# (# #) | #) }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14865#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler