[dev.ssa] cmd/compile/internal/ssa: simplify convert in more cases
Saves about 2k for binaries in pkg/tool/linux_amd64.
Also useful when opt runs after cse (as in 12960) which reorders
arguments for commutative operations such as Add64.
Change-Id: I49ad53afa53db9736bd35c425f4fb35fb511fd63
Reviewed-on: https://go-review.googlesource.com/19827
Run-TryBot: Alexandru Moșoi <alexandru@mosoi.ro>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
diff --git a/src/cmd/compile/internal/ssa/rewritegeneric.go b/src/cmd/compile/internal/ssa/rewritegeneric.go
index 7916c6d..08ab2e1 100644
--- a/src/cmd/compile/internal/ssa/rewritegeneric.go
+++ b/src/cmd/compile/internal/ssa/rewritegeneric.go
@@ -1428,6 +1428,27 @@
v.AddArg(off)
return true
}
+ // match: (Convert (Add64 off (Convert ptr mem)) mem)
+ // cond:
+ // result: (Add64 ptr off)
+ for {
+ if v.Args[0].Op != OpAdd64 {
+ break
+ }
+ off := v.Args[0].Args[0]
+ if v.Args[0].Args[1].Op != OpConvert {
+ break
+ }
+ ptr := v.Args[0].Args[1].Args[0]
+ mem := v.Args[0].Args[1].Args[1]
+ if v.Args[1] != mem {
+ break
+ }
+ v.reset(OpAdd64)
+ v.AddArg(ptr)
+ v.AddArg(off)
+ return true
+ }
// match: (Convert (Convert ptr mem) mem)
// cond:
// result: ptr