mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
30 lines
545 B
Go
30 lines
545 B
Go
|
|
// 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
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|