[GHC] #9346: AtomicPrimOps tests failing on 32-bit x86

GHC ghc-devs at haskell.org
Tue Jul 22 16:11:07 UTC 2014


#9346: AtomicPrimOps tests failing on 32-bit x86
-------------------------------------+-------------------------------------
              Reporter:  niklasl     |             Owner:
                  Type:  bug         |            Status:  new
              Priority:  normal      |         Milestone:
             Component:  Compiler    |           Version:  7.9
            Resolution:              |          Keywords:
Differential Revisions:              |  Operating System:  Unknown/Multiple
          Architecture:              |   Type of failure:  None/Unknown
  Unknown/Multiple                   |         Test Case:
            Difficulty:  Unknown     |          Blocking:
            Blocked By:              |
       Related Tickets:              |
-------------------------------------+-------------------------------------

Comment (by niklasl):

 Seems like the lock gets separated from the compxchg somewhere in the
 register allocation. I don't know why it's treated as a separate
 instruction, I can't think of a case where you wouldn't want it glued to
 the parent instruction. And the move looks bogus too, ecx and that stack
 slot already contains the same stuff.

 {{{
 ==================== Native code ====================
         movl %vI_c2eB,%vI_n2tm
         movl %vI_c2eA,%vI_n2tn
         movl %vI_n2tn,%eax
         lock
         cmpxchgl %vI_n2tm,(%vI_n2tl)
         movl %eax,%vI_s1Rr
         movl %vI_s1Rr,%vI_s1Ru
         jmp _c2eD
 }}}


 {{{
 ==================== Liveness annotations added ====================
                 movl %vI_c2ez,%vI_n2tl
                     # born:    %vI_n2tl
                     # r_dying: %vI_c2ez
                 movl %vI_c2eB,%vI_n2tm
                     # born:    %vI_n2tm
                     # r_dying: %vI_c2eB
                 movl %vI_c2eA,%vI_n2tn
                     # born:    %vI_n2tn
                     # r_dying: %vI_c2eA
                 movl %vI_n2tn,%eax
                     # born:    %r0
                     # r_dying: %vI_n2tn
                 lock
                 cmpxchgl %vI_n2tm,(%vI_n2tl)
                     # r_dying: %vI_n2tl %vI_n2tm
                 movl %eax,%vI_s1Rr
                     # born:    %vI_s1Rr
                     # r_dying: %r0
                 movl %vI_s1Rr,%vI_s1Ru
                     # born:    %vI_s1Ru
                     # r_dying: %vI_s1Rr
                 jmp _c2eD
                     # r_dying: %vI_s1Ru
 }}}


 {{{
 ==================== Registers allocated ====================
         movl 88(%esp),%ecx
         movl %eax,100(%esp)
         movl %ecx,%eax
         lock
         movl 100(%esp),%ecx
         cmpxchgl %ecx,(%edx)
         jmp _c2eD
 }}}

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


More information about the ghc-tickets mailing list