diff options
author | Keith Randall <khr@golang.org> | 2015-05-28 16:45:33 -0700 |
---|---|---|
committer | Keith Randall <khr@golang.org> | 2015-05-30 06:08:26 +0000 |
commit | a9cec30fdcc549282e0a5d520edb2eaf60f3061a (patch) | |
tree | dbcd629c320607cb71e523e25e27349add3eed29 /src/cmd/compile/internal/ssa/deadcode.go | |
parent | b0da62903d045f6d3e832ba1181387a1e9ad33f1 (diff) | |
download | go-a9cec30fdcc549282e0a5d520edb2eaf60f3061a.tar.gz go-a9cec30fdcc549282e0a5d520edb2eaf60f3061a.zip |
[dev.ssa] cmd/compile/internal/ssa: Implement block rewriting rules
Change-Id: I47e5349e34fc18118c4d35bf433f875b958cc3e5
Reviewed-on: https://go-review.googlesource.com/10495
Reviewed-by: Alan Donovan <adonovan@google.com>
Diffstat (limited to 'src/cmd/compile/internal/ssa/deadcode.go')
-rw-r--r-- | src/cmd/compile/internal/ssa/deadcode.go | 24 |
1 files changed, 2 insertions, 22 deletions
diff --git a/src/cmd/compile/internal/ssa/deadcode.go b/src/cmd/compile/internal/ssa/deadcode.go index a805861489..ba5d8758d9 100644 --- a/src/cmd/compile/internal/ssa/deadcode.go +++ b/src/cmd/compile/internal/ssa/deadcode.go @@ -14,30 +14,10 @@ func deadcode(f *Func) { reachable[f.Entry.ID] = true p := []*Block{f.Entry} // stack-like worklist for len(p) > 0 { - // pop a reachable block + // Pop a reachable block b := p[len(p)-1] p = p[:len(p)-1] - - // constant-fold conditionals - // TODO: rewrite rules instead? - if b.Kind == BlockIf && b.Control.Op == OpConst { - cond := b.Control.Aux.(bool) - var c *Block - if cond { - // then branch is always taken - c = b.Succs[1] - } else { - // else branch is always taken - c = b.Succs[0] - b.Succs[0] = b.Succs[1] - } - b.Succs[1] = nil // aid GC - b.Succs = b.Succs[:1] - removePredecessor(b, c) - b.Kind = BlockPlain - b.Control = nil - } - + // Mark successors as reachable for _, c := range b.Succs { if !reachable[c.ID] { reachable[c.ID] = true |