]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal: reuse memory for valueToProgAfter
authorHeschi Kreinick <heschi@google.com>
Mon, 29 Jan 2018 22:01:41 +0000 (17:01 -0500)
committerHeschi Kreinick <heschi@google.com>
Wed, 14 Feb 2018 18:29:23 +0000 (18:29 +0000)
Not a big improvement, but does help edge cases like the SSA package.
Change-Id: I40e531110b97efd5f45955be477fd0f4faa8d545
Reviewed-on: https://go-review.googlesource.com/92396
Run-TryBot: Heschi Kreinick <heschi@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
src/cmd/compile/internal/gc/ssa.go
src/cmd/compile/internal/ssa/cache.go

index b512b10e0128d36f3718905a5fee1b242d95e466..b746eec6902fbc821270c363b32352147e90e5a4 100644 (file)
@@ -4653,7 +4653,13 @@ func genssa(f *ssa.Func, pp *Progs) {
        s.ScratchFpMem = e.scratchFpMem
 
        if Ctxt.Flag_locationlists {
-               valueToProgAfter = make([]*obj.Prog, f.NumValues())
+               if cap(f.Cache.ValueToProgAfter) < f.NumValues() {
+                       f.Cache.ValueToProgAfter = make([]*obj.Prog, f.NumValues())
+               }
+               valueToProgAfter = f.Cache.ValueToProgAfter[:f.NumValues()]
+               for i := range valueToProgAfter {
+                       valueToProgAfter[i] = nil
+               }
        }
 
        // Emit basic blocks
index caaac0b3873402ce734aa5b2a979c0c8574e6909..299c804dd9f12dceba0dec99cac4a903c495e7c7 100644 (file)
@@ -4,7 +4,10 @@
 
 package ssa
 
-import "sort"
+import (
+       "cmd/internal/obj"
+       "sort"
+)
 
 // A Cache holds reusable compiler state.
 // It is intended to be re-used for multiple Func compilations.
@@ -21,12 +24,13 @@ type Cache struct {
        domblockstore []ID         // scratch space for computing dominators
        scrSparse     []*sparseSet // scratch sparse sets to be re-used.
 
-       blockDebug      []BlockDebug
-       valueNames      [][]SlotID
-       slotLocs        []VarLoc
-       regContents     [][]SlotID
-       pendingEntries  []pendingEntry
-       pendingSlotLocs []VarLoc
+       ValueToProgAfter []*obj.Prog
+       blockDebug       []BlockDebug
+       valueNames       [][]SlotID
+       slotLocs         []VarLoc
+       regContents      [][]SlotID
+       pendingEntries   []pendingEntry
+       pendingSlotLocs  []VarLoc
 
        liveSlotSliceBegin int
        liveSlots          []liveSlot