cmd/compile: do not treat OpLocalAddr as load in DSE

Fixes #70409
Fixes #47107

Change-Id: I82a66c46f6b76c68e156b5d937273b0316975d44
Reviewed-on: https://go-review.googlesource.com/c/go/+/629016
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
Youlin Feng 2024-11-18 17:34:20 +08:00 committed by Keith Randall
parent 5cb5437b6d
commit 0825475599
2 changed files with 21 additions and 2 deletions

View File

@ -52,9 +52,8 @@ func dse(f *Func) {
if v.Op == OpLocalAddr {
if _, ok := localAddrs[v.Aux]; !ok {
localAddrs[v.Aux] = v
} else {
continue
}
continue
}
if v.Op == OpInlMark {
// Not really a use of the memory. See #67957.

View File

@ -0,0 +1,20 @@
// asmcheck -gcflags=-d=ssa/check/on
// Copyright 2024 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 codegen
// amd64:-"MOVQ"
func foo(v uint64) (b [8]byte) {
b[0] = byte(v)
b[1] = byte(v >> 8)
b[2] = byte(v >> 16)
b[3] = byte(v >> 24)
b[4] = byte(v >> 32)
b[5] = byte(v >> 40)
b[6] = byte(v >> 48)
b[7] = byte(v >> 56)
return b
}