]> Cypherpunks repositories - gostls13.git/commit
[release-branch.go1.8] cmd/compile: fix subword store/load elision for amd64, x86...
authorDavid Chase <drchase@google.com>
Tue, 30 May 2017 20:06:59 +0000 (16:06 -0400)
committerRuss Cox <rsc@golang.org>
Fri, 20 Oct 2017 16:33:53 +0000 (12:33 -0400)
commit6643c252bf235fe87ac4c79b621f19ef14faa8a2
tree25ab7c81613bc1834ebc0ef90910dda00c715027
parent64f53b2573c3eb6fce9a63d395d911bf560e85f0
[release-branch.go1.8] cmd/compile: fix subword store/load elision for amd64, x86, arm

Replacing byteload-of-bytestore-of-x with x is incorrect
when x contains a larger-than-byte value (and so on for
16 and 32-bit load/store pairs).  Replace "x" with the
appropriate zero/sign extension of x, which if unnecessary
will be repaired by other rules.

Made logic for arm match x86 and amd64; yields minor extra
optimization, plus I am (much) more confident it's correct,
despite inability to reproduce bug on arm.

Ppc64 lacks this optimization, hence lacks this problem.

See related https://golang.org/cl/37154/
Fixes #20530.

[Merge conflicts in generated rewrite files resolved by
regenerating from scratch, using the programs in ssa/gen.]

Change-Id: I6af9cac2ad43bee99cafdcb04725ce7e55a43323
Reviewed-on: https://go-review.googlesource.com/44355
Run-TryBot: David Chase <drchase@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/ssa/gen/386.rules
src/cmd/compile/internal/ssa/gen/AMD64.rules
src/cmd/compile/internal/ssa/gen/ARM.rules
src/cmd/compile/internal/ssa/rewrite386.go
src/cmd/compile/internal/ssa/rewriteAMD64.go
src/cmd/compile/internal/ssa/rewriteARM.go
test/fixedbugs/issue20530.go [new file with mode: 0644]