From b8644e324355137bc7b2abe290235e0197df9b13 Mon Sep 17 00:00:00 2001 From: Heschi Kreinick Date: Mon, 29 Jan 2018 17:01:41 -0500 Subject: [PATCH] cmd/compile/internal: reuse memory for valueToProgAfter 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 TryBot-Result: Gobot Gobot Reviewed-by: David Chase --- src/cmd/compile/internal/gc/ssa.go | 8 +++++++- src/cmd/compile/internal/ssa/cache.go | 18 +++++++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go index b512b10e01..b746eec690 100644 --- a/src/cmd/compile/internal/gc/ssa.go +++ b/src/cmd/compile/internal/gc/ssa.go @@ -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 diff --git a/src/cmd/compile/internal/ssa/cache.go b/src/cmd/compile/internal/ssa/cache.go index caaac0b387..299c804dd9 100644 --- a/src/cmd/compile/internal/ssa/cache.go +++ b/src/cmd/compile/internal/ssa/cache.go @@ -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 -- 2.50.0