aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/poset.go
diff options
context:
space:
mode:
authorGiovanni Bajo <rasky@develer.com>2018-05-01 00:57:57 +0200
committerGiovanni Bajo <rasky@develer.com>2018-05-14 14:44:55 +0000
commit3c8545c5f6f6db7de1e9c8186fa9f23f4820ad45 (patch)
tree62696213febf008b4ce28dfdd1cfca549967933e /src/cmd/compile/internal/ssa/poset.go
parent67656ba71b54779d9f98995a12ed87e7c7618cad (diff)
downloadgo-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.go15
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 }