[GHC] #9944: Performance issue

GHC ghc-devs at haskell.org
Wed Dec 31 08:52:31 UTC 2014


#9944: Performance issue
-------------------------------------+-------------------------------------
              Reporter:  clinton     |             Owner:
                  Type:  bug         |            Status:  new
              Priority:  low         |         Milestone:
             Component:  Compiler    |           Version:  7.8.3
              Keywords:              |  Operating System:  Linux
          Architecture:  x86_64      |   Type of failure:  Runtime
  (amd64)                            |  performance bug
             Test Case:              |        Blocked By:
              Blocking:              |   Related Tickets:
Differential Revisions:              |
-------------------------------------+-------------------------------------
 The runtime of the following code actually decreases if the number
 2147483647 (2^31-1) is increased to 2147483648 (2^31).

 {{{#!hs
 f n = go 1 0 where
   go i c = if i == n then c + i else go (i+1) (c+i)

 main = print $ f (2147483647 :: Int)
 }}}

 I've attached two dumps from ghc-core, core7 is the 2147483647 case and
 core8 is the 2147483648 case, however the main differences are below:

 '''2147483647 case:'''
 {{{
 _c3Qg:
         cmpq $2147483647,%r14
         jne _c3Q9
 _c3Qa:
         leaq 2147483647(%rsi),%rbx
         jmp *(%rbp)
 _c3Q9:
         addq %r14,%rsi
         incq %r14
         jmp _c3Qg
 }}}

 '''2147483648 case:'''
 {{{
 _c3Qg:
         movl $2147483648,%eax
         cmpq %rax,%r14
         jne _c3Q9
 _c3Qa:
         movl $2147483648,%eax
         movq %rsi,%rbx
         addq %rax,%rbx
         jmp *(%rbp)
 _c3Q9:
         addq %r14,%rsi
         incq %r14
         jmp _c3Qg
 }}}

 Despite the extra instructions, the latter approach seems faster for  my
 PC.

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


More information about the ghc-tickets mailing list