From: Giovanni Bajo Date: Sun, 29 Mar 2020 12:21:12 +0000 (+0200) Subject: cmd/compile: avoid zero extensions after 32-bit shifts X-Git-Tag: go1.15beta1~713 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=14ad23d1f599199f89ba32cc4bc20049277ce9c1;p=gostls13.git cmd/compile: avoid zero extensions after 32-bit shifts 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 --- diff --git a/src/cmd/compile/internal/ssa/rewrite.go b/src/cmd/compile/internal/ssa/rewrite.go index 878b15eeee..51dba5eb71 100644 --- a/src/cmd/compile/internal/ssa/rewrite.go +++ b/src/cmd/compile/internal/ssa/rewrite.go @@ -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