diff options
author | Cherry Zhang <cherryyz@google.com> | 2021-04-11 14:33:28 -0400 |
---|---|---|
committer | Cherry Zhang <cherryyz@google.com> | 2021-04-12 16:44:49 +0000 |
commit | 70ed28e5f763d08ee0d3be7bde14b35ce3d6322e (patch) | |
tree | 9f354dc074b2fec5cd4318c3c8f6fa5a43d412c9 /src/cmd/compile/internal/ssa/rewrite.go | |
parent | 585b52261c1b4e26b029616581ee0e891ad49183 (diff) | |
download | go-70ed28e5f763d08ee0d3be7bde14b35ce3d6322e.tar.gz go-70ed28e5f763d08ee0d3be7bde14b35ce3d6322e.zip |
cmd/compile: support memmove inlining with register args
The rule that inlines memmove expects SSA ops that calls memmove
with arguments in memory. This CL adds a version that matches
it with arguments in registers, so the optimization works for
both situations.
Change-Id: Ideb64f65b7521481ab2ca7c9975a6cf7b70d5966
Reviewed-on: https://go-review.googlesource.com/c/go/+/309332
Trust: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'src/cmd/compile/internal/ssa/rewrite.go')
-rw-r--r-- | src/cmd/compile/internal/ssa/rewrite.go | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/cmd/compile/internal/ssa/rewrite.go b/src/cmd/compile/internal/ssa/rewrite.go index f9ad980172..b8a9062d83 100644 --- a/src/cmd/compile/internal/ssa/rewrite.go +++ b/src/cmd/compile/internal/ssa/rewrite.go @@ -859,13 +859,13 @@ func disjoint(p1 *Value, n1 int64, p2 *Value, n2 int64) bool { if p2.Op == OpAddr || p2.Op == OpLocalAddr || p2.Op == OpSP { return true } - return p2.Op == OpArg && p1.Args[0].Op == OpSP - case OpArg: + return (p2.Op == OpArg || p2.Op == OpArgIntReg) && p1.Args[0].Op == OpSP + case OpArg, OpArgIntReg: if p2.Op == OpSP || p2.Op == OpLocalAddr { return true } case OpSP: - return p2.Op == OpAddr || p2.Op == OpLocalAddr || p2.Op == OpArg || p2.Op == OpSP + return p2.Op == OpAddr || p2.Op == OpLocalAddr || p2.Op == OpArg || p2.Op == OpArgIntReg || p2.Op == OpSP } return false } |