]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: avoid zero extensions after 32-bit shifts
authorGiovanni Bajo <rasky@develer.com>
Sun, 29 Mar 2020 12:21:12 +0000 (14:21 +0200)
committerGiovanni Bajo <rasky@develer.com>
Mon, 30 Mar 2020 19:58:50 +0000 (19:58 +0000)
zeroUpper32Bits wasn't checking for shift-extension ops. This would not
check shifts that were marking as bounded by prove (normally, shifts
are wrapped in a sequence that ends with an ANDL, and zeroUpper32Bits
would see the ANDL).

This produces no changes on generated output right now, but will be
important once CL196679 lands because many shifts will be marked
as bounded, and lower will stop generating the masking code sequence
around them.

Change-Id: Iaea94acc5b60bb9a5021c9fb7e4a1e2e5244435e
Reviewed-on: https://go-review.googlesource.com/c/go/+/226338
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/ssa/rewrite.go

index 878b15eeee9db1131ffbc994c3165f83b6fba294..51dba5eb717a7632967d562ec328f3ffa599e93b 100644 (file)
@@ -990,7 +990,9 @@ func zeroUpper32Bits(x *Value, depth int) bool {
                OpAMD64ORLload, OpAMD64XORLload, OpAMD64CVTTSD2SL,
                OpAMD64ADDL, OpAMD64ADDLconst, OpAMD64SUBL, OpAMD64SUBLconst,
                OpAMD64ANDL, OpAMD64ANDLconst, OpAMD64ORL, OpAMD64ORLconst,
-               OpAMD64XORL, OpAMD64XORLconst, OpAMD64NEGL, OpAMD64NOTL:
+               OpAMD64XORL, OpAMD64XORLconst, OpAMD64NEGL, OpAMD64NOTL,
+               OpAMD64SHRL, OpAMD64SHRLconst, OpAMD64SARL, OpAMD64SARLconst,
+               OpAMD64SHLL, OpAMD64SHLLconst:
                return true
        case OpArg:
                return x.Type.Width == 4