Two days old build breakage on i386.

Simon Marlow marlowsd at gmail.com
Fri Jun 27 11:14:08 UTC 2014


The problem is that this instruction requires three separate registers, 
but cmpxchgl already reads and writes %eax leaving only two free 
registers (%ecx and %edx).

You'll need to arrange to not use the complicated addressing modes with 
cmpxchg on i386, and keep the number of free regs required <= 2.

Really we ought to have 4 usable regs, but for that to happen we need to 
change the calling convention and swap R1 with Sp, but we can't easily 
do that because it needs a change in LLVM too (sigh).

Cheers,
Simon

On 26/06/2014 19:39, Johan Tibell wrote:
> Here's some more debug output. Can someone interpret it:
>
> genRaInsn
> cmpxchgl %vI_n1nF,8(%vI_n1nD,%vI_n1nE,4)
>      r_dying      =  [%vI_n1nD, %vI_n1nE, %vI_n1nF]
>      w_dying      =  []
>      virt_read    =  [%vI_n1nD, %vI_n1nE, %vI_n1nF]
>      virt_written =  []
>      freeregs     =  FreeRegs 4282318848
>      assig        =  [n1nD :-> InMem 0,
>                       n1nE :-> InReg (RealRegSingle 2), n1nF :-> InReg
> (RealRegSingle 3)]
> ghc-stage1: panic! (the 'impossible' happened)
>    (GHC version 7.9.20140626 for i386-unknown-linux):
> RegAllocLinear.allocRegsAndSpill: no spill candidates
>
>      allocating vreg:  VirtualRegI n1nD
>      assignment:       [(n1nD,InMem 0),(n1nE,InReg (RealRegSingle
> 2)),(n1nF,InReg (RealRegSingle 3))]
>      freeRegs:         FreeRegs 4282318848
>      initFreeRegs:     FreeRegs 4282318861
>
> (i.e. it's the cmpxchg instruction which is causing the failure.)
>
>
> On Thu, Jun 26, 2014 at 8:17 PM, Johan Tibell <johan.tibell at gmail.com
> <mailto:johan.tibell at gmail.com>> wrote:
>
>     I'm trying to understand the output from the register allocator:
>
>        (GHC version 7.9.20140626 for i386-unknown-linux):
>     RegAllocLinear.allocRegsAndSpill: no spill candidates
>
>          allocating vreg:  VirtualRegI n1nD
>          assignment:       [(n1nD,InMem 0),(n1nE,InReg (RealRegSingle
>     2)),(n1nF,InReg (RealRegSingle 3))]
>          freeRegs:         FreeRegs 4282318848
>          initFreeRegs:     FreeRegs 4282318861
>
>     Without understanding exactly what's wrong, the message above
>     suggests that we're trying to allocate a reg for n1nD, but there's
>     already an assignment for that virtual reg, is that right?
>
>
>
>     On Thu, Jun 26, 2014 at 3:05 PM, Johan Tibell
>     <johan.tibell at gmail.com <mailto:johan.tibell at gmail.com>> wrote:
>
>         Herbert pushed my revert for me a minute ago. Everyone should be
>         good once they sync.
>
>
>         On Thu, Jun 26, 2014 at 2:51 PM, Johan Tibell
>         <johan.tibell at gmail.com <mailto:johan.tibell at gmail.com>> wrote:
>
>             I guess you don't have
>             04dd7cb3423f1940242fdfe2ea2e3b8abd68a177 (which I pushed
>             this morning) which is fine. You should be in a good state
>             now when d8abf85f8ca176854e9d5d0b12371c4bc402aac3 is reverted.
>
>
>             On Thu, Jun 26, 2014 at 2:49 PM, Simon Peyton Jones
>             <simonpj at microsoft.com <mailto:simonpj at microsoft.com>> wrote:
>
>                 git revert d8abf85f8ca176854e9d5d0b12371c4bc402aac3 ____
>
>                 [master f958079] Revert "Add more primops for atomic ops
>                 on byte arrays"____
>
>                 23 files changed, 86 insertions(+), 1016 deletions(-)____
>
>                 rewrite compiler/nativeGen/CPrim.hs (62%)____
>
>                 delete mode 100644 libraries/ghc-prim/cbits/atomic.c____
>
>                 delete mode 100644
>                 testsuite/tests/concurrent/should_run/AtomicPrimops.hs____
>
>                 delete mode 100644
>                 testsuite/tests/concurrent/should_run/AtomicPrimops.stdout____
>
>                 HEAD $ git revert
>                 04dd7cb3423f1940242fdfe2ea2e3b8abd68a177 ____
>
>                 fatal: bad object
>                 04dd7cb3423f1940242fdfe2ea2e3b8abd68a177____
>
>                 HEAD $____
>
>                 What now?____
>
>                 Simon____
>
>                 __ __
>
>                 *From:*Johan Tibell [mailto:johan.tibell at gmail.com
>                 <mailto:johan.tibell at gmail.com>]
>                 *Sent:* 26 June 2014 13:25
>                 *To:* Simon Peyton Jones
>                 *Cc:* Karel Gardas; ghc-devs
>                 *Subject:* Re: Two days old build breakage on i386.____
>
>                 __ __
>
>                 Just to make sure this is the same breakage, are you on
>                 an i386 Windows machine? If so git
>                 revert d8abf85f8ca176854e9d5d0b12371c4bc402aac3
>                 and 04dd7cb3423f1940242fdfe2ea2e3b8abd68a177 to get
>                 unstuck.____
>
>                 __ __
>
>                 On Thu, Jun 26, 2014 at 2:13 PM, Simon Peyton Jones
>                 <simonpj at microsoft.com <mailto:simonpj at microsoft.com>>
>                 wrote:____
>
>                     Aaaargh!  Once again the Windows build is broken.  I
>                     am utterly stalled.
>
>                     Moreover -fregs-graph and -fregs-iterative now
>                     *silently* do nothing.  At least they should elicit
>                     warnings saying that they are disabled pending the
>                     fix to X and Y.
>
>                     Please can someone bisect to find out which patch is
>                     the culprit?
>
>                     I wish we had a more systematic way to find this
>                     out. I hate being the main person who gets stuck
>                     because some unrelated change has broken the Windows
>                     build.  (Thanks for Karel, who got to it a day
>                     before me.)
>
>                     Thanks
>
>                     Simon____
>
>
>                     | -----Original Message-----
>                     | From: ghc-devs
>                     [mailto:ghc-devs-bounces at haskell.org
>                     <mailto:ghc-devs-bounces at haskell.org>] On Behalf Of
>                     Karel
>                     | Gardas
>                     | Sent: 26 June 2014 09:56
>                     | To: ghc-devs; Johan Tibell
>                     | Subject: Two days old build breakage on i386.
>                     |
>                     |
>                     | Hello,
>                     |
>                     | builders running on i386 building for this
>                     platform caught issue which
>                     | shows as a build breakage:
>                     |
>                     | ghc-stage1: panic! (the 'impossible' happened)
>                     | (GHC version 7.9.20140624 for i386-unknown-linux):
>                     | RegAllocLinear.allocRegsAndSpill: no spill candidates
>                     | allocating vreg: VirtualRegI n1Q6
>                     | assignment: [(c1PV,InMem 2),(n1Q5,InBoth
>                     (RealRegSingle 3)
>                     | 0),(n1Q6,InMem 1),(n1Q7,InMem 3),(n1Q9,InReg
>                     (RealRegSingle 2))]
>                     | freeRegs: FreeRegs 4282318848
>                     | initFreeRegs: FreeRegs 4282318861
>                     | Please report this as a GHC bug:
>                     http://www.haskell.org/ghc/reportabug
>                     | make[1]: ***
>                     |
>                     [libraries/ghc-prim/dist-install/build/GHC/PrimopWrappers.o]
>                     Error 1
>                     | libraries/ghc-prim/ghc.mk:4 <http://ghc.mk:4>:
>                     recipe for target
>                     |
>                     'libraries/ghc-prim/dist-install/build/GHC/PrimopWrappers.o'
>                     failed
>                     |
>                     | Have a look for example on linux-i386 buildot log
>                     here:
>                     |
>                     http://haskell.inf.elte.hu/builders/validator1-linux-x86-head/18/7.html
>                     |
>                     | Anyway, this happens on Linux, FreeBSD and Solaris
>                     buildbots on i386 so
>                     | it's OS independent and probably 32bit/i386
>                     platform specific and it's
>                     | two days old breakage now. The last two night
>                     builds fail on all
>                     | mentioned buildbots. I'm not sure but perhaps:
>                     |
>                     | commit d8abf85f8ca176854e9d5d0b12371c4bc402aac3
>                     | Author: Johan Tibell <johan.tibell at gmail.com
>                     <mailto:johan.tibell at gmail.com>>
>                     | Date:   Mon Jun 9 11:43:21 2014 +0200
>                     |
>                     | triggers that issue? I'm not claiming that the
>                     commit is actual culprit,
>                     | this may be just recently un-hidden issue in
>                     linear regs allocator on
>                     | i386!
>                     |
>                     | Thanks!
>                     | Karel____
>
>                     | _______________________________________________
>                     | ghc-devs mailing list
>                     | ghc-devs at haskell.org <mailto:ghc-devs at haskell.org>
>                     | http://www.haskell.org/mailman/listinfo/ghc-devs____
>
>                 __ __
>
>
>
>
>


More information about the ghc-devs mailing list