mirror of
https://github.com/golang/go.git
synced 2025-05-28 19:02:22 +00:00
cmd/compile/internal/ssa: erase register copies deterministically
Fixes #17288. Change-Id: I2ddd01d14667d5c6a2e19bd70489da8d9869d308 Reviewed-on: https://go-review.googlesource.com/30072 Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
c1e06dcb61
commit
6dc356a76a
@ -1707,14 +1707,24 @@ sinking:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Erase any copies we never used
|
// Erase any copies we never used.
|
||||||
for c, used := range s.copies {
|
// Also, an unused copy might be the only use of another copy,
|
||||||
if !used && c.Uses == 0 {
|
// so continue erasing until we reach a fixed point.
|
||||||
if s.f.pass.debug > regDebug {
|
for {
|
||||||
fmt.Printf("delete copied value %s\n", c.LongString())
|
progress := false
|
||||||
|
for c, used := range s.copies {
|
||||||
|
if !used && c.Uses == 0 {
|
||||||
|
if s.f.pass.debug > regDebug {
|
||||||
|
fmt.Printf("delete copied value %s\n", c.LongString())
|
||||||
|
}
|
||||||
|
c.Args[0].Uses--
|
||||||
|
f.freeValue(c)
|
||||||
|
delete(s.copies, c)
|
||||||
|
progress = true
|
||||||
}
|
}
|
||||||
c.Args[0].Uses--
|
}
|
||||||
f.freeValue(c)
|
if !progress {
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user