aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/deadcode.go
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josharian@gmail.com>2015-08-10 12:15:52 -0700
committerJosh Bleecher Snyder <josharian@gmail.com>2015-08-13 21:56:06 +0000
commit35fb514596b970a73be972fa917fa23ca74f7be6 (patch)
tree5ce389c4fcba4fe2de5be2b813a7e38363fb2978 /src/cmd/compile/internal/ssa/deadcode.go
parent3e7904b648791e8d9df4930aed645ae7bbda5f94 (diff)
downloadgo-35fb514596b970a73be972fa917fa23ca74f7be6.tar.gz
go-35fb514596b970a73be972fa917fa23ca74f7be6.zip
[dev.ssa] cmd/compile: add HTML SSA printer
This is an initial implementation. There are many rough edges and TODOs, which will hopefully be polished out with use. Fixes #12071. Change-Id: I1d6fd5a343063b5200623bceef2c2cfcc885794e Reviewed-on: https://go-review.googlesource.com/13472 Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/ssa/deadcode.go')
-rw-r--r--src/cmd/compile/internal/ssa/deadcode.go17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/cmd/compile/internal/ssa/deadcode.go b/src/cmd/compile/internal/ssa/deadcode.go
index 426e6865c0..109b3dd09f 100644
--- a/src/cmd/compile/internal/ssa/deadcode.go
+++ b/src/cmd/compile/internal/ssa/deadcode.go
@@ -4,10 +4,10 @@
package ssa
-// deadcode removes dead code from f.
-func deadcode(f *Func) {
+// findlive returns the reachable blocks and live values in f.
+func findlive(f *Func) (reachable []bool, live []bool) {
// Find all reachable basic blocks.
- reachable := make([]bool, f.NumBlocks())
+ reachable = make([]bool, f.NumBlocks())
reachable[f.Entry.ID] = true
p := []*Block{f.Entry} // stack-like worklist
for len(p) > 0 {
@@ -24,8 +24,8 @@ func deadcode(f *Func) {
}
// Find all live values
- live := make([]bool, f.NumValues()) // flag to set for each live value
- var q []*Value // stack-like worklist of unscanned values
+ live = make([]bool, f.NumValues()) // flag to set for each live value
+ var q []*Value // stack-like worklist of unscanned values
// Starting set: all control values of reachable blocks are live.
for _, b := range f.Blocks {
@@ -54,6 +54,13 @@ func deadcode(f *Func) {
}
}
+ return reachable, live
+}
+
+// deadcode removes dead code from f.
+func deadcode(f *Func) {
+ reachable, live := findlive(f)
+
// Remove dead values from blocks' value list. Return dead
// value ids to the allocator.
for _, b := range f.Blocks {