mirror of
https://github.com/golang/go
synced 2024-11-17 12:54:47 -07:00
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 <khr@golang.org>
This commit is contained in:
parent
a265c2c448
commit
14ad23d1f5
@ -990,7 +990,9 @@ func zeroUpper32Bits(x *Value, depth int) bool {
|
|||||||
OpAMD64ORLload, OpAMD64XORLload, OpAMD64CVTTSD2SL,
|
OpAMD64ORLload, OpAMD64XORLload, OpAMD64CVTTSD2SL,
|
||||||
OpAMD64ADDL, OpAMD64ADDLconst, OpAMD64SUBL, OpAMD64SUBLconst,
|
OpAMD64ADDL, OpAMD64ADDLconst, OpAMD64SUBL, OpAMD64SUBLconst,
|
||||||
OpAMD64ANDL, OpAMD64ANDLconst, OpAMD64ORL, OpAMD64ORLconst,
|
OpAMD64ANDL, OpAMD64ANDLconst, OpAMD64ORL, OpAMD64ORLconst,
|
||||||
OpAMD64XORL, OpAMD64XORLconst, OpAMD64NEGL, OpAMD64NOTL:
|
OpAMD64XORL, OpAMD64XORLconst, OpAMD64NEGL, OpAMD64NOTL,
|
||||||
|
OpAMD64SHRL, OpAMD64SHRLconst, OpAMD64SARL, OpAMD64SARLconst,
|
||||||
|
OpAMD64SHLL, OpAMD64SHLLconst:
|
||||||
return true
|
return true
|
||||||
case OpArg:
|
case OpArg:
|
||||||
return x.Type.Width == 4
|
return x.Type.Width == 4
|
||||||
|
Loading…
Reference in New Issue
Block a user