Fixes #46186
Change-Id: Idb0674079f9484593e07cca172dfbb19be0e594d
GitHub-Last-Rev:
615fc5365510ff7a39af7569f05a0013b724d0c9
GitHub-Pull-Request: golang/go#46185
Reviewed-on: https://go-review.googlesource.com/c/go/+/320111
Reviewed-by: Ben Shi <powerman1st@163.com>
Reviewed-by: Keith Randall <khr@golang.org>
Trust: David Chase <drchase@google.com>
}
func (s *regAllocState) placeSpills() {
- f := s.f
-
- // Precompute some useful info.
- phiRegs := make([]regMask, f.NumBlocks())
- for _, b := range s.visitOrder {
- var m regMask
- for _, v := range b.Values {
- if v.Op != OpPhi {
- break
- }
- if r, ok := f.getHome(v.ID).(*Register); ok {
- m |= regMask(1) << uint(r.num)
- }
- }
- phiRegs[b.ID] = m
- }
-
mustBeFirst := func(op Op) bool {
return op.isLoweredGetClosurePtr() || op == OpPhi || op == OpArgIntReg || op == OpArgFloatReg
}