cmd/compile: eliminate some bounds checks from generated rewrite rules

Noticed while looking at #20356.

Cuts 160k (1%) off of the cmd/compile binary.

Change-Id: If2397bc6971d6be9be6975048adecb0b5efa6d66
Reviewed-on: https://go-review.googlesource.com/43501
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
Josh Bleecher Snyder 2017-05-15 09:40:19 -07:00
parent 4b0d74f89d
commit 5548f7d5cf
12 changed files with 8579 additions and 0 deletions

View File

@ -442,6 +442,9 @@ func genMatch0(w io.Writer, arch arch, match, v string, m map[string]struct{}, t
} }
} }
if n := len(args); n > 1 {
fmt.Fprintf(w, "_ = %s.Args[%d]\n", v, n-1) // combine some bounds checks
}
for i, arg := range args { for i, arg := range args {
if arg == "_" { if arg == "_" {
continue continue

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -49,6 +49,7 @@ func rewriteValuedec_OpComplexImag_0(v *Value) bool {
if v_0.Op != OpComplexMake { if v_0.Op != OpComplexMake {
break break
} }
_ = v_0.Args[1]
imag := v_0.Args[1] imag := v_0.Args[1]
v.reset(OpCopy) v.reset(OpCopy)
v.Type = imag.Type v.Type = imag.Type
@ -66,6 +67,7 @@ func rewriteValuedec_OpComplexReal_0(v *Value) bool {
if v_0.Op != OpComplexMake { if v_0.Op != OpComplexMake {
break break
} }
_ = v_0.Args[1]
real := v_0.Args[0] real := v_0.Args[0]
v.reset(OpCopy) v.reset(OpCopy)
v.Type = real.Type v.Type = real.Type
@ -83,6 +85,7 @@ func rewriteValuedec_OpIData_0(v *Value) bool {
if v_0.Op != OpIMake { if v_0.Op != OpIMake {
break break
} }
_ = v_0.Args[1]
data := v_0.Args[1] data := v_0.Args[1]
v.reset(OpCopy) v.reset(OpCopy)
v.Type = data.Type v.Type = data.Type
@ -102,6 +105,7 @@ func rewriteValuedec_OpITab_0(v *Value) bool {
if v_0.Op != OpIMake { if v_0.Op != OpIMake {
break break
} }
_ = v_0.Args[1]
itab := v_0.Args[0] itab := v_0.Args[0]
v.reset(OpCopy) v.reset(OpCopy)
v.Type = itab.Type v.Type = itab.Type
@ -122,6 +126,7 @@ func rewriteValuedec_OpLoad_0(v *Value) bool {
// result: (ComplexMake (Load <typ.Float32> ptr mem) (Load <typ.Float32> (OffPtr <typ.Float32Ptr> [4] ptr) mem) ) // result: (ComplexMake (Load <typ.Float32> ptr mem) (Load <typ.Float32> (OffPtr <typ.Float32Ptr> [4] ptr) mem) )
for { for {
t := v.Type t := v.Type
_ = v.Args[1]
ptr := v.Args[0] ptr := v.Args[0]
mem := v.Args[1] mem := v.Args[1]
if !(t.IsComplex() && t.Size() == 8) { if !(t.IsComplex() && t.Size() == 8) {
@ -146,6 +151,7 @@ func rewriteValuedec_OpLoad_0(v *Value) bool {
// result: (ComplexMake (Load <typ.Float64> ptr mem) (Load <typ.Float64> (OffPtr <typ.Float64Ptr> [8] ptr) mem) ) // result: (ComplexMake (Load <typ.Float64> ptr mem) (Load <typ.Float64> (OffPtr <typ.Float64Ptr> [8] ptr) mem) )
for { for {
t := v.Type t := v.Type
_ = v.Args[1]
ptr := v.Args[0] ptr := v.Args[0]
mem := v.Args[1] mem := v.Args[1]
if !(t.IsComplex() && t.Size() == 16) { if !(t.IsComplex() && t.Size() == 16) {
@ -170,6 +176,7 @@ func rewriteValuedec_OpLoad_0(v *Value) bool {
// result: (StringMake (Load <typ.BytePtr> ptr mem) (Load <typ.Int> (OffPtr <typ.IntPtr> [config.PtrSize] ptr) mem)) // result: (StringMake (Load <typ.BytePtr> ptr mem) (Load <typ.Int> (OffPtr <typ.IntPtr> [config.PtrSize] ptr) mem))
for { for {
t := v.Type t := v.Type
_ = v.Args[1]
ptr := v.Args[0] ptr := v.Args[0]
mem := v.Args[1] mem := v.Args[1]
if !(t.IsString()) { if !(t.IsString()) {
@ -194,6 +201,7 @@ func rewriteValuedec_OpLoad_0(v *Value) bool {
// result: (SliceMake (Load <t.ElemType().PtrTo()> ptr mem) (Load <typ.Int> (OffPtr <typ.IntPtr> [config.PtrSize] ptr) mem) (Load <typ.Int> (OffPtr <typ.IntPtr> [2*config.PtrSize] ptr) mem)) // result: (SliceMake (Load <t.ElemType().PtrTo()> ptr mem) (Load <typ.Int> (OffPtr <typ.IntPtr> [config.PtrSize] ptr) mem) (Load <typ.Int> (OffPtr <typ.IntPtr> [2*config.PtrSize] ptr) mem))
for { for {
t := v.Type t := v.Type
_ = v.Args[1]
ptr := v.Args[0] ptr := v.Args[0]
mem := v.Args[1] mem := v.Args[1]
if !(t.IsSlice()) { if !(t.IsSlice()) {
@ -225,6 +233,7 @@ func rewriteValuedec_OpLoad_0(v *Value) bool {
// result: (IMake (Load <typ.BytePtr> ptr mem) (Load <typ.BytePtr> (OffPtr <typ.BytePtrPtr> [config.PtrSize] ptr) mem)) // result: (IMake (Load <typ.BytePtr> ptr mem) (Load <typ.BytePtr> (OffPtr <typ.BytePtrPtr> [config.PtrSize] ptr) mem))
for { for {
t := v.Type t := v.Type
_ = v.Args[1]
ptr := v.Args[0] ptr := v.Args[0]
mem := v.Args[1] mem := v.Args[1]
if !(t.IsInterface()) { if !(t.IsInterface()) {
@ -255,6 +264,7 @@ func rewriteValuedec_OpSliceCap_0(v *Value) bool {
if v_0.Op != OpSliceMake { if v_0.Op != OpSliceMake {
break break
} }
_ = v_0.Args[2]
cap := v_0.Args[2] cap := v_0.Args[2]
v.reset(OpCopy) v.reset(OpCopy)
v.Type = cap.Type v.Type = cap.Type
@ -272,6 +282,7 @@ func rewriteValuedec_OpSliceLen_0(v *Value) bool {
if v_0.Op != OpSliceMake { if v_0.Op != OpSliceMake {
break break
} }
_ = v_0.Args[2]
len := v_0.Args[1] len := v_0.Args[1]
v.reset(OpCopy) v.reset(OpCopy)
v.Type = len.Type v.Type = len.Type
@ -289,6 +300,7 @@ func rewriteValuedec_OpSlicePtr_0(v *Value) bool {
if v_0.Op != OpSliceMake { if v_0.Op != OpSliceMake {
break break
} }
_ = v_0.Args[2]
ptr := v_0.Args[0] ptr := v_0.Args[0]
v.reset(OpCopy) v.reset(OpCopy)
v.Type = ptr.Type v.Type = ptr.Type
@ -309,11 +321,13 @@ func rewriteValuedec_OpStore_0(v *Value) bool {
// result: (Store {typ.Float32} (OffPtr <typ.Float32Ptr> [4] dst) imag (Store {typ.Float32} dst real mem)) // result: (Store {typ.Float32} (OffPtr <typ.Float32Ptr> [4] dst) imag (Store {typ.Float32} dst real mem))
for { for {
t := v.Aux t := v.Aux
_ = v.Args[2]
dst := v.Args[0] dst := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpComplexMake { if v_1.Op != OpComplexMake {
break break
} }
_ = v_1.Args[1]
real := v_1.Args[0] real := v_1.Args[0]
imag := v_1.Args[1] imag := v_1.Args[1]
mem := v.Args[2] mem := v.Args[2]
@ -340,11 +354,13 @@ func rewriteValuedec_OpStore_0(v *Value) bool {
// result: (Store {typ.Float64} (OffPtr <typ.Float64Ptr> [8] dst) imag (Store {typ.Float64} dst real mem)) // result: (Store {typ.Float64} (OffPtr <typ.Float64Ptr> [8] dst) imag (Store {typ.Float64} dst real mem))
for { for {
t := v.Aux t := v.Aux
_ = v.Args[2]
dst := v.Args[0] dst := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpComplexMake { if v_1.Op != OpComplexMake {
break break
} }
_ = v_1.Args[1]
real := v_1.Args[0] real := v_1.Args[0]
imag := v_1.Args[1] imag := v_1.Args[1]
mem := v.Args[2] mem := v.Args[2]
@ -370,11 +386,13 @@ func rewriteValuedec_OpStore_0(v *Value) bool {
// cond: // cond:
// result: (Store {typ.Int} (OffPtr <typ.IntPtr> [config.PtrSize] dst) len (Store {typ.BytePtr} dst ptr mem)) // result: (Store {typ.Int} (OffPtr <typ.IntPtr> [config.PtrSize] dst) len (Store {typ.BytePtr} dst ptr mem))
for { for {
_ = v.Args[2]
dst := v.Args[0] dst := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpStringMake { if v_1.Op != OpStringMake {
break break
} }
_ = v_1.Args[1]
ptr := v_1.Args[0] ptr := v_1.Args[0]
len := v_1.Args[1] len := v_1.Args[1]
mem := v.Args[2] mem := v.Args[2]
@ -397,11 +415,13 @@ func rewriteValuedec_OpStore_0(v *Value) bool {
// cond: // cond:
// result: (Store {typ.Int} (OffPtr <typ.IntPtr> [2*config.PtrSize] dst) cap (Store {typ.Int} (OffPtr <typ.IntPtr> [config.PtrSize] dst) len (Store {typ.BytePtr} dst ptr mem))) // result: (Store {typ.Int} (OffPtr <typ.IntPtr> [2*config.PtrSize] dst) cap (Store {typ.Int} (OffPtr <typ.IntPtr> [config.PtrSize] dst) len (Store {typ.BytePtr} dst ptr mem)))
for { for {
_ = v.Args[2]
dst := v.Args[0] dst := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpSliceMake { if v_1.Op != OpSliceMake {
break break
} }
_ = v_1.Args[2]
ptr := v_1.Args[0] ptr := v_1.Args[0]
len := v_1.Args[1] len := v_1.Args[1]
cap := v_1.Args[2] cap := v_1.Args[2]
@ -433,11 +453,13 @@ func rewriteValuedec_OpStore_0(v *Value) bool {
// cond: // cond:
// result: (Store {typ.BytePtr} (OffPtr <typ.BytePtrPtr> [config.PtrSize] dst) data (Store {typ.Uintptr} dst itab mem)) // result: (Store {typ.BytePtr} (OffPtr <typ.BytePtrPtr> [config.PtrSize] dst) data (Store {typ.Uintptr} dst itab mem))
for { for {
_ = v.Args[2]
dst := v.Args[0] dst := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpIMake { if v_1.Op != OpIMake {
break break
} }
_ = v_1.Args[1]
itab := v_1.Args[0] itab := v_1.Args[0]
data := v_1.Args[1] data := v_1.Args[1]
mem := v.Args[2] mem := v.Args[2]
@ -467,6 +489,7 @@ func rewriteValuedec_OpStringLen_0(v *Value) bool {
if v_0.Op != OpStringMake { if v_0.Op != OpStringMake {
break break
} }
_ = v_0.Args[1]
len := v_0.Args[1] len := v_0.Args[1]
v.reset(OpCopy) v.reset(OpCopy)
v.Type = len.Type v.Type = len.Type
@ -484,6 +507,7 @@ func rewriteValuedec_OpStringPtr_0(v *Value) bool {
if v_0.Op != OpStringMake { if v_0.Op != OpStringMake {
break break
} }
_ = v_0.Args[1]
ptr := v_0.Args[0] ptr := v_0.Args[0]
v.reset(OpCopy) v.reset(OpCopy)
v.Type = ptr.Type v.Type = ptr.Type

View File

@ -141,6 +141,7 @@ func rewriteValuedec64_OpAdd64_0(v *Value) bool {
// cond: // cond:
// result: (Int64Make (Add32withcarry <typ.Int32> (Int64Hi x) (Int64Hi y) (Select1 <types.TypeFlags> (Add32carry (Int64Lo x) (Int64Lo y)))) (Select0 <typ.UInt32> (Add32carry (Int64Lo x) (Int64Lo y)))) // result: (Int64Make (Add32withcarry <typ.Int32> (Int64Hi x) (Int64Hi y) (Select1 <types.TypeFlags> (Add32carry (Int64Lo x) (Int64Lo y)))) (Select0 <typ.UInt32> (Add32carry (Int64Lo x) (Int64Lo y))))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
y := v.Args[1] y := v.Args[1]
v.reset(OpInt64Make) v.reset(OpInt64Make)
@ -184,6 +185,7 @@ func rewriteValuedec64_OpAnd64_0(v *Value) bool {
// cond: // cond:
// result: (Int64Make (And32 <typ.UInt32> (Int64Hi x) (Int64Hi y)) (And32 <typ.UInt32> (Int64Lo x) (Int64Lo y))) // result: (Int64Make (And32 <typ.UInt32> (Int64Hi x) (Int64Hi y)) (And32 <typ.UInt32> (Int64Lo x) (Int64Lo y)))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
y := v.Args[1] y := v.Args[1]
v.reset(OpInt64Make) v.reset(OpInt64Make)
@ -461,6 +463,7 @@ func rewriteValuedec64_OpEq64_0(v *Value) bool {
// cond: // cond:
// result: (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Eq32 (Int64Lo x) (Int64Lo y))) // result: (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Eq32 (Int64Lo x) (Int64Lo y)))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
y := v.Args[1] y := v.Args[1]
v.reset(OpAndB) v.reset(OpAndB)
@ -492,6 +495,7 @@ func rewriteValuedec64_OpGeq64_0(v *Value) bool {
// cond: // cond:
// result: (OrB (Greater32 (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Geq32U (Int64Lo x) (Int64Lo y)))) // result: (OrB (Greater32 (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Geq32U (Int64Lo x) (Int64Lo y))))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
y := v.Args[1] y := v.Args[1]
v.reset(OpOrB) v.reset(OpOrB)
@ -533,6 +537,7 @@ func rewriteValuedec64_OpGeq64U_0(v *Value) bool {
// cond: // cond:
// result: (OrB (Greater32U (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Geq32U (Int64Lo x) (Int64Lo y)))) // result: (OrB (Greater32U (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Geq32U (Int64Lo x) (Int64Lo y))))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
y := v.Args[1] y := v.Args[1]
v.reset(OpOrB) v.reset(OpOrB)
@ -574,6 +579,7 @@ func rewriteValuedec64_OpGreater64_0(v *Value) bool {
// cond: // cond:
// result: (OrB (Greater32 (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Greater32U (Int64Lo x) (Int64Lo y)))) // result: (OrB (Greater32 (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Greater32U (Int64Lo x) (Int64Lo y))))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
y := v.Args[1] y := v.Args[1]
v.reset(OpOrB) v.reset(OpOrB)
@ -615,6 +621,7 @@ func rewriteValuedec64_OpGreater64U_0(v *Value) bool {
// cond: // cond:
// result: (OrB (Greater32U (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Greater32U (Int64Lo x) (Int64Lo y)))) // result: (OrB (Greater32U (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Greater32U (Int64Lo x) (Int64Lo y))))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
y := v.Args[1] y := v.Args[1]
v.reset(OpOrB) v.reset(OpOrB)
@ -656,6 +663,7 @@ func rewriteValuedec64_OpInt64Hi_0(v *Value) bool {
if v_0.Op != OpInt64Make { if v_0.Op != OpInt64Make {
break break
} }
_ = v_0.Args[1]
hi := v_0.Args[0] hi := v_0.Args[0]
v.reset(OpCopy) v.reset(OpCopy)
v.Type = hi.Type v.Type = hi.Type
@ -673,6 +681,7 @@ func rewriteValuedec64_OpInt64Lo_0(v *Value) bool {
if v_0.Op != OpInt64Make { if v_0.Op != OpInt64Make {
break break
} }
_ = v_0.Args[1]
lo := v_0.Args[1] lo := v_0.Args[1]
v.reset(OpCopy) v.reset(OpCopy)
v.Type = lo.Type v.Type = lo.Type
@ -690,6 +699,7 @@ func rewriteValuedec64_OpLeq64_0(v *Value) bool {
// cond: // cond:
// result: (OrB (Less32 (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Leq32U (Int64Lo x) (Int64Lo y)))) // result: (OrB (Less32 (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Leq32U (Int64Lo x) (Int64Lo y))))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
y := v.Args[1] y := v.Args[1]
v.reset(OpOrB) v.reset(OpOrB)
@ -731,6 +741,7 @@ func rewriteValuedec64_OpLeq64U_0(v *Value) bool {
// cond: // cond:
// result: (OrB (Less32U (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Leq32U (Int64Lo x) (Int64Lo y)))) // result: (OrB (Less32U (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Leq32U (Int64Lo x) (Int64Lo y))))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
y := v.Args[1] y := v.Args[1]
v.reset(OpOrB) v.reset(OpOrB)
@ -772,6 +783,7 @@ func rewriteValuedec64_OpLess64_0(v *Value) bool {
// cond: // cond:
// result: (OrB (Less32 (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Less32U (Int64Lo x) (Int64Lo y)))) // result: (OrB (Less32 (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Less32U (Int64Lo x) (Int64Lo y))))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
y := v.Args[1] y := v.Args[1]
v.reset(OpOrB) v.reset(OpOrB)
@ -813,6 +825,7 @@ func rewriteValuedec64_OpLess64U_0(v *Value) bool {
// cond: // cond:
// result: (OrB (Less32U (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Less32U (Int64Lo x) (Int64Lo y)))) // result: (OrB (Less32U (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Less32U (Int64Lo x) (Int64Lo y))))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
y := v.Args[1] y := v.Args[1]
v.reset(OpOrB) v.reset(OpOrB)
@ -857,6 +870,7 @@ func rewriteValuedec64_OpLoad_0(v *Value) bool {
// result: (Int64Make (Load <typ.Int32> (OffPtr <typ.Int32Ptr> [4] ptr) mem) (Load <typ.UInt32> ptr mem)) // result: (Int64Make (Load <typ.Int32> (OffPtr <typ.Int32Ptr> [4] ptr) mem) (Load <typ.UInt32> ptr mem))
for { for {
t := v.Type t := v.Type
_ = v.Args[1]
ptr := v.Args[0] ptr := v.Args[0]
mem := v.Args[1] mem := v.Args[1]
if !(is64BitInt(t) && !config.BigEndian && t.IsSigned()) { if !(is64BitInt(t) && !config.BigEndian && t.IsSigned()) {
@ -881,6 +895,7 @@ func rewriteValuedec64_OpLoad_0(v *Value) bool {
// result: (Int64Make (Load <typ.UInt32> (OffPtr <typ.UInt32Ptr> [4] ptr) mem) (Load <typ.UInt32> ptr mem)) // result: (Int64Make (Load <typ.UInt32> (OffPtr <typ.UInt32Ptr> [4] ptr) mem) (Load <typ.UInt32> ptr mem))
for { for {
t := v.Type t := v.Type
_ = v.Args[1]
ptr := v.Args[0] ptr := v.Args[0]
mem := v.Args[1] mem := v.Args[1]
if !(is64BitInt(t) && !config.BigEndian && !t.IsSigned()) { if !(is64BitInt(t) && !config.BigEndian && !t.IsSigned()) {
@ -905,6 +920,7 @@ func rewriteValuedec64_OpLoad_0(v *Value) bool {
// result: (Int64Make (Load <typ.Int32> ptr mem) (Load <typ.UInt32> (OffPtr <typ.UInt32Ptr> [4] ptr) mem)) // result: (Int64Make (Load <typ.Int32> ptr mem) (Load <typ.UInt32> (OffPtr <typ.UInt32Ptr> [4] ptr) mem))
for { for {
t := v.Type t := v.Type
_ = v.Args[1]
ptr := v.Args[0] ptr := v.Args[0]
mem := v.Args[1] mem := v.Args[1]
if !(is64BitInt(t) && config.BigEndian && t.IsSigned()) { if !(is64BitInt(t) && config.BigEndian && t.IsSigned()) {
@ -929,6 +945,7 @@ func rewriteValuedec64_OpLoad_0(v *Value) bool {
// result: (Int64Make (Load <typ.UInt32> ptr mem) (Load <typ.UInt32> (OffPtr <typ.UInt32Ptr> [4] ptr) mem)) // result: (Int64Make (Load <typ.UInt32> ptr mem) (Load <typ.UInt32> (OffPtr <typ.UInt32Ptr> [4] ptr) mem))
for { for {
t := v.Type t := v.Type
_ = v.Args[1]
ptr := v.Args[0] ptr := v.Args[0]
mem := v.Args[1] mem := v.Args[1]
if !(is64BitInt(t) && config.BigEndian && !t.IsSigned()) { if !(is64BitInt(t) && config.BigEndian && !t.IsSigned()) {
@ -959,10 +976,12 @@ func rewriteValuedec64_OpLsh16x64_0(v *Value) bool {
// cond: c != 0 // cond: c != 0
// result: (Const32 [0]) // result: (Const32 [0])
for { for {
_ = v.Args[1]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -979,11 +998,13 @@ func rewriteValuedec64_OpLsh16x64_0(v *Value) bool {
// cond: // cond:
// result: (Lsh16x32 x lo) // result: (Lsh16x32 x lo)
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1001,11 +1022,13 @@ func rewriteValuedec64_OpLsh16x64_0(v *Value) bool {
// cond: hi.Op != OpConst32 // cond: hi.Op != OpConst32
// result: (Lsh16x32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) // result: (Lsh16x32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
hi := v_1.Args[0] hi := v_1.Args[0]
lo := v_1.Args[1] lo := v_1.Args[1]
if !(hi.Op != OpConst32) { if !(hi.Op != OpConst32) {
@ -1032,10 +1055,12 @@ func rewriteValuedec64_OpLsh32x64_0(v *Value) bool {
// cond: c != 0 // cond: c != 0
// result: (Const32 [0]) // result: (Const32 [0])
for { for {
_ = v.Args[1]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1052,11 +1077,13 @@ func rewriteValuedec64_OpLsh32x64_0(v *Value) bool {
// cond: // cond:
// result: (Lsh32x32 x lo) // result: (Lsh32x32 x lo)
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1074,11 +1101,13 @@ func rewriteValuedec64_OpLsh32x64_0(v *Value) bool {
// cond: hi.Op != OpConst32 // cond: hi.Op != OpConst32
// result: (Lsh32x32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) // result: (Lsh32x32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
hi := v_1.Args[0] hi := v_1.Args[0]
lo := v_1.Args[1] lo := v_1.Args[1]
if !(hi.Op != OpConst32) { if !(hi.Op != OpConst32) {
@ -1105,10 +1134,12 @@ func rewriteValuedec64_OpLsh64x16_0(v *Value) bool {
// cond: // cond:
// result: (Int64Make (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Lsh32x16 <typ.UInt32> hi s) (Rsh32Ux16 <typ.UInt32> lo (Sub16 <typ.UInt16> (Const16 <typ.UInt16> [32]) s))) (Lsh32x16 <typ.UInt32> lo (Sub16 <typ.UInt16> s (Const16 <typ.UInt16> [32])))) (Lsh32x16 <typ.UInt32> lo s)) // result: (Int64Make (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Lsh32x16 <typ.UInt32> hi s) (Rsh32Ux16 <typ.UInt32> lo (Sub16 <typ.UInt16> (Const16 <typ.UInt16> [32]) s))) (Lsh32x16 <typ.UInt32> lo (Sub16 <typ.UInt16> s (Const16 <typ.UInt16> [32])))) (Lsh32x16 <typ.UInt32> lo s))
for { for {
_ = v.Args[1]
v_0 := v.Args[0] v_0 := v.Args[0]
if v_0.Op != OpInt64Make { if v_0.Op != OpInt64Make {
break break
} }
_ = v_0.Args[1]
hi := v_0.Args[0] hi := v_0.Args[0]
lo := v_0.Args[1] lo := v_0.Args[1]
s := v.Args[1] s := v.Args[1]
@ -1156,10 +1187,12 @@ func rewriteValuedec64_OpLsh64x32_0(v *Value) bool {
// cond: // cond:
// result: (Int64Make (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Lsh32x32 <typ.UInt32> hi s) (Rsh32Ux32 <typ.UInt32> lo (Sub32 <typ.UInt32> (Const32 <typ.UInt32> [32]) s))) (Lsh32x32 <typ.UInt32> lo (Sub32 <typ.UInt32> s (Const32 <typ.UInt32> [32])))) (Lsh32x32 <typ.UInt32> lo s)) // result: (Int64Make (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Lsh32x32 <typ.UInt32> hi s) (Rsh32Ux32 <typ.UInt32> lo (Sub32 <typ.UInt32> (Const32 <typ.UInt32> [32]) s))) (Lsh32x32 <typ.UInt32> lo (Sub32 <typ.UInt32> s (Const32 <typ.UInt32> [32])))) (Lsh32x32 <typ.UInt32> lo s))
for { for {
_ = v.Args[1]
v_0 := v.Args[0] v_0 := v.Args[0]
if v_0.Op != OpInt64Make { if v_0.Op != OpInt64Make {
break break
} }
_ = v_0.Args[1]
hi := v_0.Args[0] hi := v_0.Args[0]
lo := v_0.Args[1] lo := v_0.Args[1]
s := v.Args[1] s := v.Args[1]
@ -1207,10 +1240,12 @@ func rewriteValuedec64_OpLsh64x64_0(v *Value) bool {
// cond: c != 0 // cond: c != 0
// result: (Const64 [0]) // result: (Const64 [0])
for { for {
_ = v.Args[1]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1227,11 +1262,13 @@ func rewriteValuedec64_OpLsh64x64_0(v *Value) bool {
// cond: // cond:
// result: (Lsh64x32 x lo) // result: (Lsh64x32 x lo)
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1249,11 +1286,13 @@ func rewriteValuedec64_OpLsh64x64_0(v *Value) bool {
// cond: hi.Op != OpConst32 // cond: hi.Op != OpConst32
// result: (Lsh64x32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) // result: (Lsh64x32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
hi := v_1.Args[0] hi := v_1.Args[0]
lo := v_1.Args[1] lo := v_1.Args[1]
if !(hi.Op != OpConst32) { if !(hi.Op != OpConst32) {
@ -1280,10 +1319,12 @@ func rewriteValuedec64_OpLsh64x8_0(v *Value) bool {
// cond: // cond:
// result: (Int64Make (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Lsh32x8 <typ.UInt32> hi s) (Rsh32Ux8 <typ.UInt32> lo (Sub8 <typ.UInt8> (Const8 <typ.UInt8> [32]) s))) (Lsh32x8 <typ.UInt32> lo (Sub8 <typ.UInt8> s (Const8 <typ.UInt8> [32])))) (Lsh32x8 <typ.UInt32> lo s)) // result: (Int64Make (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Lsh32x8 <typ.UInt32> hi s) (Rsh32Ux8 <typ.UInt32> lo (Sub8 <typ.UInt8> (Const8 <typ.UInt8> [32]) s))) (Lsh32x8 <typ.UInt32> lo (Sub8 <typ.UInt8> s (Const8 <typ.UInt8> [32])))) (Lsh32x8 <typ.UInt32> lo s))
for { for {
_ = v.Args[1]
v_0 := v.Args[0] v_0 := v.Args[0]
if v_0.Op != OpInt64Make { if v_0.Op != OpInt64Make {
break break
} }
_ = v_0.Args[1]
hi := v_0.Args[0] hi := v_0.Args[0]
lo := v_0.Args[1] lo := v_0.Args[1]
s := v.Args[1] s := v.Args[1]
@ -1331,10 +1372,12 @@ func rewriteValuedec64_OpLsh8x64_0(v *Value) bool {
// cond: c != 0 // cond: c != 0
// result: (Const32 [0]) // result: (Const32 [0])
for { for {
_ = v.Args[1]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1351,11 +1394,13 @@ func rewriteValuedec64_OpLsh8x64_0(v *Value) bool {
// cond: // cond:
// result: (Lsh8x32 x lo) // result: (Lsh8x32 x lo)
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1373,11 +1418,13 @@ func rewriteValuedec64_OpLsh8x64_0(v *Value) bool {
// cond: hi.Op != OpConst32 // cond: hi.Op != OpConst32
// result: (Lsh8x32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) // result: (Lsh8x32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
hi := v_1.Args[0] hi := v_1.Args[0]
lo := v_1.Args[1] lo := v_1.Args[1]
if !(hi.Op != OpConst32) { if !(hi.Op != OpConst32) {
@ -1404,6 +1451,7 @@ func rewriteValuedec64_OpMul64_0(v *Value) bool {
// cond: // cond:
// result: (Int64Make (Add32 <typ.UInt32> (Mul32 <typ.UInt32> (Int64Lo x) (Int64Hi y)) (Add32 <typ.UInt32> (Mul32 <typ.UInt32> (Int64Hi x) (Int64Lo y)) (Select0 <typ.UInt32> (Mul32uhilo (Int64Lo x) (Int64Lo y))))) (Select1 <typ.UInt32> (Mul32uhilo (Int64Lo x) (Int64Lo y)))) // result: (Int64Make (Add32 <typ.UInt32> (Mul32 <typ.UInt32> (Int64Lo x) (Int64Hi y)) (Add32 <typ.UInt32> (Mul32 <typ.UInt32> (Int64Hi x) (Int64Lo y)) (Select0 <typ.UInt32> (Mul32uhilo (Int64Lo x) (Int64Lo y))))) (Select1 <typ.UInt32> (Mul32uhilo (Int64Lo x) (Int64Lo y))))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
y := v.Args[1] y := v.Args[1]
v.reset(OpInt64Make) v.reset(OpInt64Make)
@ -1476,6 +1524,7 @@ func rewriteValuedec64_OpNeq64_0(v *Value) bool {
// cond: // cond:
// result: (OrB (Neq32 (Int64Hi x) (Int64Hi y)) (Neq32 (Int64Lo x) (Int64Lo y))) // result: (OrB (Neq32 (Int64Hi x) (Int64Hi y)) (Neq32 (Int64Lo x) (Int64Lo y)))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
y := v.Args[1] y := v.Args[1]
v.reset(OpOrB) v.reset(OpOrB)
@ -1507,6 +1556,7 @@ func rewriteValuedec64_OpOr64_0(v *Value) bool {
// cond: // cond:
// result: (Int64Make (Or32 <typ.UInt32> (Int64Hi x) (Int64Hi y)) (Or32 <typ.UInt32> (Int64Lo x) (Int64Lo y))) // result: (Int64Make (Or32 <typ.UInt32> (Int64Hi x) (Int64Hi y)) (Or32 <typ.UInt32> (Int64Lo x) (Int64Lo y)))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
y := v.Args[1] y := v.Args[1]
v.reset(OpInt64Make) v.reset(OpInt64Make)
@ -1538,10 +1588,12 @@ func rewriteValuedec64_OpRsh16Ux64_0(v *Value) bool {
// cond: c != 0 // cond: c != 0
// result: (Const32 [0]) // result: (Const32 [0])
for { for {
_ = v.Args[1]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1558,11 +1610,13 @@ func rewriteValuedec64_OpRsh16Ux64_0(v *Value) bool {
// cond: // cond:
// result: (Rsh16Ux32 x lo) // result: (Rsh16Ux32 x lo)
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1580,11 +1634,13 @@ func rewriteValuedec64_OpRsh16Ux64_0(v *Value) bool {
// cond: hi.Op != OpConst32 // cond: hi.Op != OpConst32
// result: (Rsh16Ux32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) // result: (Rsh16Ux32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
hi := v_1.Args[0] hi := v_1.Args[0]
lo := v_1.Args[1] lo := v_1.Args[1]
if !(hi.Op != OpConst32) { if !(hi.Op != OpConst32) {
@ -1611,11 +1667,13 @@ func rewriteValuedec64_OpRsh16x64_0(v *Value) bool {
// cond: c != 0 // cond: c != 0
// result: (Signmask (SignExt16to32 x)) // result: (Signmask (SignExt16to32 x))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1634,11 +1692,13 @@ func rewriteValuedec64_OpRsh16x64_0(v *Value) bool {
// cond: // cond:
// result: (Rsh16x32 x lo) // result: (Rsh16x32 x lo)
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1656,11 +1716,13 @@ func rewriteValuedec64_OpRsh16x64_0(v *Value) bool {
// cond: hi.Op != OpConst32 // cond: hi.Op != OpConst32
// result: (Rsh16x32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) // result: (Rsh16x32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
hi := v_1.Args[0] hi := v_1.Args[0]
lo := v_1.Args[1] lo := v_1.Args[1]
if !(hi.Op != OpConst32) { if !(hi.Op != OpConst32) {
@ -1687,10 +1749,12 @@ func rewriteValuedec64_OpRsh32Ux64_0(v *Value) bool {
// cond: c != 0 // cond: c != 0
// result: (Const32 [0]) // result: (Const32 [0])
for { for {
_ = v.Args[1]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1707,11 +1771,13 @@ func rewriteValuedec64_OpRsh32Ux64_0(v *Value) bool {
// cond: // cond:
// result: (Rsh32Ux32 x lo) // result: (Rsh32Ux32 x lo)
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1729,11 +1795,13 @@ func rewriteValuedec64_OpRsh32Ux64_0(v *Value) bool {
// cond: hi.Op != OpConst32 // cond: hi.Op != OpConst32
// result: (Rsh32Ux32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) // result: (Rsh32Ux32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
hi := v_1.Args[0] hi := v_1.Args[0]
lo := v_1.Args[1] lo := v_1.Args[1]
if !(hi.Op != OpConst32) { if !(hi.Op != OpConst32) {
@ -1760,11 +1828,13 @@ func rewriteValuedec64_OpRsh32x64_0(v *Value) bool {
// cond: c != 0 // cond: c != 0
// result: (Signmask x) // result: (Signmask x)
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1781,11 +1851,13 @@ func rewriteValuedec64_OpRsh32x64_0(v *Value) bool {
// cond: // cond:
// result: (Rsh32x32 x lo) // result: (Rsh32x32 x lo)
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1803,11 +1875,13 @@ func rewriteValuedec64_OpRsh32x64_0(v *Value) bool {
// cond: hi.Op != OpConst32 // cond: hi.Op != OpConst32
// result: (Rsh32x32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) // result: (Rsh32x32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
hi := v_1.Args[0] hi := v_1.Args[0]
lo := v_1.Args[1] lo := v_1.Args[1]
if !(hi.Op != OpConst32) { if !(hi.Op != OpConst32) {
@ -1834,10 +1908,12 @@ func rewriteValuedec64_OpRsh64Ux16_0(v *Value) bool {
// cond: // cond:
// result: (Int64Make (Rsh32Ux16 <typ.UInt32> hi s) (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Rsh32Ux16 <typ.UInt32> lo s) (Lsh32x16 <typ.UInt32> hi (Sub16 <typ.UInt16> (Const16 <typ.UInt16> [32]) s))) (Rsh32Ux16 <typ.UInt32> hi (Sub16 <typ.UInt16> s (Const16 <typ.UInt16> [32]))))) // result: (Int64Make (Rsh32Ux16 <typ.UInt32> hi s) (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Rsh32Ux16 <typ.UInt32> lo s) (Lsh32x16 <typ.UInt32> hi (Sub16 <typ.UInt16> (Const16 <typ.UInt16> [32]) s))) (Rsh32Ux16 <typ.UInt32> hi (Sub16 <typ.UInt16> s (Const16 <typ.UInt16> [32])))))
for { for {
_ = v.Args[1]
v_0 := v.Args[0] v_0 := v.Args[0]
if v_0.Op != OpInt64Make { if v_0.Op != OpInt64Make {
break break
} }
_ = v_0.Args[1]
hi := v_0.Args[0] hi := v_0.Args[0]
lo := v_0.Args[1] lo := v_0.Args[1]
s := v.Args[1] s := v.Args[1]
@ -1885,10 +1961,12 @@ func rewriteValuedec64_OpRsh64Ux32_0(v *Value) bool {
// cond: // cond:
// result: (Int64Make (Rsh32Ux32 <typ.UInt32> hi s) (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Rsh32Ux32 <typ.UInt32> lo s) (Lsh32x32 <typ.UInt32> hi (Sub32 <typ.UInt32> (Const32 <typ.UInt32> [32]) s))) (Rsh32Ux32 <typ.UInt32> hi (Sub32 <typ.UInt32> s (Const32 <typ.UInt32> [32]))))) // result: (Int64Make (Rsh32Ux32 <typ.UInt32> hi s) (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Rsh32Ux32 <typ.UInt32> lo s) (Lsh32x32 <typ.UInt32> hi (Sub32 <typ.UInt32> (Const32 <typ.UInt32> [32]) s))) (Rsh32Ux32 <typ.UInt32> hi (Sub32 <typ.UInt32> s (Const32 <typ.UInt32> [32])))))
for { for {
_ = v.Args[1]
v_0 := v.Args[0] v_0 := v.Args[0]
if v_0.Op != OpInt64Make { if v_0.Op != OpInt64Make {
break break
} }
_ = v_0.Args[1]
hi := v_0.Args[0] hi := v_0.Args[0]
lo := v_0.Args[1] lo := v_0.Args[1]
s := v.Args[1] s := v.Args[1]
@ -1936,10 +2014,12 @@ func rewriteValuedec64_OpRsh64Ux64_0(v *Value) bool {
// cond: c != 0 // cond: c != 0
// result: (Const64 [0]) // result: (Const64 [0])
for { for {
_ = v.Args[1]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1956,11 +2036,13 @@ func rewriteValuedec64_OpRsh64Ux64_0(v *Value) bool {
// cond: // cond:
// result: (Rsh64Ux32 x lo) // result: (Rsh64Ux32 x lo)
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -1978,11 +2060,13 @@ func rewriteValuedec64_OpRsh64Ux64_0(v *Value) bool {
// cond: hi.Op != OpConst32 // cond: hi.Op != OpConst32
// result: (Rsh64Ux32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) // result: (Rsh64Ux32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
hi := v_1.Args[0] hi := v_1.Args[0]
lo := v_1.Args[1] lo := v_1.Args[1]
if !(hi.Op != OpConst32) { if !(hi.Op != OpConst32) {
@ -2009,10 +2093,12 @@ func rewriteValuedec64_OpRsh64Ux8_0(v *Value) bool {
// cond: // cond:
// result: (Int64Make (Rsh32Ux8 <typ.UInt32> hi s) (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Rsh32Ux8 <typ.UInt32> lo s) (Lsh32x8 <typ.UInt32> hi (Sub8 <typ.UInt8> (Const8 <typ.UInt8> [32]) s))) (Rsh32Ux8 <typ.UInt32> hi (Sub8 <typ.UInt8> s (Const8 <typ.UInt8> [32]))))) // result: (Int64Make (Rsh32Ux8 <typ.UInt32> hi s) (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Rsh32Ux8 <typ.UInt32> lo s) (Lsh32x8 <typ.UInt32> hi (Sub8 <typ.UInt8> (Const8 <typ.UInt8> [32]) s))) (Rsh32Ux8 <typ.UInt32> hi (Sub8 <typ.UInt8> s (Const8 <typ.UInt8> [32])))))
for { for {
_ = v.Args[1]
v_0 := v.Args[0] v_0 := v.Args[0]
if v_0.Op != OpInt64Make { if v_0.Op != OpInt64Make {
break break
} }
_ = v_0.Args[1]
hi := v_0.Args[0] hi := v_0.Args[0]
lo := v_0.Args[1] lo := v_0.Args[1]
s := v.Args[1] s := v.Args[1]
@ -2060,10 +2146,12 @@ func rewriteValuedec64_OpRsh64x16_0(v *Value) bool {
// cond: // cond:
// result: (Int64Make (Rsh32x16 <typ.UInt32> hi s) (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Rsh32Ux16 <typ.UInt32> lo s) (Lsh32x16 <typ.UInt32> hi (Sub16 <typ.UInt16> (Const16 <typ.UInt16> [32]) s))) (And32 <typ.UInt32> (Rsh32x16 <typ.UInt32> hi (Sub16 <typ.UInt16> s (Const16 <typ.UInt16> [32]))) (Zeromask (ZeroExt16to32 (Rsh16Ux32 <typ.UInt16> s (Const32 <typ.UInt32> [5]))))))) // result: (Int64Make (Rsh32x16 <typ.UInt32> hi s) (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Rsh32Ux16 <typ.UInt32> lo s) (Lsh32x16 <typ.UInt32> hi (Sub16 <typ.UInt16> (Const16 <typ.UInt16> [32]) s))) (And32 <typ.UInt32> (Rsh32x16 <typ.UInt32> hi (Sub16 <typ.UInt16> s (Const16 <typ.UInt16> [32]))) (Zeromask (ZeroExt16to32 (Rsh16Ux32 <typ.UInt16> s (Const32 <typ.UInt32> [5])))))))
for { for {
_ = v.Args[1]
v_0 := v.Args[0] v_0 := v.Args[0]
if v_0.Op != OpInt64Make { if v_0.Op != OpInt64Make {
break break
} }
_ = v_0.Args[1]
hi := v_0.Args[0] hi := v_0.Args[0]
lo := v_0.Args[1] lo := v_0.Args[1]
s := v.Args[1] s := v.Args[1]
@ -2123,10 +2211,12 @@ func rewriteValuedec64_OpRsh64x32_0(v *Value) bool {
// cond: // cond:
// result: (Int64Make (Rsh32x32 <typ.UInt32> hi s) (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Rsh32Ux32 <typ.UInt32> lo s) (Lsh32x32 <typ.UInt32> hi (Sub32 <typ.UInt32> (Const32 <typ.UInt32> [32]) s))) (And32 <typ.UInt32> (Rsh32x32 <typ.UInt32> hi (Sub32 <typ.UInt32> s (Const32 <typ.UInt32> [32]))) (Zeromask (Rsh32Ux32 <typ.UInt32> s (Const32 <typ.UInt32> [5])))))) // result: (Int64Make (Rsh32x32 <typ.UInt32> hi s) (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Rsh32Ux32 <typ.UInt32> lo s) (Lsh32x32 <typ.UInt32> hi (Sub32 <typ.UInt32> (Const32 <typ.UInt32> [32]) s))) (And32 <typ.UInt32> (Rsh32x32 <typ.UInt32> hi (Sub32 <typ.UInt32> s (Const32 <typ.UInt32> [32]))) (Zeromask (Rsh32Ux32 <typ.UInt32> s (Const32 <typ.UInt32> [5]))))))
for { for {
_ = v.Args[1]
v_0 := v.Args[0] v_0 := v.Args[0]
if v_0.Op != OpInt64Make { if v_0.Op != OpInt64Make {
break break
} }
_ = v_0.Args[1]
hi := v_0.Args[0] hi := v_0.Args[0]
lo := v_0.Args[1] lo := v_0.Args[1]
s := v.Args[1] s := v.Args[1]
@ -2184,11 +2274,13 @@ func rewriteValuedec64_OpRsh64x64_0(v *Value) bool {
// cond: c != 0 // cond: c != 0
// result: (Int64Make (Signmask (Int64Hi x)) (Signmask (Int64Hi x))) // result: (Int64Make (Signmask (Int64Hi x)) (Signmask (Int64Hi x)))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -2214,11 +2306,13 @@ func rewriteValuedec64_OpRsh64x64_0(v *Value) bool {
// cond: // cond:
// result: (Rsh64x32 x lo) // result: (Rsh64x32 x lo)
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -2236,11 +2330,13 @@ func rewriteValuedec64_OpRsh64x64_0(v *Value) bool {
// cond: hi.Op != OpConst32 // cond: hi.Op != OpConst32
// result: (Rsh64x32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) // result: (Rsh64x32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
hi := v_1.Args[0] hi := v_1.Args[0]
lo := v_1.Args[1] lo := v_1.Args[1]
if !(hi.Op != OpConst32) { if !(hi.Op != OpConst32) {
@ -2267,10 +2363,12 @@ func rewriteValuedec64_OpRsh64x8_0(v *Value) bool {
// cond: // cond:
// result: (Int64Make (Rsh32x8 <typ.UInt32> hi s) (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Rsh32Ux8 <typ.UInt32> lo s) (Lsh32x8 <typ.UInt32> hi (Sub8 <typ.UInt8> (Const8 <typ.UInt8> [32]) s))) (And32 <typ.UInt32> (Rsh32x8 <typ.UInt32> hi (Sub8 <typ.UInt8> s (Const8 <typ.UInt8> [32]))) (Zeromask (ZeroExt8to32 (Rsh8Ux32 <typ.UInt8> s (Const32 <typ.UInt32> [5]))))))) // result: (Int64Make (Rsh32x8 <typ.UInt32> hi s) (Or32 <typ.UInt32> (Or32 <typ.UInt32> (Rsh32Ux8 <typ.UInt32> lo s) (Lsh32x8 <typ.UInt32> hi (Sub8 <typ.UInt8> (Const8 <typ.UInt8> [32]) s))) (And32 <typ.UInt32> (Rsh32x8 <typ.UInt32> hi (Sub8 <typ.UInt8> s (Const8 <typ.UInt8> [32]))) (Zeromask (ZeroExt8to32 (Rsh8Ux32 <typ.UInt8> s (Const32 <typ.UInt32> [5])))))))
for { for {
_ = v.Args[1]
v_0 := v.Args[0] v_0 := v.Args[0]
if v_0.Op != OpInt64Make { if v_0.Op != OpInt64Make {
break break
} }
_ = v_0.Args[1]
hi := v_0.Args[0] hi := v_0.Args[0]
lo := v_0.Args[1] lo := v_0.Args[1]
s := v.Args[1] s := v.Args[1]
@ -2330,10 +2428,12 @@ func rewriteValuedec64_OpRsh8Ux64_0(v *Value) bool {
// cond: c != 0 // cond: c != 0
// result: (Const32 [0]) // result: (Const32 [0])
for { for {
_ = v.Args[1]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -2350,11 +2450,13 @@ func rewriteValuedec64_OpRsh8Ux64_0(v *Value) bool {
// cond: // cond:
// result: (Rsh8Ux32 x lo) // result: (Rsh8Ux32 x lo)
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -2372,11 +2474,13 @@ func rewriteValuedec64_OpRsh8Ux64_0(v *Value) bool {
// cond: hi.Op != OpConst32 // cond: hi.Op != OpConst32
// result: (Rsh8Ux32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) // result: (Rsh8Ux32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
hi := v_1.Args[0] hi := v_1.Args[0]
lo := v_1.Args[1] lo := v_1.Args[1]
if !(hi.Op != OpConst32) { if !(hi.Op != OpConst32) {
@ -2403,11 +2507,13 @@ func rewriteValuedec64_OpRsh8x64_0(v *Value) bool {
// cond: c != 0 // cond: c != 0
// result: (Signmask (SignExt8to32 x)) // result: (Signmask (SignExt8to32 x))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -2426,11 +2532,13 @@ func rewriteValuedec64_OpRsh8x64_0(v *Value) bool {
// cond: // cond:
// result: (Rsh8x32 x lo) // result: (Rsh8x32 x lo)
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
v_1_0 := v_1.Args[0] v_1_0 := v_1.Args[0]
if v_1_0.Op != OpConst32 { if v_1_0.Op != OpConst32 {
break break
@ -2448,11 +2556,13 @@ func rewriteValuedec64_OpRsh8x64_0(v *Value) bool {
// cond: hi.Op != OpConst32 // cond: hi.Op != OpConst32
// result: (Rsh8x32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) // result: (Rsh8x32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
hi := v_1.Args[0] hi := v_1.Args[0]
lo := v_1.Args[1] lo := v_1.Args[1]
if !(hi.Op != OpConst32) { if !(hi.Op != OpConst32) {
@ -2532,11 +2642,13 @@ func rewriteValuedec64_OpStore_0(v *Value) bool {
// result: (Store {hi.Type} (OffPtr <hi.Type.PtrTo()> [4] dst) hi (Store {lo.Type} dst lo mem)) // result: (Store {hi.Type} (OffPtr <hi.Type.PtrTo()> [4] dst) hi (Store {lo.Type} dst lo mem))
for { for {
t := v.Aux t := v.Aux
_ = v.Args[2]
dst := v.Args[0] dst := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
hi := v_1.Args[0] hi := v_1.Args[0]
lo := v_1.Args[1] lo := v_1.Args[1]
mem := v.Args[2] mem := v.Args[2]
@ -2563,11 +2675,13 @@ func rewriteValuedec64_OpStore_0(v *Value) bool {
// result: (Store {lo.Type} (OffPtr <lo.Type.PtrTo()> [4] dst) lo (Store {hi.Type} dst hi mem)) // result: (Store {lo.Type} (OffPtr <lo.Type.PtrTo()> [4] dst) lo (Store {hi.Type} dst hi mem))
for { for {
t := v.Aux t := v.Aux
_ = v.Args[2]
dst := v.Args[0] dst := v.Args[0]
v_1 := v.Args[1] v_1 := v.Args[1]
if v_1.Op != OpInt64Make { if v_1.Op != OpInt64Make {
break break
} }
_ = v_1.Args[1]
hi := v_1.Args[0] hi := v_1.Args[0]
lo := v_1.Args[1] lo := v_1.Args[1]
mem := v.Args[2] mem := v.Args[2]
@ -2600,6 +2714,7 @@ func rewriteValuedec64_OpSub64_0(v *Value) bool {
// cond: // cond:
// result: (Int64Make (Sub32withcarry <typ.Int32> (Int64Hi x) (Int64Hi y) (Select1 <types.TypeFlags> (Sub32carry (Int64Lo x) (Int64Lo y)))) (Select0 <typ.UInt32> (Sub32carry (Int64Lo x) (Int64Lo y)))) // result: (Int64Make (Sub32withcarry <typ.Int32> (Int64Hi x) (Int64Hi y) (Select1 <types.TypeFlags> (Sub32carry (Int64Lo x) (Int64Lo y)))) (Select0 <typ.UInt32> (Sub32carry (Int64Lo x) (Int64Lo y))))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
y := v.Args[1] y := v.Args[1]
v.reset(OpInt64Make) v.reset(OpInt64Make)
@ -2643,6 +2758,7 @@ func rewriteValuedec64_OpTrunc64to16_0(v *Value) bool {
if v_0.Op != OpInt64Make { if v_0.Op != OpInt64Make {
break break
} }
_ = v_0.Args[1]
lo := v_0.Args[1] lo := v_0.Args[1]
v.reset(OpTrunc32to16) v.reset(OpTrunc32to16)
v.AddArg(lo) v.AddArg(lo)
@ -2659,6 +2775,7 @@ func rewriteValuedec64_OpTrunc64to32_0(v *Value) bool {
if v_0.Op != OpInt64Make { if v_0.Op != OpInt64Make {
break break
} }
_ = v_0.Args[1]
lo := v_0.Args[1] lo := v_0.Args[1]
v.reset(OpCopy) v.reset(OpCopy)
v.Type = lo.Type v.Type = lo.Type
@ -2676,6 +2793,7 @@ func rewriteValuedec64_OpTrunc64to8_0(v *Value) bool {
if v_0.Op != OpInt64Make { if v_0.Op != OpInt64Make {
break break
} }
_ = v_0.Args[1]
lo := v_0.Args[1] lo := v_0.Args[1]
v.reset(OpTrunc32to8) v.reset(OpTrunc32to8)
v.AddArg(lo) v.AddArg(lo)
@ -2692,6 +2810,7 @@ func rewriteValuedec64_OpXor64_0(v *Value) bool {
// cond: // cond:
// result: (Int64Make (Xor32 <typ.UInt32> (Int64Hi x) (Int64Hi y)) (Xor32 <typ.UInt32> (Int64Lo x) (Int64Lo y))) // result: (Int64Make (Xor32 <typ.UInt32> (Int64Hi x) (Int64Hi y)) (Xor32 <typ.UInt32> (Int64Lo x) (Int64Lo y)))
for { for {
_ = v.Args[1]
x := v.Args[0] x := v.Args[0]
y := v.Args[1] y := v.Args[1]
v.reset(OpInt64Make) v.reset(OpInt64Make)

File diff suppressed because it is too large Load Diff