mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: reduce allocations in prove by reusing posets
In prove, reuse posets between different functions by storing them in the per-worker cache. Allocation count regression caused by prove improvements is down from 5% to 3% after this CL. Updates #25179 Change-Id: I6d14003109833d9b3ef5165fdea00aa9c9e952e8 Reviewed-on: https://go-review.googlesource.com/110455 Run-TryBot: Giovanni Bajo <rasky@develer.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
67656ba71b
commit
3c8545c5f6
5 changed files with 48 additions and 11 deletions
|
|
@ -130,6 +130,21 @@ func (f *Func) retSparseMap(ss *sparseMap) {
|
|||
f.Cache.scrSparseMap = append(f.Cache.scrSparseMap, ss)
|
||||
}
|
||||
|
||||
// newPoset returns a new poset from the internal cache
|
||||
func (f *Func) newPoset() *poset {
|
||||
if len(f.Cache.scrPoset) > 0 {
|
||||
po := f.Cache.scrPoset[len(f.Cache.scrPoset)-1]
|
||||
f.Cache.scrPoset = f.Cache.scrPoset[:len(f.Cache.scrPoset)-1]
|
||||
return po
|
||||
}
|
||||
return newPoset()
|
||||
}
|
||||
|
||||
// retPoset returns a poset to the internal cache
|
||||
func (f *Func) retPoset(po *poset) {
|
||||
f.Cache.scrPoset = append(f.Cache.scrPoset, po)
|
||||
}
|
||||
|
||||
// newValue allocates a new Value with the given fields and places it at the end of b.Values.
|
||||
func (f *Func) newValue(op Op, t *types.Type, b *Block, pos src.XPos) *Value {
|
||||
var v *Value
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue