go/src/cmd/compile/internal/ssa/copyelim.go

44 lines
766 B
Go
Raw Normal View History

// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package ssa
// copyelim removes all copies from f.
func copyelim(f *Func) {
for _, b := range f.Blocks {
for _, v := range b.Values {
for i, w := range v.Args {
x := w
for x.Op == OpCopy {
x = x.Args[0]
}
if x != w {
v.Args[i] = x
}
}
}
v := b.Control
if v != nil {
for v.Op == OpCopy {
v = v.Args[0]
}
b.Control = v
}
}
// Update named values.
for _, name := range f.Names {
values := f.NamedValues[name]
for i, v := range values {
x := v
for x.Op == OpCopy {
x = x.Args[0]
}
if x != v {
values[i] = v
}
}
}
}