aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/malloc.go
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2017-09-21 12:52:38 -0700
committerKeith Randall <khr@golang.org>2017-09-26 16:24:08 +0000
commit3f04db41a8dbf6f64304f3e1d34b4c7775fbe55e (patch)
treeb92aaa507b35ac8c974fddfec084a232290b098b /src/runtime/malloc.go
parent08a17966712f6edf1600e3eafb7758a153b55ec4 (diff)
downloadgo-3f04db41a8dbf6f64304f3e1d34b4c7775fbe55e.tar.xz
cmd/compile: fix sign-extension merging rules
If we have y = <int16> (MOVBQSX x) z = <int32> (MOVWQSX y) We used to use this rewrite rule: (MOVWQSX x:(MOVBQSX _)) -> x But that resulted in replacing z with a value whose type is only int16. Then if z is spilled and restored, it gets zero extended instead of sign extended. Instead use the rule (MOVWQSX (MOVBQSX x)) -> (MOVBQSX x) The result is has the correct type, so it can be spilled and restored correctly. It might mean that a few more extension ops might not be eliminated, but that's the price for correctness. Fixes #21963 Change-Id: I6ec82c3d2dbe43cc1fee6fb2bd6b3a72fca3af00 Reviewed-on: https://go-review.googlesource.com/65290 Reviewed-by: Cherry Zhang <cherryyz@google.com> Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/runtime/malloc.go')
0 files changed, 0 insertions, 0 deletions