mirror of
https://github.com/golang/go
synced 2024-11-23 14:50:07 -07:00
cmd/compile: store call args in the call block
We already do this for OpStore, but we didn't do this for OpMove. Do the same, to ensure that no two memories are live at the same time. Fixes #41846. Change-Id: Iad77ff031b3c4459d1217e0b04aeb0e692eb474d Reviewed-on: https://go-review.googlesource.com/c/go/+/260237 Trust: Cherry Zhang <cherryyz@google.com> Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
0941dc446e
commit
ccf89bef43
@ -283,7 +283,7 @@ func expandCalls(f *Func) {
|
||||
// TODO this will be more complicated with registers in the picture.
|
||||
src := a.Args[0]
|
||||
dst := f.ConstOffPtrSP(src.Type, aux.OffsetOfArg(auxI), sp)
|
||||
if a.Uses == 1 {
|
||||
if a.Uses == 1 && a.Block == v.Block {
|
||||
a.reset(OpMove)
|
||||
a.Pos = pos
|
||||
a.Type = types.TypeMem
|
||||
@ -292,7 +292,7 @@ func expandCalls(f *Func) {
|
||||
a.SetArgs3(dst, src, mem)
|
||||
mem = a
|
||||
} else {
|
||||
mem = a.Block.NewValue3A(pos, OpMove, types.TypeMem, aux.TypeOfArg(auxI), dst, src, mem)
|
||||
mem = v.Block.NewValue3A(pos, OpMove, types.TypeMem, aux.TypeOfArg(auxI), dst, src, mem)
|
||||
mem.AuxInt = aux.SizeOfArg(auxI)
|
||||
}
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user