Skip to content

Int / Word / IntN / WordN are unequally optimized

A lot of thought has been put into optimizing usage of Int, but not all of these tweaks have been copied for usage of Word, and the specific-size versions of both have even fewer optimizations. The consequence is that switching from signed to unsigned, or from unspecified to specified size, can result in dramatic performance loss.

  • builtin rules (prelude/PrelRules) cover Int and Word, but not sized alternatives

  • SPECIALI[SZ]E pragmas cover Int, but little of the others. Try

find libraries/ -name _darcs -prune -o -name *hs | 
  xargs grep SPECIAL | grep '\<Int\|\<Word'
  • some instances have special cases for Int, but not for the others (for instance, the Enum instance for Int uses specialised enumFromTo code, the Word version uses generic code; base/GHC/Enum.hs and base/GHC/Word.hs)

  • some RULES help optimizing the special cases for Int further (again, see the Enum instance for Int for an example)

See this thread "Int vs Word performance?" for more discussion.

related tickets: #2270 (closed), #3051 (closed)

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