Skip to content

Unboxed sum performance surprisingly poor

I tried performing worker-wrapper manually on Data.IntMap.lookup:

lookup# :: Int -> IntMap a -> (# (# #) | a #)
lookup# = -- The obvious modification of the current implementation

lookup :: Int -> IntMap a -> Maybe a
lookup k m = case lookup# k m of
  (# | a #) -> Just a
  _ -> Nothing

Unfortunately, the lookup benchmark slowed down. I verified that the benchmark indeed performs an immediate case analysis on the result (with fromMaybe), so it should go faster. And yet it goes slower.

Caveat: I have not yet gotten things set up to be able to check with 8.4, so if there have been improvements in UnboxedSum performance since 8.2.2, this may all be silly.

Trac metadata
Trac field Value
Version 8.2.2
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information