mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
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>
This commit is contained in:
parent
2679282da4
commit
75ce89c20d
18 changed files with 83 additions and 59 deletions
|
|
@ -250,7 +250,6 @@ var passes = [...]pass{
|
|||
{name: "opt", fn: opt, required: true}, // TODO: split required rules and optimizing rules
|
||||
{name: "zero arg cse", fn: zcse, required: true}, // required to merge OpSB values
|
||||
{name: "opt deadcode", fn: deadcode, required: true}, // remove any blocks orphaned during opt
|
||||
{name: "generic domtree", fn: domTree},
|
||||
{name: "generic cse", fn: cse},
|
||||
{name: "phiopt", fn: phiopt},
|
||||
{name: "nilcheckelim", fn: nilcheckelim},
|
||||
|
|
@ -308,12 +307,6 @@ var passOrder = [...]constraint{
|
|||
{"opt", "nilcheckelim"},
|
||||
// tighten should happen before lowering to avoid splitting naturally paired instructions such as CMP/SET
|
||||
{"tighten", "lower"},
|
||||
// cse, phiopt, nilcheckelim, prove and loopbce share idom.
|
||||
{"generic domtree", "generic cse"},
|
||||
{"generic domtree", "phiopt"},
|
||||
{"generic domtree", "nilcheckelim"},
|
||||
{"generic domtree", "prove"},
|
||||
{"generic domtree", "loopbce"},
|
||||
// tighten will be most effective when as many values have been removed as possible
|
||||
{"generic deadcode", "tighten"},
|
||||
{"generic cse", "tighten"},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue