[Haskell-cafe] Switch optimization

Tom Pledger tom at pledger.gen.nz
Sun Jun 10 21:39:52 EDT 2007

Stefan O'Rear wrote:
  | On Mon, Jun 11, 2007 at 09:43:17AM +1000, Thomas Conway wrote:
  | > codeLen 127 = 0
  | > codeLen 128 = 1
  | > ...
  | > codeLen 255 = 8
  | >
  | > Now, compiling with ghc 6.6.1 and -O3, I see that it generates a long
  | > chain of conditional branches.

That's deeply tied in with Num being a subclass of Eq, isn't it?   
Pattern matching for /non-numeric/ data constructors should be more  
direct, at any optimisation level, thanks to the taglessness of the  
STG machine.

  | I'd suggest learning how to hack on GHC, I get a chain of branches even
  | at the maximum optimization setting.  Hackers are always appreciated!

Such a GHC hack may have to be limited to some known, standard numeric  
types.  User-defined numeric types may not provide anything that you  
can use to look up a jump table.

How would an array go, as a user-level optimisation?


More information about the Haskell-Cafe mailing list