mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: share dominator tree among many passes
These passes do not modify the dominator tree too much. % benchstat old.txt new.txt name old time/op new time/op delta Template 335ms ± 3% 325ms ± 8% ~ (p=0.074 n=8+9) GoTypes 1.05s ± 1% 1.05s ± 3% ~ (p=0.095 n=9+10) Compiler 5.37s ± 4% 5.29s ± 1% -1.42% (p=0.022 n=9+10) MakeBash 34.9s ± 3% 34.4s ± 2% ~ (p=0.095 n=9+10) name old alloc/op new alloc/op delta Template 55.4MB ± 0% 54.9MB ± 0% -0.81% (p=0.000 n=10+10) GoTypes 179MB ± 0% 178MB ± 0% -0.89% (p=0.000 n=10+10) Compiler 807MB ± 0% 798MB ± 0% -1.10% (p=0.000 n=10+10) name old allocs/op new allocs/op delta Template 498k ± 0% 496k ± 0% -0.29% (p=0.000 n=9+9) GoTypes 1.42M ± 0% 1.41M ± 0% -0.24% (p=0.000 n=10+10) Compiler 5.61M ± 0% 5.60M ± 0% -0.12% (p=0.000 n=10+10) Change-Id: I4cd20cfba3f132ebf371e16046ab14d7e42799ec Reviewed-on: https://go-review.googlesource.com/21806 Run-TryBot: Alexandru Moșoi <alexandru@mosoi.ro> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
a223ccae38
commit
9743e4b031
7 changed files with 36 additions and 17 deletions
|
|
@ -445,9 +445,6 @@ var (
|
|||
// else branch of the first comparison is executed, we already know that i < len(a).
|
||||
// The code for the second panic can be removed.
|
||||
func prove(f *Func) {
|
||||
idom := dominators(f)
|
||||
sdom := newSparseTree(f, idom)
|
||||
|
||||
// current node state
|
||||
type walkState int
|
||||
const (
|
||||
|
|
@ -471,8 +468,8 @@ func prove(f *Func) {
|
|||
for len(work) > 0 {
|
||||
node := work[len(work)-1]
|
||||
work = work[:len(work)-1]
|
||||
parent := idom[node.block.ID]
|
||||
branch := getBranch(sdom, parent, node.block)
|
||||
parent := f.idom[node.block.ID]
|
||||
branch := getBranch(f.sdom, parent, node.block)
|
||||
|
||||
switch node.state {
|
||||
case descend:
|
||||
|
|
@ -491,7 +488,7 @@ func prove(f *Func) {
|
|||
block: node.block,
|
||||
state: simplify,
|
||||
})
|
||||
for s := sdom.Child(node.block); s != nil; s = sdom.Sibling(s) {
|
||||
for s := f.sdom.Child(node.block); s != nil; s = f.sdom.Sibling(s) {
|
||||
work = append(work, bp{
|
||||
block: s,
|
||||
state: descend,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue