With the exception of the shortcircuit pass, removePhiArg is always unconditionally followed by phiElimValue.
Move the phiElimValue inside removePhiArg.
Resolves a TODO.
See CL 357964 for more info.
Change-Id: I8460b35864f4cd7301ba86fc3dce08ec8041da7f
Reviewed-on: https://go-review.googlesource.com/c/go/+/465435
Reviewed-by: David Chase <drchase@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Run-TryBot: Jakub Ciolek <jakub@ciolek.dev>
// if v.Op != OpPhi {
// continue
// }
-// b.removeArg(v, i)
+// b.removePhiArg(v, i)
//
// }
func (b *Block) removePhiArg(phi *Value, i int) {
phi.Args[i] = phi.Args[n]
phi.Args[n] = nil
phi.Args = phi.Args[:n]
+ phielimValue(phi)
}
// LackingPos indicates whether b is a block whose position should be inherited
// splitting occasionally leads to a phi having
// a single argument (occurs with -N)
- // TODO(cuonglm,khr): replace this with phielimValue, and
- // make removePhiArg incorporates that.
- if len(b.Preds) == 1 {
- phi.Op = OpCopy
- }
// Don't increment i in this case because we moved
// an unprocessed predecessor down into slot i.
} else {
continue
}
c.removePhiArg(v, j)
- phielimValue(v)
// Note: this is trickier than it looks. Replacing
// a Phi with a Copy can in general cause problems because
// Phi and Copy don't have exactly the same semantics.
continue
}
b.removePhiArg(v, k)
- phielimValue(v)
}
// Fix up child to have one more predecessor.
child.Preds = append(child.Preds, Edge{p, pk.i})