diff options
author | Giovanni Bajo <rasky@develer.com> | 2018-05-01 00:57:57 +0200 |
---|---|---|
committer | Giovanni Bajo <rasky@develer.com> | 2018-05-14 14:44:55 +0000 |
commit | 3c8545c5f6f6db7de1e9c8186fa9f23f4820ad45 (patch) | |
tree | 62696213febf008b4ce28dfdd1cfca549967933e /src/cmd/compile/internal/ssa/poset.go | |
parent | 67656ba71b54779d9f98995a12ed87e7c7618cad (diff) | |
download | go-3c8545c5f6f6db7de1e9c8186fa9f23f4820ad45.tar.gz go-3c8545c5f6f6db7de1e9c8186fa9f23f4820ad45.zip |
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>
Diffstat (limited to 'src/cmd/compile/internal/ssa/poset.go')
-rw-r--r-- | src/cmd/compile/internal/ssa/poset.go | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/cmd/compile/internal/ssa/poset.go b/src/cmd/compile/internal/ssa/poset.go index 26a689404d..37b607977c 100644 --- a/src/cmd/compile/internal/ssa/poset.go +++ b/src/cmd/compile/internal/ssa/poset.go @@ -152,13 +152,8 @@ type poset struct { undo []posetUndo // undo chain } -func newPoset(unsigned bool) *poset { - var flags uint8 - if unsigned { - flags |= posetFlagUnsigned - } +func newPoset() *poset { return &poset{ - flags: flags, values: make(map[ID]uint32), constants: make([]*Value, 0, 8), nodes: make([]posetNode, 1, 16), @@ -168,6 +163,14 @@ func newPoset(unsigned bool) *poset { } } +func (po *poset) SetUnsigned(uns bool) { + if uns { + po.flags |= posetFlagUnsigned + } else { + po.flags &^= posetFlagUnsigned + } +} + // Handle children func (po *poset) setchl(i uint32, l posetEdge) { po.nodes[i].l = l } func (po *poset) setchr(i uint32, r posetEdge) { po.nodes[i].r = r } |