[GHC] #9342: Branchless arithmetic operations

GHC ghc-devs at haskell.org
Mon Sep 28 16:13:57 UTC 2015


#9342: Branchless arithmetic operations
-------------------------------------+-------------------------------------
        Reporter:  hvr               |                Owner:
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:  8.0.1
       Component:  Compiler          |              Version:  7.8.3
  (CodeGen)                          |
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
-------------------------------------+-------------------------------------

Comment (by svenpanne):

 Re #7: Do we have real-world benchmarks for Atom/i3/i7/Xeon in ia32/x64
 modes? ARM? ARM64? With and without branches? Without that, it's unclear
 if that's "effective use". My point (again) is: Being branchless in itself
 is a non-goal.

 Picking e.g. just
 https://github.com/gregorycollins/hashtables/blob/9e477b825a98e4f574a0e889e5c7955a1015a430/src/Data/HashTable/Internal/CacheLine.hs#L165
 : This is a perfect example which will probably make things *slower*,
 depending on the availability of spare registers. It uses a handful of
 intermediate values, while the branching code uses none, and a single
 spill caused by the higher register pressure will be much, much more
 costly than anything else, especially ia32 sucks here. Furthermore, if
 surrounding code uses shifts and/or complicated addressing modes a lot,
 one will have to wait for the shifting unit to become available. This is
 all not theoretical, we had to revert to the straightforward code with
 branches in Chrome's V8 JavaScript JIT on some platforms/CPUs in similar
 places. Perhaps the code patterns in GHC-generated code are different, but
 the only way to know is to do benchmarking on wide variety of benchmarks
 and CPUs. Yes, that's a lot of work and needs some infrastructure, but
 without that, changes like this are just a shot in the dark.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9342#comment:8>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list