mirror of
https://github.com/golang/go
synced 2024-10-05 16:31:21 -06:00
[dev.ssa] cmd/compile: don't move OpSP and OpSB values
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>
This commit is contained in:
parent
e13954981e
commit
6548b63d6b
@ -101,7 +101,8 @@ func regalloc(f *Func) {
|
||||
|
||||
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 {
|
||||
|
@ -57,6 +57,13 @@ func tighten(f *Func) {
|
||||
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,
|
||||
|
Loading…
Reference in New Issue
Block a user