cmd/compile: rewrite dec rules to use typed aux field

Passes toolstash-check -all.

Change-Id: Ia73233c2269017a5802df821ea2ca138c16a94ee
Reviewed-on: https://go-review.googlesource.com/c/go/+/229519
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Michael Munday <mike.munday@ibm.com>
This commit is contained in:
Cuong Manh Le 2020-04-23 11:02:15 +07:00
parent 7f0c479fff
commit 917aa72c14
2 changed files with 48 additions and 48 deletions

View File

@ -8,56 +8,56 @@
// pass which handles phis of these types. // pass which handles phis of these types.
// complex ops // complex ops
(ComplexReal (ComplexMake real _ )) -> real (ComplexReal (ComplexMake real _ )) => real
(ComplexImag (ComplexMake _ imag )) -> imag (ComplexImag (ComplexMake _ imag )) => imag
(Load <t> ptr mem) && t.IsComplex() && t.Size() == 8 -> (Load <t> ptr mem) && t.IsComplex() && t.Size() == 8 =>
(ComplexMake (ComplexMake
(Load <typ.Float32> ptr mem) (Load <typ.Float32> ptr mem)
(Load <typ.Float32> (Load <typ.Float32>
(OffPtr <typ.Float32Ptr> [4] ptr) (OffPtr <typ.Float32Ptr> [4] ptr)
mem) mem)
) )
(Store {t} dst (ComplexMake real imag) mem) && t.(*types.Type).Size() == 8 -> (Store {t} dst (ComplexMake real imag) mem) && t.Size() == 8 =>
(Store {typ.Float32} (Store {typ.Float32}
(OffPtr <typ.Float32Ptr> [4] dst) (OffPtr <typ.Float32Ptr> [4] dst)
imag imag
(Store {typ.Float32} dst real mem)) (Store {typ.Float32} dst real mem))
(Load <t> ptr mem) && t.IsComplex() && t.Size() == 16 -> (Load <t> ptr mem) && t.IsComplex() && t.Size() == 16 =>
(ComplexMake (ComplexMake
(Load <typ.Float64> ptr mem) (Load <typ.Float64> ptr mem)
(Load <typ.Float64> (Load <typ.Float64>
(OffPtr <typ.Float64Ptr> [8] ptr) (OffPtr <typ.Float64Ptr> [8] ptr)
mem) mem)
) )
(Store {t} dst (ComplexMake real imag) mem) && t.(*types.Type).Size() == 16 -> (Store {t} dst (ComplexMake real imag) mem) && t.Size() == 16 =>
(Store {typ.Float64} (Store {typ.Float64}
(OffPtr <typ.Float64Ptr> [8] dst) (OffPtr <typ.Float64Ptr> [8] dst)
imag imag
(Store {typ.Float64} dst real mem)) (Store {typ.Float64} dst real mem))
// string ops // string ops
(StringPtr (StringMake ptr _)) -> ptr (StringPtr (StringMake ptr _)) => ptr
(StringLen (StringMake _ len)) -> len (StringLen (StringMake _ len)) => len
(Load <t> ptr mem) && t.IsString() -> (Load <t> ptr mem) && t.IsString() =>
(StringMake (StringMake
(Load <typ.BytePtr> ptr mem) (Load <typ.BytePtr> ptr mem)
(Load <typ.Int> (Load <typ.Int>
(OffPtr <typ.IntPtr> [config.PtrSize] ptr) (OffPtr <typ.IntPtr> [config.PtrSize] ptr)
mem)) mem))
(Store dst (StringMake ptr len) mem) -> (Store dst (StringMake ptr len) mem) =>
(Store {typ.Int} (Store {typ.Int}
(OffPtr <typ.IntPtr> [config.PtrSize] dst) (OffPtr <typ.IntPtr> [config.PtrSize] dst)
len len
(Store {typ.BytePtr} dst ptr mem)) (Store {typ.BytePtr} dst ptr mem))
// slice ops // slice ops
(SlicePtr (SliceMake ptr _ _ )) -> ptr (SlicePtr (SliceMake ptr _ _ )) => ptr
(SliceLen (SliceMake _ len _)) -> len (SliceLen (SliceMake _ len _)) => len
(SliceCap (SliceMake _ _ cap)) -> cap (SliceCap (SliceMake _ _ cap)) => cap
(Load <t> ptr mem) && t.IsSlice() -> (Load <t> ptr mem) && t.IsSlice() =>
(SliceMake (SliceMake
(Load <t.Elem().PtrTo()> ptr mem) (Load <t.Elem().PtrTo()> ptr mem)
(Load <typ.Int> (Load <typ.Int>
@ -66,7 +66,7 @@
(Load <typ.Int> (Load <typ.Int>
(OffPtr <typ.IntPtr> [2*config.PtrSize] ptr) (OffPtr <typ.IntPtr> [2*config.PtrSize] ptr)
mem)) mem))
(Store dst (SliceMake ptr len cap) mem) -> (Store dst (SliceMake ptr len cap) mem) =>
(Store {typ.Int} (Store {typ.Int}
(OffPtr <typ.IntPtr> [2*config.PtrSize] dst) (OffPtr <typ.IntPtr> [2*config.PtrSize] dst)
cap cap
@ -76,16 +76,16 @@
(Store {typ.BytePtr} dst ptr mem))) (Store {typ.BytePtr} dst ptr mem)))
// interface ops // interface ops
(ITab (IMake itab _)) -> itab (ITab (IMake itab _)) => itab
(IData (IMake _ data)) -> data (IData (IMake _ data)) => data
(Load <t> ptr mem) && t.IsInterface() -> (Load <t> ptr mem) && t.IsInterface() =>
(IMake (IMake
(Load <typ.Uintptr> ptr mem) (Load <typ.Uintptr> ptr mem)
(Load <typ.BytePtr> (Load <typ.BytePtr>
(OffPtr <typ.BytePtrPtr> [config.PtrSize] ptr) (OffPtr <typ.BytePtrPtr> [config.PtrSize] ptr)
mem)) mem))
(Store dst (IMake itab data) mem) -> (Store dst (IMake itab data) mem) =>
(Store {typ.BytePtr} (Store {typ.BytePtr}
(OffPtr <typ.BytePtrPtr> [config.PtrSize] dst) (OffPtr <typ.BytePtrPtr> [config.PtrSize] dst)
data data

View File

@ -109,7 +109,7 @@ func rewriteValuedec_OpLoad(v *Value) bool {
v0.AddArg2(ptr, mem) v0.AddArg2(ptr, mem)
v1 := b.NewValue0(v.Pos, OpLoad, typ.Float32) v1 := b.NewValue0(v.Pos, OpLoad, typ.Float32)
v2 := b.NewValue0(v.Pos, OpOffPtr, typ.Float32Ptr) v2 := b.NewValue0(v.Pos, OpOffPtr, typ.Float32Ptr)
v2.AuxInt = 4 v2.AuxInt = int64ToAuxInt(4)
v2.AddArg(ptr) v2.AddArg(ptr)
v1.AddArg2(v2, mem) v1.AddArg2(v2, mem)
v.AddArg2(v0, v1) v.AddArg2(v0, v1)
@ -130,7 +130,7 @@ func rewriteValuedec_OpLoad(v *Value) bool {
v0.AddArg2(ptr, mem) v0.AddArg2(ptr, mem)
v1 := b.NewValue0(v.Pos, OpLoad, typ.Float64) v1 := b.NewValue0(v.Pos, OpLoad, typ.Float64)
v2 := b.NewValue0(v.Pos, OpOffPtr, typ.Float64Ptr) v2 := b.NewValue0(v.Pos, OpOffPtr, typ.Float64Ptr)
v2.AuxInt = 8 v2.AuxInt = int64ToAuxInt(8)
v2.AddArg(ptr) v2.AddArg(ptr)
v1.AddArg2(v2, mem) v1.AddArg2(v2, mem)
v.AddArg2(v0, v1) v.AddArg2(v0, v1)
@ -151,7 +151,7 @@ func rewriteValuedec_OpLoad(v *Value) bool {
v0.AddArg2(ptr, mem) v0.AddArg2(ptr, mem)
v1 := b.NewValue0(v.Pos, OpLoad, typ.Int) v1 := b.NewValue0(v.Pos, OpLoad, typ.Int)
v2 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr) v2 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
v2.AuxInt = config.PtrSize v2.AuxInt = int64ToAuxInt(config.PtrSize)
v2.AddArg(ptr) v2.AddArg(ptr)
v1.AddArg2(v2, mem) v1.AddArg2(v2, mem)
v.AddArg2(v0, v1) v.AddArg2(v0, v1)
@ -172,12 +172,12 @@ func rewriteValuedec_OpLoad(v *Value) bool {
v0.AddArg2(ptr, mem) v0.AddArg2(ptr, mem)
v1 := b.NewValue0(v.Pos, OpLoad, typ.Int) v1 := b.NewValue0(v.Pos, OpLoad, typ.Int)
v2 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr) v2 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
v2.AuxInt = config.PtrSize v2.AuxInt = int64ToAuxInt(config.PtrSize)
v2.AddArg(ptr) v2.AddArg(ptr)
v1.AddArg2(v2, mem) v1.AddArg2(v2, mem)
v3 := b.NewValue0(v.Pos, OpLoad, typ.Int) v3 := b.NewValue0(v.Pos, OpLoad, typ.Int)
v4 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr) v4 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
v4.AuxInt = 2 * config.PtrSize v4.AuxInt = int64ToAuxInt(2 * config.PtrSize)
v4.AddArg(ptr) v4.AddArg(ptr)
v3.AddArg2(v4, mem) v3.AddArg2(v4, mem)
v.AddArg3(v0, v1, v3) v.AddArg3(v0, v1, v3)
@ -198,7 +198,7 @@ func rewriteValuedec_OpLoad(v *Value) bool {
v0.AddArg2(ptr, mem) v0.AddArg2(ptr, mem)
v1 := b.NewValue0(v.Pos, OpLoad, typ.BytePtr) v1 := b.NewValue0(v.Pos, OpLoad, typ.BytePtr)
v2 := b.NewValue0(v.Pos, OpOffPtr, typ.BytePtrPtr) v2 := b.NewValue0(v.Pos, OpOffPtr, typ.BytePtrPtr)
v2.AuxInt = config.PtrSize v2.AuxInt = int64ToAuxInt(config.PtrSize)
v2.AddArg(ptr) v2.AddArg(ptr)
v1.AddArg2(v2, mem) v1.AddArg2(v2, mem)
v.AddArg2(v0, v1) v.AddArg2(v0, v1)
@ -256,10 +256,10 @@ func rewriteValuedec_OpStore(v *Value) bool {
config := b.Func.Config config := b.Func.Config
typ := &b.Func.Config.Types typ := &b.Func.Config.Types
// match: (Store {t} dst (ComplexMake real imag) mem) // match: (Store {t} dst (ComplexMake real imag) mem)
// cond: t.(*types.Type).Size() == 8 // cond: t.Size() == 8
// 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 := auxToType(v.Aux)
dst := v_0 dst := v_0
if v_1.Op != OpComplexMake { if v_1.Op != OpComplexMake {
break break
@ -267,25 +267,25 @@ func rewriteValuedec_OpStore(v *Value) bool {
imag := v_1.Args[1] imag := v_1.Args[1]
real := v_1.Args[0] real := v_1.Args[0]
mem := v_2 mem := v_2
if !(t.(*types.Type).Size() == 8) { if !(t.Size() == 8) {
break break
} }
v.reset(OpStore) v.reset(OpStore)
v.Aux = typ.Float32 v.Aux = typeToAux(typ.Float32)
v0 := b.NewValue0(v.Pos, OpOffPtr, typ.Float32Ptr) v0 := b.NewValue0(v.Pos, OpOffPtr, typ.Float32Ptr)
v0.AuxInt = 4 v0.AuxInt = int64ToAuxInt(4)
v0.AddArg(dst) v0.AddArg(dst)
v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem) v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
v1.Aux = typ.Float32 v1.Aux = typeToAux(typ.Float32)
v1.AddArg3(dst, real, mem) v1.AddArg3(dst, real, mem)
v.AddArg3(v0, imag, v1) v.AddArg3(v0, imag, v1)
return true return true
} }
// match: (Store {t} dst (ComplexMake real imag) mem) // match: (Store {t} dst (ComplexMake real imag) mem)
// cond: t.(*types.Type).Size() == 16 // cond: t.Size() == 16
// 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 := auxToType(v.Aux)
dst := v_0 dst := v_0
if v_1.Op != OpComplexMake { if v_1.Op != OpComplexMake {
break break
@ -293,16 +293,16 @@ func rewriteValuedec_OpStore(v *Value) bool {
imag := v_1.Args[1] imag := v_1.Args[1]
real := v_1.Args[0] real := v_1.Args[0]
mem := v_2 mem := v_2
if !(t.(*types.Type).Size() == 16) { if !(t.Size() == 16) {
break break
} }
v.reset(OpStore) v.reset(OpStore)
v.Aux = typ.Float64 v.Aux = typeToAux(typ.Float64)
v0 := b.NewValue0(v.Pos, OpOffPtr, typ.Float64Ptr) v0 := b.NewValue0(v.Pos, OpOffPtr, typ.Float64Ptr)
v0.AuxInt = 8 v0.AuxInt = int64ToAuxInt(8)
v0.AddArg(dst) v0.AddArg(dst)
v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem) v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
v1.Aux = typ.Float64 v1.Aux = typeToAux(typ.Float64)
v1.AddArg3(dst, real, mem) v1.AddArg3(dst, real, mem)
v.AddArg3(v0, imag, v1) v.AddArg3(v0, imag, v1)
return true return true
@ -318,12 +318,12 @@ func rewriteValuedec_OpStore(v *Value) bool {
ptr := v_1.Args[0] ptr := v_1.Args[0]
mem := v_2 mem := v_2
v.reset(OpStore) v.reset(OpStore)
v.Aux = typ.Int v.Aux = typeToAux(typ.Int)
v0 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr) v0 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
v0.AuxInt = config.PtrSize v0.AuxInt = int64ToAuxInt(config.PtrSize)
v0.AddArg(dst) v0.AddArg(dst)
v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem) v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
v1.Aux = typ.BytePtr v1.Aux = typeToAux(typ.BytePtr)
v1.AddArg3(dst, ptr, mem) v1.AddArg3(dst, ptr, mem)
v.AddArg3(v0, len, v1) v.AddArg3(v0, len, v1)
return true return true
@ -340,17 +340,17 @@ func rewriteValuedec_OpStore(v *Value) bool {
len := v_1.Args[1] len := v_1.Args[1]
mem := v_2 mem := v_2
v.reset(OpStore) v.reset(OpStore)
v.Aux = typ.Int v.Aux = typeToAux(typ.Int)
v0 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr) v0 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
v0.AuxInt = 2 * config.PtrSize v0.AuxInt = int64ToAuxInt(2 * config.PtrSize)
v0.AddArg(dst) v0.AddArg(dst)
v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem) v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
v1.Aux = typ.Int v1.Aux = typeToAux(typ.Int)
v2 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr) v2 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
v2.AuxInt = config.PtrSize v2.AuxInt = int64ToAuxInt(config.PtrSize)
v2.AddArg(dst) v2.AddArg(dst)
v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem) v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
v3.Aux = typ.BytePtr v3.Aux = typeToAux(typ.BytePtr)
v3.AddArg3(dst, ptr, mem) v3.AddArg3(dst, ptr, mem)
v1.AddArg3(v2, len, v3) v1.AddArg3(v2, len, v3)
v.AddArg3(v0, cap, v1) v.AddArg3(v0, cap, v1)
@ -367,12 +367,12 @@ func rewriteValuedec_OpStore(v *Value) bool {
itab := v_1.Args[0] itab := v_1.Args[0]
mem := v_2 mem := v_2
v.reset(OpStore) v.reset(OpStore)
v.Aux = typ.BytePtr v.Aux = typeToAux(typ.BytePtr)
v0 := b.NewValue0(v.Pos, OpOffPtr, typ.BytePtrPtr) v0 := b.NewValue0(v.Pos, OpOffPtr, typ.BytePtrPtr)
v0.AuxInt = config.PtrSize v0.AuxInt = int64ToAuxInt(config.PtrSize)
v0.AddArg(dst) v0.AddArg(dst)
v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem) v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
v1.Aux = typ.Uintptr v1.Aux = typeToAux(typ.Uintptr)
v1.AddArg3(dst, itab, mem) v1.AddArg3(dst, itab, mem)
v.AddArg3(v0, data, v1) v.AddArg3(v0, data, v1)
return true return true