aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/likelyadjust.go
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2016-09-16 13:50:18 -0700
committerKeith Randall <khr@golang.org>2016-09-19 16:00:13 +0000
commit75ce89c20dab10857ab0b5102001b34767c45b6e (patch)
treeb6d0086e53b0187137ca606d54e10d799d7f2761 /src/cmd/compile/internal/ssa/likelyadjust.go
parent2679282da4e437ee086ec791ab73181c39ae3463 (diff)
downloadgo-75ce89c20dab10857ab0b5102001b34767c45b6e.tar.gz
go-75ce89c20dab10857ab0b5102001b34767c45b6e.zip
cmd/compile: cache CFG-dependent computations
We compute a lot of stuff based off the CFG: postorder traversal, dominators, dominator tree, loop nest. Multiple phases use this information and we end up recomputing some of it. Add a cache for this information so if the CFG hasn't changed, we can reuse the previous computation. Change-Id: I9b5b58af06830bd120afbee9cfab395a0a2f74b2 Reviewed-on: https://go-review.googlesource.com/29356 Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'src/cmd/compile/internal/ssa/likelyadjust.go')
-rw-r--r--src/cmd/compile/internal/ssa/likelyadjust.go9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/cmd/compile/internal/ssa/likelyadjust.go b/src/cmd/compile/internal/ssa/likelyadjust.go
index 2c3e02bd30..38a5e81f91 100644
--- a/src/cmd/compile/internal/ssa/likelyadjust.go
+++ b/src/cmd/compile/internal/ssa/likelyadjust.go
@@ -120,8 +120,8 @@ func likelyadjust(f *Func) {
certain := make([]int8, f.NumBlocks()) // In the long run, all outcomes are at least this bad. Mainly for Exit
local := make([]int8, f.NumBlocks()) // for our immediate predecessors.
- nest := loopnestfor(f)
- po := nest.po
+ po := f.postorder()
+ nest := f.loopnest()
b2l := nest.b2l
for _, b := range po {
@@ -260,9 +260,8 @@ func (l *loop) nearestOuterLoop(sdom SparseTree, b *Block) *loop {
}
func loopnestfor(f *Func) *loopnest {
- po := postorder(f)
- dom := dominators(f)
- sdom := newSparseTree(f, dom)
+ po := f.postorder()
+ sdom := f.sdom()
b2l := make([]*loop, f.NumBlocks())
loops := make([]*loop, 0)