diff options
Diffstat (limited to 'src/cmd/compile/internal/ssa/schedule.go')
| -rw-r--r-- | src/cmd/compile/internal/ssa/schedule.go | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/ssa/schedule.go b/src/cmd/compile/internal/ssa/schedule.go index 4e762f7b3f..d88c33f304 100644 --- a/src/cmd/compile/internal/ssa/schedule.go +++ b/src/cmd/compile/internal/ssa/schedule.go @@ -5,6 +5,7 @@ package ssa import ( + "cmd/compile/internal/base" "cmd/compile/internal/types" "container/heap" "sort" @@ -365,6 +366,34 @@ func schedule(f *Func) { } } + // Remove SPanchored now that we've scheduled. + for _, b := range f.Blocks { + for _, v := range b.Values { + for i, a := range v.Args { + if a.Op == OpSPanchored { + v.SetArg(i, a.Args[0]) + } + } + } + } + for _, b := range f.Blocks { + i := 0 + for _, v := range b.Values { + if v.Op == OpSPanchored { + // Free this value + if v.Uses != 0 { + base.Fatalf("SPAnchored still has %d uses", v.Uses) + } + v.resetArgs() + f.freeValue(v) + } else { + b.Values[i] = v + i++ + } + } + b.truncateValues(i) + } + f.scheduled = true } |
