mirror of
https://github.com/golang/go
synced 2024-11-18 02:04:45 -07:00
cmd/compile: preserve shift boundedness information in dec64
For clarity. No differences to generated code. Change-Id: Ie4360681caac091eb82c59fb06e35b725b1850dd Reviewed-on: https://go-review.googlesource.com/c/go/+/217003 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
675a2e7078
commit
bc5fc6d48f
@ -154,23 +154,23 @@
|
|||||||
(Rsh8x64 x (Int64Make (Const32 [c]) _)) && c != 0 -> (Signmask (SignExt8to32 x))
|
(Rsh8x64 x (Int64Make (Const32 [c]) _)) && c != 0 -> (Signmask (SignExt8to32 x))
|
||||||
(Rsh8Ux64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0])
|
(Rsh8Ux64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0])
|
||||||
|
|
||||||
(Lsh32x64 x (Int64Make (Const32 [0]) lo)) -> (Lsh32x32 x lo)
|
(Lsh32x64 [c] x (Int64Make (Const32 [0]) lo)) -> (Lsh32x32 [c] x lo)
|
||||||
(Rsh32x64 x (Int64Make (Const32 [0]) lo)) -> (Rsh32x32 x lo)
|
(Rsh32x64 [c] x (Int64Make (Const32 [0]) lo)) -> (Rsh32x32 [c] x lo)
|
||||||
(Rsh32Ux64 x (Int64Make (Const32 [0]) lo)) -> (Rsh32Ux32 x lo)
|
(Rsh32Ux64 [c] x (Int64Make (Const32 [0]) lo)) -> (Rsh32Ux32 [c] x lo)
|
||||||
(Lsh16x64 x (Int64Make (Const32 [0]) lo)) -> (Lsh16x32 x lo)
|
(Lsh16x64 [c] x (Int64Make (Const32 [0]) lo)) -> (Lsh16x32 [c] x lo)
|
||||||
(Rsh16x64 x (Int64Make (Const32 [0]) lo)) -> (Rsh16x32 x lo)
|
(Rsh16x64 [c] x (Int64Make (Const32 [0]) lo)) -> (Rsh16x32 [c] x lo)
|
||||||
(Rsh16Ux64 x (Int64Make (Const32 [0]) lo)) -> (Rsh16Ux32 x lo)
|
(Rsh16Ux64 [c] x (Int64Make (Const32 [0]) lo)) -> (Rsh16Ux32 [c] x lo)
|
||||||
(Lsh8x64 x (Int64Make (Const32 [0]) lo)) -> (Lsh8x32 x lo)
|
(Lsh8x64 [c] x (Int64Make (Const32 [0]) lo)) -> (Lsh8x32 [c] x lo)
|
||||||
(Rsh8x64 x (Int64Make (Const32 [0]) lo)) -> (Rsh8x32 x lo)
|
(Rsh8x64 [c] x (Int64Make (Const32 [0]) lo)) -> (Rsh8x32 [c] x lo)
|
||||||
(Rsh8Ux64 x (Int64Make (Const32 [0]) lo)) -> (Rsh8Ux32 x lo)
|
(Rsh8Ux64 [c] x (Int64Make (Const32 [0]) lo)) -> (Rsh8Ux32 [c] x lo)
|
||||||
|
|
||||||
(Lsh64x64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const64 [0])
|
(Lsh64x64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const64 [0])
|
||||||
(Rsh64x64 x (Int64Make (Const32 [c]) _)) && c != 0 -> (Int64Make (Signmask (Int64Hi x)) (Signmask (Int64Hi x)))
|
(Rsh64x64 x (Int64Make (Const32 [c]) _)) && c != 0 -> (Int64Make (Signmask (Int64Hi x)) (Signmask (Int64Hi x)))
|
||||||
(Rsh64Ux64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const64 [0])
|
(Rsh64Ux64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const64 [0])
|
||||||
|
|
||||||
(Lsh64x64 x (Int64Make (Const32 [0]) lo)) -> (Lsh64x32 x lo)
|
(Lsh64x64 [c] x (Int64Make (Const32 [0]) lo)) -> (Lsh64x32 [c] x lo)
|
||||||
(Rsh64x64 x (Int64Make (Const32 [0]) lo)) -> (Rsh64x32 x lo)
|
(Rsh64x64 [c] x (Int64Make (Const32 [0]) lo)) -> (Rsh64x32 [c] x lo)
|
||||||
(Rsh64Ux64 x (Int64Make (Const32 [0]) lo)) -> (Rsh64Ux32 x lo)
|
(Rsh64Ux64 [c] x (Int64Make (Const32 [0]) lo)) -> (Rsh64Ux32 [c] x lo)
|
||||||
|
|
||||||
// turn x64 non-constant shifts to x32 shifts
|
// turn x64 non-constant shifts to x32 shifts
|
||||||
// if high 32-bit of the shift is nonzero, make a huge shift
|
// if high 32-bit of the shift is nonzero, make a huge shift
|
||||||
|
@ -954,9 +954,10 @@ func rewriteValuedec64_OpLsh16x64(v *Value) bool {
|
|||||||
v.AuxInt = 0
|
v.AuxInt = 0
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// match: (Lsh16x64 x (Int64Make (Const32 [0]) lo))
|
// match: (Lsh16x64 [c] x (Int64Make (Const32 [0]) lo))
|
||||||
// result: (Lsh16x32 x lo)
|
// result: (Lsh16x32 [c] x lo)
|
||||||
for {
|
for {
|
||||||
|
c := v.AuxInt
|
||||||
x := v_0
|
x := v_0
|
||||||
if v_1.Op != OpInt64Make {
|
if v_1.Op != OpInt64Make {
|
||||||
break
|
break
|
||||||
@ -967,6 +968,7 @@ func rewriteValuedec64_OpLsh16x64(v *Value) bool {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
v.reset(OpLsh16x32)
|
v.reset(OpLsh16x32)
|
||||||
|
v.AuxInt = c
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
v.AddArg(lo)
|
v.AddArg(lo)
|
||||||
return true
|
return true
|
||||||
@ -1021,9 +1023,10 @@ func rewriteValuedec64_OpLsh32x64(v *Value) bool {
|
|||||||
v.AuxInt = 0
|
v.AuxInt = 0
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// match: (Lsh32x64 x (Int64Make (Const32 [0]) lo))
|
// match: (Lsh32x64 [c] x (Int64Make (Const32 [0]) lo))
|
||||||
// result: (Lsh32x32 x lo)
|
// result: (Lsh32x32 [c] x lo)
|
||||||
for {
|
for {
|
||||||
|
c := v.AuxInt
|
||||||
x := v_0
|
x := v_0
|
||||||
if v_1.Op != OpInt64Make {
|
if v_1.Op != OpInt64Make {
|
||||||
break
|
break
|
||||||
@ -1034,6 +1037,7 @@ func rewriteValuedec64_OpLsh32x64(v *Value) bool {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
v.reset(OpLsh32x32)
|
v.reset(OpLsh32x32)
|
||||||
|
v.AuxInt = c
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
v.AddArg(lo)
|
v.AddArg(lo)
|
||||||
return true
|
return true
|
||||||
@ -1186,9 +1190,10 @@ func rewriteValuedec64_OpLsh64x64(v *Value) bool {
|
|||||||
v.AuxInt = 0
|
v.AuxInt = 0
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// match: (Lsh64x64 x (Int64Make (Const32 [0]) lo))
|
// match: (Lsh64x64 [c] x (Int64Make (Const32 [0]) lo))
|
||||||
// result: (Lsh64x32 x lo)
|
// result: (Lsh64x32 [c] x lo)
|
||||||
for {
|
for {
|
||||||
|
c := v.AuxInt
|
||||||
x := v_0
|
x := v_0
|
||||||
if v_1.Op != OpInt64Make {
|
if v_1.Op != OpInt64Make {
|
||||||
break
|
break
|
||||||
@ -1199,6 +1204,7 @@ func rewriteValuedec64_OpLsh64x64(v *Value) bool {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
v.reset(OpLsh64x32)
|
v.reset(OpLsh64x32)
|
||||||
|
v.AuxInt = c
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
v.AddArg(lo)
|
v.AddArg(lo)
|
||||||
return true
|
return true
|
||||||
@ -1302,9 +1308,10 @@ func rewriteValuedec64_OpLsh8x64(v *Value) bool {
|
|||||||
v.AuxInt = 0
|
v.AuxInt = 0
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// match: (Lsh8x64 x (Int64Make (Const32 [0]) lo))
|
// match: (Lsh8x64 [c] x (Int64Make (Const32 [0]) lo))
|
||||||
// result: (Lsh8x32 x lo)
|
// result: (Lsh8x32 [c] x lo)
|
||||||
for {
|
for {
|
||||||
|
c := v.AuxInt
|
||||||
x := v_0
|
x := v_0
|
||||||
if v_1.Op != OpInt64Make {
|
if v_1.Op != OpInt64Make {
|
||||||
break
|
break
|
||||||
@ -1315,6 +1322,7 @@ func rewriteValuedec64_OpLsh8x64(v *Value) bool {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
v.reset(OpLsh8x32)
|
v.reset(OpLsh8x32)
|
||||||
|
v.AuxInt = c
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
v.AddArg(lo)
|
v.AddArg(lo)
|
||||||
return true
|
return true
|
||||||
@ -1499,9 +1507,10 @@ func rewriteValuedec64_OpRsh16Ux64(v *Value) bool {
|
|||||||
v.AuxInt = 0
|
v.AuxInt = 0
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// match: (Rsh16Ux64 x (Int64Make (Const32 [0]) lo))
|
// match: (Rsh16Ux64 [c] x (Int64Make (Const32 [0]) lo))
|
||||||
// result: (Rsh16Ux32 x lo)
|
// result: (Rsh16Ux32 [c] x lo)
|
||||||
for {
|
for {
|
||||||
|
c := v.AuxInt
|
||||||
x := v_0
|
x := v_0
|
||||||
if v_1.Op != OpInt64Make {
|
if v_1.Op != OpInt64Make {
|
||||||
break
|
break
|
||||||
@ -1512,6 +1521,7 @@ func rewriteValuedec64_OpRsh16Ux64(v *Value) bool {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
v.reset(OpRsh16Ux32)
|
v.reset(OpRsh16Ux32)
|
||||||
|
v.AuxInt = c
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
v.AddArg(lo)
|
v.AddArg(lo)
|
||||||
return true
|
return true
|
||||||
@ -1569,9 +1579,10 @@ func rewriteValuedec64_OpRsh16x64(v *Value) bool {
|
|||||||
v.AddArg(v0)
|
v.AddArg(v0)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// match: (Rsh16x64 x (Int64Make (Const32 [0]) lo))
|
// match: (Rsh16x64 [c] x (Int64Make (Const32 [0]) lo))
|
||||||
// result: (Rsh16x32 x lo)
|
// result: (Rsh16x32 [c] x lo)
|
||||||
for {
|
for {
|
||||||
|
c := v.AuxInt
|
||||||
x := v_0
|
x := v_0
|
||||||
if v_1.Op != OpInt64Make {
|
if v_1.Op != OpInt64Make {
|
||||||
break
|
break
|
||||||
@ -1582,6 +1593,7 @@ func rewriteValuedec64_OpRsh16x64(v *Value) bool {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
v.reset(OpRsh16x32)
|
v.reset(OpRsh16x32)
|
||||||
|
v.AuxInt = c
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
v.AddArg(lo)
|
v.AddArg(lo)
|
||||||
return true
|
return true
|
||||||
@ -1636,9 +1648,10 @@ func rewriteValuedec64_OpRsh32Ux64(v *Value) bool {
|
|||||||
v.AuxInt = 0
|
v.AuxInt = 0
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// match: (Rsh32Ux64 x (Int64Make (Const32 [0]) lo))
|
// match: (Rsh32Ux64 [c] x (Int64Make (Const32 [0]) lo))
|
||||||
// result: (Rsh32Ux32 x lo)
|
// result: (Rsh32Ux32 [c] x lo)
|
||||||
for {
|
for {
|
||||||
|
c := v.AuxInt
|
||||||
x := v_0
|
x := v_0
|
||||||
if v_1.Op != OpInt64Make {
|
if v_1.Op != OpInt64Make {
|
||||||
break
|
break
|
||||||
@ -1649,6 +1662,7 @@ func rewriteValuedec64_OpRsh32Ux64(v *Value) bool {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
v.reset(OpRsh32Ux32)
|
v.reset(OpRsh32Ux32)
|
||||||
|
v.AuxInt = c
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
v.AddArg(lo)
|
v.AddArg(lo)
|
||||||
return true
|
return true
|
||||||
@ -1704,9 +1718,10 @@ func rewriteValuedec64_OpRsh32x64(v *Value) bool {
|
|||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// match: (Rsh32x64 x (Int64Make (Const32 [0]) lo))
|
// match: (Rsh32x64 [c] x (Int64Make (Const32 [0]) lo))
|
||||||
// result: (Rsh32x32 x lo)
|
// result: (Rsh32x32 [c] x lo)
|
||||||
for {
|
for {
|
||||||
|
c := v.AuxInt
|
||||||
x := v_0
|
x := v_0
|
||||||
if v_1.Op != OpInt64Make {
|
if v_1.Op != OpInt64Make {
|
||||||
break
|
break
|
||||||
@ -1717,6 +1732,7 @@ func rewriteValuedec64_OpRsh32x64(v *Value) bool {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
v.reset(OpRsh32x32)
|
v.reset(OpRsh32x32)
|
||||||
|
v.AuxInt = c
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
v.AddArg(lo)
|
v.AddArg(lo)
|
||||||
return true
|
return true
|
||||||
@ -1869,9 +1885,10 @@ func rewriteValuedec64_OpRsh64Ux64(v *Value) bool {
|
|||||||
v.AuxInt = 0
|
v.AuxInt = 0
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// match: (Rsh64Ux64 x (Int64Make (Const32 [0]) lo))
|
// match: (Rsh64Ux64 [c] x (Int64Make (Const32 [0]) lo))
|
||||||
// result: (Rsh64Ux32 x lo)
|
// result: (Rsh64Ux32 [c] x lo)
|
||||||
for {
|
for {
|
||||||
|
c := v.AuxInt
|
||||||
x := v_0
|
x := v_0
|
||||||
if v_1.Op != OpInt64Make {
|
if v_1.Op != OpInt64Make {
|
||||||
break
|
break
|
||||||
@ -1882,6 +1899,7 @@ func rewriteValuedec64_OpRsh64Ux64(v *Value) bool {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
v.reset(OpRsh64Ux32)
|
v.reset(OpRsh64Ux32)
|
||||||
|
v.AuxInt = c
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
v.AddArg(lo)
|
v.AddArg(lo)
|
||||||
return true
|
return true
|
||||||
@ -2115,9 +2133,10 @@ func rewriteValuedec64_OpRsh64x64(v *Value) bool {
|
|||||||
v.AddArg(v2)
|
v.AddArg(v2)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// match: (Rsh64x64 x (Int64Make (Const32 [0]) lo))
|
// match: (Rsh64x64 [c] x (Int64Make (Const32 [0]) lo))
|
||||||
// result: (Rsh64x32 x lo)
|
// result: (Rsh64x32 [c] x lo)
|
||||||
for {
|
for {
|
||||||
|
c := v.AuxInt
|
||||||
x := v_0
|
x := v_0
|
||||||
if v_1.Op != OpInt64Make {
|
if v_1.Op != OpInt64Make {
|
||||||
break
|
break
|
||||||
@ -2128,6 +2147,7 @@ func rewriteValuedec64_OpRsh64x64(v *Value) bool {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
v.reset(OpRsh64x32)
|
v.reset(OpRsh64x32)
|
||||||
|
v.AuxInt = c
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
v.AddArg(lo)
|
v.AddArg(lo)
|
||||||
return true
|
return true
|
||||||
@ -2243,9 +2263,10 @@ func rewriteValuedec64_OpRsh8Ux64(v *Value) bool {
|
|||||||
v.AuxInt = 0
|
v.AuxInt = 0
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// match: (Rsh8Ux64 x (Int64Make (Const32 [0]) lo))
|
// match: (Rsh8Ux64 [c] x (Int64Make (Const32 [0]) lo))
|
||||||
// result: (Rsh8Ux32 x lo)
|
// result: (Rsh8Ux32 [c] x lo)
|
||||||
for {
|
for {
|
||||||
|
c := v.AuxInt
|
||||||
x := v_0
|
x := v_0
|
||||||
if v_1.Op != OpInt64Make {
|
if v_1.Op != OpInt64Make {
|
||||||
break
|
break
|
||||||
@ -2256,6 +2277,7 @@ func rewriteValuedec64_OpRsh8Ux64(v *Value) bool {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
v.reset(OpRsh8Ux32)
|
v.reset(OpRsh8Ux32)
|
||||||
|
v.AuxInt = c
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
v.AddArg(lo)
|
v.AddArg(lo)
|
||||||
return true
|
return true
|
||||||
@ -2313,9 +2335,10 @@ func rewriteValuedec64_OpRsh8x64(v *Value) bool {
|
|||||||
v.AddArg(v0)
|
v.AddArg(v0)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// match: (Rsh8x64 x (Int64Make (Const32 [0]) lo))
|
// match: (Rsh8x64 [c] x (Int64Make (Const32 [0]) lo))
|
||||||
// result: (Rsh8x32 x lo)
|
// result: (Rsh8x32 [c] x lo)
|
||||||
for {
|
for {
|
||||||
|
c := v.AuxInt
|
||||||
x := v_0
|
x := v_0
|
||||||
if v_1.Op != OpInt64Make {
|
if v_1.Op != OpInt64Make {
|
||||||
break
|
break
|
||||||
@ -2326,6 +2349,7 @@ func rewriteValuedec64_OpRsh8x64(v *Value) bool {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
v.reset(OpRsh8x32)
|
v.reset(OpRsh8x32)
|
||||||
|
v.AuxInt = c
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
v.AddArg(lo)
|
v.AddArg(lo)
|
||||||
return true
|
return true
|
||||||
|
Loading…
Reference in New Issue
Block a user