]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.ssa] cmd/compile: zero register masks for each edge
authorKeith Randall <khr@golang.org>
Mon, 4 Jan 2016 21:34:54 +0000 (13:34 -0800)
committerKeith Randall <khr@golang.org>
Tue, 5 Jan 2016 20:20:18 +0000 (20:20 +0000)
Forgot to reset these masks before each merge edge is processed.

Change-Id: I2f593189b63f50a1cd12b2dd4645ca7b9614f1f3
Reviewed-on: https://go-review.googlesource.com/18223
Reviewed-by: David Chase <drchase@google.com>
Run-TryBot: David Chase <drchase@google.com>

src/cmd/compile/internal/ssa/regalloc.go

index 0f1068a337ed5be42d97c4636f315537f282e24c..d7c4674cfdc93bb19d408b4865be710a1cba69b0 100644 (file)
@@ -1052,6 +1052,9 @@ func (e *edgeState) setup(idx int, srcReg []endReg, dstReg []startReg, stacklive
        for k := range e.contents {
                delete(e.contents, k)
        }
+       e.usedRegs = 0
+       e.uniqueRegs = 0
+       e.finalRegs = 0
 
        // Live registers can be sources.
        for _, x := range srcReg {
@@ -1384,6 +1387,12 @@ func (e *edgeState) findRegFor(typ Type) Location {
                }
        }
 
+       fmt.Printf("m:%d unique:%d final:%d\n", m, e.uniqueRegs, e.finalRegs)
+       for vid, a := range e.cache {
+               for _, c := range a {
+                       fmt.Printf("v%d: %s %s\n", vid, c, e.s.f.getHome(c.ID).Name())
+               }
+       }
        e.s.f.Fatalf("can't find empty register on edge %s->%s", e.p, e.b)
        return nil
 }