]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: enforce that MOVXconvert is a no-op on 386 and amd64
authorJosh Bleecher Snyder <josharian@gmail.com>
Thu, 24 Aug 2017 18:31:58 +0000 (11:31 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Fri, 25 Aug 2017 19:39:46 +0000 (19:39 +0000)
Follow-up to CL 58371.

Change-Id: I3d2aaec84ee6db3ef1bd4fcfcaf46cc297c7176b
Reviewed-on: https://go-review.googlesource.com/58610
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/amd64/ssa.go
src/cmd/compile/internal/x86/ssa.go

index 4bc9dae83199884aaa5f8b4ef3034ece862bb33a..fbd0a9e46cf1309c8e97631c9280809f2b05142a 100644 (file)
@@ -731,7 +731,11 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
                p.To.Sym = gc.Duffcopy
                p.To.Offset = v.AuxInt
 
-       case ssa.OpCopy, ssa.OpAMD64MOVQconvert, ssa.OpAMD64MOVLconvert: // TODO: use MOVQreg for reg->reg copies instead of OpCopy?
+       case ssa.OpAMD64MOVQconvert, ssa.OpAMD64MOVLconvert:
+               if v.Args[0].Reg() != v.Reg() {
+                       v.Fatalf("MOVXconvert should be a no-op")
+               }
+       case ssa.OpCopy: // TODO: use MOVQreg for reg->reg copies instead of OpCopy?
                if v.Type.IsMemory() {
                        return
                }
index 54a76bda2f8a7cc30ec71e002aee7a573355a8b4..a491599c582ec4cfe73efa0080f9e7856a911e14 100644 (file)
@@ -604,7 +604,11 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
                p.To.Sym = gc.Duffcopy
                p.To.Offset = v.AuxInt
 
-       case ssa.OpCopy, ssa.Op386MOVLconvert: // TODO: use MOVLreg for reg->reg copies instead of OpCopy?
+       case ssa.Op386MOVLconvert:
+               if v.Args[0].Reg() != v.Reg() {
+                       v.Fatalf("MOVLconvert should be a no-op")
+               }
+       case ssa.OpCopy: // TODO: use MOVLreg for reg->reg copies instead of OpCopy?
                if v.Type.IsMemory() {
                        return
                }