regalloc expects to find all OpSP and OpSB values
in the entry block.
There is no value to moving them; don't.
Change-Id: I775198f03ce7420348721ffc5e7d2bab065465b1
Reviewed-on: https://go-review.googlesource.com/13266
Reviewed-by: Keith Randall <khr@golang.org>
var oldSched []*Value
- // Hack to find sp and sb Values and assign them a register. (TODO: make not so hacky)
+ // Hack to find sp and sb Values and assign them a register.
+ // TODO: make not so hacky; update the tighten pass when this is done
var sp, sb *Value
for _, v := range f.Entry.Values {
switch v.Op {
if v.Op == OpPhi {
continue
}
+ if v.Op == OpSB || v.Op == OpSP {
+ // regalloc expects OpSP and OpSB values to be in the entry block,
+ // so don't move them.
+ // TODO: Handle this more gracefully in regalloc and
+ // remove this restriction.
+ continue
+ }
if uses[v.ID] == 1 && !phi[v.ID] && home[v.ID] != b && len(v.Args) < 2 {
// v is used in exactly one block, and it is not b.
// Furthermore, it takes at most one input,