pass: remove redundant jumps and dangling labels (#81)

In jump-table-like constructs, the natural way of writing the code can sometimes produce redundant jumps or labels. Therefore some basic cleanup steps have been proposed. This diff adds two transforms:

1. Remove unconditional jumps to a label immediately following.
2. Remove labels with no references at all.

Fixes #75
This commit is contained in:
Michael McLoughlin
2019-04-15 19:42:11 -07:00
committed by GitHub
parent 57c23b967e
commit 2e7d06bc7a
12 changed files with 223 additions and 3 deletions

View File

@@ -212,6 +212,18 @@ func (f *Function) Instructions() []*Instruction {
return is
}
// Labels returns just the list of label nodes.
func (f *Function) Labels() []Label {
var lbls []Label
for _, n := range f.Nodes {
lbl, ok := n.(Label)
if ok {
lbls = append(lbls, lbl)
}
}
return lbls
}
// Stub returns the Go function declaration.
func (f *Function) Stub() string {
return "func " + f.Name + f.Signature.String()