Algorithmic improvements here are hard.
Lifting a lookup out of the loop helps a little, though.
To compile the code in #17926:
name old s/op new s/op delta
Real 146 ± 3% 140 ± 4% -3.87% (p=0.002 n=10+10)
User 143 ± 3% 139 ± 4% -3.08% (p=0.005 n=10+10)
Sys 8.28 ±35% 8.08 ±28% ~ (p=0.684 n=10+10)
Updates #17926.
Change-Id: Ic255ac8b7b409c1a53791058818b7e2cf574abe3
Reviewed-on: https://go-review.googlesource.com/33305
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
fmt.Printf(" processing %s\n", b)
}
+ currentRootLevel := s.level[currentRoot.ID]
for _, e := range b.Succs {
c := e.Block()
// TODO: if the variable is dead at c, skip it.
- if s.level[c.ID] > s.level[currentRoot.ID] {
+ if s.level[c.ID] > currentRootLevel {
// a D-edge, or an edge whose target is in currentRoot's subtree.
continue
}