1 // Code generated from _gen/dec.rules using 'go generate'; DO NOT EDIT.
5 import "cmd/compile/internal/types"
7 func rewriteValuedec(v *Value) bool {
10 return rewriteValuedec_OpArrayMake1(v)
12 return rewriteValuedec_OpArraySelect(v)
14 return rewriteValuedec_OpComplexImag(v)
16 return rewriteValuedec_OpComplexReal(v)
18 return rewriteValuedec_OpIData(v)
20 return rewriteValuedec_OpIMake(v)
22 return rewriteValuedec_OpITab(v)
24 return rewriteValuedec_OpLoad(v)
26 return rewriteValuedec_OpSliceCap(v)
28 return rewriteValuedec_OpSliceLen(v)
30 return rewriteValuedec_OpSlicePtr(v)
31 case OpSlicePtrUnchecked:
32 return rewriteValuedec_OpSlicePtrUnchecked(v)
34 return rewriteValuedec_OpStore(v)
36 return rewriteValuedec_OpStringLen(v)
38 return rewriteValuedec_OpStringPtr(v)
40 return rewriteValuedec_OpStructMake1(v)
42 return rewriteValuedec_OpStructSelect(v)
46 func rewriteValuedec_OpArrayMake1(v *Value) bool {
48 // match: (ArrayMake1 x)
49 // cond: x.Type.IsPtr()
53 if !(x.Type.IsPtr()) {
61 func rewriteValuedec_OpArraySelect(v *Value) bool {
64 // match: (ArraySelect [0] x)
65 // cond: x.Type.IsPtr()
68 if auxIntToInt64(v.AuxInt) != 0 {
72 if !(x.Type.IsPtr()) {
78 // match: (ArraySelect (ArrayMake1 x))
81 if v_0.Op != OpArrayMake1 {
88 // match: (ArraySelect [0] (IData x))
91 if auxIntToInt64(v.AuxInt) != 0 || v_0.Op != OpIData {
99 // match: (ArraySelect [i] x:(Load <t> ptr mem))
100 // result: @x.Block (Load <v.Type> (OffPtr <v.Type.PtrTo()> [t.Elem().Size()*i] ptr) mem)
102 i := auxIntToInt64(v.AuxInt)
111 v0 := b.NewValue0(v.Pos, OpLoad, v.Type)
113 v1 := b.NewValue0(v.Pos, OpOffPtr, v.Type.PtrTo())
114 v1.AuxInt = int64ToAuxInt(t.Elem().Size() * i)
121 func rewriteValuedec_OpComplexImag(v *Value) bool {
124 typ := &b.Func.Config.Types
125 // match: (ComplexImag (ComplexMake _ imag ))
128 if v_0.Op != OpComplexMake {
135 // match: (ComplexImag x:(Load <t> ptr mem))
136 // cond: t.IsComplex() && t.Size() == 8
137 // result: @x.Block (Load <typ.Float32> (OffPtr <typ.Float32Ptr> [4] ptr) mem)
146 if !(t.IsComplex() && t.Size() == 8) {
150 v0 := b.NewValue0(v.Pos, OpLoad, typ.Float32)
152 v1 := b.NewValue0(v.Pos, OpOffPtr, typ.Float32Ptr)
153 v1.AuxInt = int64ToAuxInt(4)
158 // match: (ComplexImag x:(Load <t> ptr mem))
159 // cond: t.IsComplex() && t.Size() == 16
160 // result: @x.Block (Load <typ.Float64> (OffPtr <typ.Float64Ptr> [8] ptr) mem)
169 if !(t.IsComplex() && t.Size() == 16) {
173 v0 := b.NewValue0(v.Pos, OpLoad, typ.Float64)
175 v1 := b.NewValue0(v.Pos, OpOffPtr, typ.Float64Ptr)
176 v1.AuxInt = int64ToAuxInt(8)
183 func rewriteValuedec_OpComplexReal(v *Value) bool {
186 typ := &b.Func.Config.Types
187 // match: (ComplexReal (ComplexMake real _ ))
190 if v_0.Op != OpComplexMake {
197 // match: (ComplexReal x:(Load <t> ptr mem))
198 // cond: t.IsComplex() && t.Size() == 8
199 // result: @x.Block (Load <typ.Float32> ptr mem)
208 if !(t.IsComplex() && t.Size() == 8) {
212 v0 := b.NewValue0(v.Pos, OpLoad, typ.Float32)
217 // match: (ComplexReal x:(Load <t> ptr mem))
218 // cond: t.IsComplex() && t.Size() == 16
219 // result: @x.Block (Load <typ.Float64> ptr mem)
228 if !(t.IsComplex() && t.Size() == 16) {
232 v0 := b.NewValue0(v.Pos, OpLoad, typ.Float64)
239 func rewriteValuedec_OpIData(v *Value) bool {
242 config := b.Func.Config
243 typ := &b.Func.Config.Types
244 // match: (IData (IMake _ data))
247 if v_0.Op != OpIMake {
254 // match: (IData x:(Load <t> ptr mem))
255 // cond: t.IsInterface()
256 // result: @x.Block (Load <typ.BytePtr> (OffPtr <typ.BytePtrPtr> [config.PtrSize] ptr) mem)
265 if !(t.IsInterface()) {
269 v0 := b.NewValue0(v.Pos, OpLoad, typ.BytePtr)
271 v1 := b.NewValue0(v.Pos, OpOffPtr, typ.BytePtrPtr)
272 v1.AuxInt = int64ToAuxInt(config.PtrSize)
279 func rewriteValuedec_OpIMake(v *Value) bool {
282 // match: (IMake _typ (StructMake1 val))
283 // result: (IMake _typ val)
286 if v_1.Op != OpStructMake1 {
296 func rewriteValuedec_OpITab(v *Value) bool {
299 typ := &b.Func.Config.Types
300 // match: (ITab (IMake itab _))
303 if v_0.Op != OpIMake {
310 // match: (ITab x:(Load <t> ptr mem))
311 // cond: t.IsInterface()
312 // result: @x.Block (Load <typ.Uintptr> ptr mem)
321 if !(t.IsInterface()) {
325 v0 := b.NewValue0(v.Pos, OpLoad, typ.Uintptr)
332 func rewriteValuedec_OpLoad(v *Value) bool {
336 config := b.Func.Config
337 typ := &b.Func.Config.Types
338 // match: (Load <t> ptr mem)
339 // cond: t.IsComplex() && t.Size() == 8
340 // result: (ComplexMake (Load <typ.Float32> ptr mem) (Load <typ.Float32> (OffPtr <typ.Float32Ptr> [4] ptr) mem) )
345 if !(t.IsComplex() && t.Size() == 8) {
348 v.reset(OpComplexMake)
349 v0 := b.NewValue0(v.Pos, OpLoad, typ.Float32)
351 v1 := b.NewValue0(v.Pos, OpLoad, typ.Float32)
352 v2 := b.NewValue0(v.Pos, OpOffPtr, typ.Float32Ptr)
353 v2.AuxInt = int64ToAuxInt(4)
359 // match: (Load <t> ptr mem)
360 // cond: t.IsComplex() && t.Size() == 16
361 // result: (ComplexMake (Load <typ.Float64> ptr mem) (Load <typ.Float64> (OffPtr <typ.Float64Ptr> [8] ptr) mem) )
366 if !(t.IsComplex() && t.Size() == 16) {
369 v.reset(OpComplexMake)
370 v0 := b.NewValue0(v.Pos, OpLoad, typ.Float64)
372 v1 := b.NewValue0(v.Pos, OpLoad, typ.Float64)
373 v2 := b.NewValue0(v.Pos, OpOffPtr, typ.Float64Ptr)
374 v2.AuxInt = int64ToAuxInt(8)
380 // match: (Load <t> ptr mem)
381 // cond: t.IsString()
382 // result: (StringMake (Load <typ.BytePtr> ptr mem) (Load <typ.Int> (OffPtr <typ.IntPtr> [config.PtrSize] ptr) mem))
390 v.reset(OpStringMake)
391 v0 := b.NewValue0(v.Pos, OpLoad, typ.BytePtr)
393 v1 := b.NewValue0(v.Pos, OpLoad, typ.Int)
394 v2 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
395 v2.AuxInt = int64ToAuxInt(config.PtrSize)
401 // match: (Load <t> ptr mem)
403 // result: (SliceMake (Load <t.Elem().PtrTo()> ptr mem) (Load <typ.Int> (OffPtr <typ.IntPtr> [config.PtrSize] ptr) mem) (Load <typ.Int> (OffPtr <typ.IntPtr> [2*config.PtrSize] ptr) mem))
412 v0 := b.NewValue0(v.Pos, OpLoad, t.Elem().PtrTo())
414 v1 := b.NewValue0(v.Pos, OpLoad, typ.Int)
415 v2 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
416 v2.AuxInt = int64ToAuxInt(config.PtrSize)
419 v3 := b.NewValue0(v.Pos, OpLoad, typ.Int)
420 v4 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
421 v4.AuxInt = int64ToAuxInt(2 * config.PtrSize)
424 v.AddArg3(v0, v1, v3)
427 // match: (Load <t> ptr mem)
428 // cond: t.IsInterface()
429 // result: (IMake (Load <typ.Uintptr> ptr mem) (Load <typ.BytePtr> (OffPtr <typ.BytePtrPtr> [config.PtrSize] ptr) mem))
434 if !(t.IsInterface()) {
438 v0 := b.NewValue0(v.Pos, OpLoad, typ.Uintptr)
440 v1 := b.NewValue0(v.Pos, OpLoad, typ.BytePtr)
441 v2 := b.NewValue0(v.Pos, OpOffPtr, typ.BytePtrPtr)
442 v2.AuxInt = int64ToAuxInt(config.PtrSize)
450 func rewriteValuedec_OpSliceCap(v *Value) bool {
453 config := b.Func.Config
454 typ := &b.Func.Config.Types
455 // match: (SliceCap (SliceMake _ _ cap))
458 if v_0.Op != OpSliceMake {
465 // match: (SliceCap x:(Load <t> ptr mem))
467 // result: @x.Block (Load <typ.Int> (OffPtr <typ.IntPtr> [2*config.PtrSize] ptr) mem)
480 v0 := b.NewValue0(v.Pos, OpLoad, typ.Int)
482 v1 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
483 v1.AuxInt = int64ToAuxInt(2 * config.PtrSize)
490 func rewriteValuedec_OpSliceLen(v *Value) bool {
493 config := b.Func.Config
494 typ := &b.Func.Config.Types
495 // match: (SliceLen (SliceMake _ len _))
498 if v_0.Op != OpSliceMake {
505 // match: (SliceLen x:(Load <t> ptr mem))
507 // result: @x.Block (Load <typ.Int> (OffPtr <typ.IntPtr> [config.PtrSize] ptr) mem)
520 v0 := b.NewValue0(v.Pos, OpLoad, typ.Int)
522 v1 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
523 v1.AuxInt = int64ToAuxInt(config.PtrSize)
530 func rewriteValuedec_OpSlicePtr(v *Value) bool {
533 // match: (SlicePtr (SliceMake ptr _ _ ))
536 if v_0.Op != OpSliceMake {
543 // match: (SlicePtr x:(Load <t> ptr mem))
545 // result: @x.Block (Load <t.Elem().PtrTo()> ptr mem)
558 v0 := b.NewValue0(v.Pos, OpLoad, t.Elem().PtrTo())
565 func rewriteValuedec_OpSlicePtrUnchecked(v *Value) bool {
567 // match: (SlicePtrUnchecked (SliceMake ptr _ _ ))
570 if v_0.Op != OpSliceMake {
579 func rewriteValuedec_OpStore(v *Value) bool {
584 config := b.Func.Config
585 typ := &b.Func.Config.Types
586 // match: (Store {t} dst (ComplexMake real imag) mem)
587 // cond: t.Size() == 8
588 // result: (Store {typ.Float32} (OffPtr <typ.Float32Ptr> [4] dst) imag (Store {typ.Float32} dst real mem))
590 t := auxToType(v.Aux)
592 if v_1.Op != OpComplexMake {
598 if !(t.Size() == 8) {
602 v.Aux = typeToAux(typ.Float32)
603 v0 := b.NewValue0(v.Pos, OpOffPtr, typ.Float32Ptr)
604 v0.AuxInt = int64ToAuxInt(4)
606 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
607 v1.Aux = typeToAux(typ.Float32)
608 v1.AddArg3(dst, real, mem)
609 v.AddArg3(v0, imag, v1)
612 // match: (Store {t} dst (ComplexMake real imag) mem)
613 // cond: t.Size() == 16
614 // result: (Store {typ.Float64} (OffPtr <typ.Float64Ptr> [8] dst) imag (Store {typ.Float64} dst real mem))
616 t := auxToType(v.Aux)
618 if v_1.Op != OpComplexMake {
624 if !(t.Size() == 16) {
628 v.Aux = typeToAux(typ.Float64)
629 v0 := b.NewValue0(v.Pos, OpOffPtr, typ.Float64Ptr)
630 v0.AuxInt = int64ToAuxInt(8)
632 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
633 v1.Aux = typeToAux(typ.Float64)
634 v1.AddArg3(dst, real, mem)
635 v.AddArg3(v0, imag, v1)
638 // match: (Store dst (StringMake ptr len) mem)
639 // result: (Store {typ.Int} (OffPtr <typ.IntPtr> [config.PtrSize] dst) len (Store {typ.BytePtr} dst ptr mem))
642 if v_1.Op != OpStringMake {
649 v.Aux = typeToAux(typ.Int)
650 v0 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
651 v0.AuxInt = int64ToAuxInt(config.PtrSize)
653 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
654 v1.Aux = typeToAux(typ.BytePtr)
655 v1.AddArg3(dst, ptr, mem)
656 v.AddArg3(v0, len, v1)
659 // match: (Store {t} dst (SliceMake ptr len cap) mem)
660 // result: (Store {typ.Int} (OffPtr <typ.IntPtr> [2*config.PtrSize] dst) cap (Store {typ.Int} (OffPtr <typ.IntPtr> [config.PtrSize] dst) len (Store {t.Elem().PtrTo()} dst ptr mem)))
662 t := auxToType(v.Aux)
664 if v_1.Op != OpSliceMake {
672 v.Aux = typeToAux(typ.Int)
673 v0 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
674 v0.AuxInt = int64ToAuxInt(2 * config.PtrSize)
676 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
677 v1.Aux = typeToAux(typ.Int)
678 v2 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
679 v2.AuxInt = int64ToAuxInt(config.PtrSize)
681 v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
682 v3.Aux = typeToAux(t.Elem().PtrTo())
683 v3.AddArg3(dst, ptr, mem)
684 v1.AddArg3(v2, len, v3)
685 v.AddArg3(v0, cap, v1)
688 // match: (Store dst (IMake itab data) mem)
689 // result: (Store {typ.BytePtr} (OffPtr <typ.BytePtrPtr> [config.PtrSize] dst) data (Store {typ.Uintptr} dst itab mem))
692 if v_1.Op != OpIMake {
699 v.Aux = typeToAux(typ.BytePtr)
700 v0 := b.NewValue0(v.Pos, OpOffPtr, typ.BytePtrPtr)
701 v0.AuxInt = int64ToAuxInt(config.PtrSize)
703 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
704 v1.Aux = typeToAux(typ.Uintptr)
705 v1.AddArg3(dst, itab, mem)
706 v.AddArg3(v0, data, v1)
709 // match: (Store dst (StructMake1 <t> f0) mem)
710 // result: (Store {t.FieldType(0)} (OffPtr <t.FieldType(0).PtrTo()> [0] dst) f0 mem)
713 if v_1.Op != OpStructMake1 {
720 v.Aux = typeToAux(t.FieldType(0))
721 v0 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo())
722 v0.AuxInt = int64ToAuxInt(0)
724 v.AddArg3(v0, f0, mem)
727 // match: (Store dst (StructMake2 <t> f0 f1) mem)
728 // result: (Store {t.FieldType(1)} (OffPtr <t.FieldType(1).PtrTo()> [t.FieldOff(1)] dst) f1 (Store {t.FieldType(0)} (OffPtr <t.FieldType(0).PtrTo()> [0] dst) f0 mem))
731 if v_1.Op != OpStructMake2 {
739 v.Aux = typeToAux(t.FieldType(1))
740 v0 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(1).PtrTo())
741 v0.AuxInt = int64ToAuxInt(t.FieldOff(1))
743 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
744 v1.Aux = typeToAux(t.FieldType(0))
745 v2 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo())
746 v2.AuxInt = int64ToAuxInt(0)
748 v1.AddArg3(v2, f0, mem)
749 v.AddArg3(v0, f1, v1)
752 // match: (Store dst (StructMake3 <t> f0 f1 f2) mem)
753 // result: (Store {t.FieldType(2)} (OffPtr <t.FieldType(2).PtrTo()> [t.FieldOff(2)] dst) f2 (Store {t.FieldType(1)} (OffPtr <t.FieldType(1).PtrTo()> [t.FieldOff(1)] dst) f1 (Store {t.FieldType(0)} (OffPtr <t.FieldType(0).PtrTo()> [0] dst) f0 mem)))
756 if v_1.Op != OpStructMake3 {
765 v.Aux = typeToAux(t.FieldType(2))
766 v0 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(2).PtrTo())
767 v0.AuxInt = int64ToAuxInt(t.FieldOff(2))
769 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
770 v1.Aux = typeToAux(t.FieldType(1))
771 v2 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(1).PtrTo())
772 v2.AuxInt = int64ToAuxInt(t.FieldOff(1))
774 v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
775 v3.Aux = typeToAux(t.FieldType(0))
776 v4 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo())
777 v4.AuxInt = int64ToAuxInt(0)
779 v3.AddArg3(v4, f0, mem)
780 v1.AddArg3(v2, f1, v3)
781 v.AddArg3(v0, f2, v1)
784 // match: (Store dst (StructMake4 <t> f0 f1 f2 f3) mem)
785 // result: (Store {t.FieldType(3)} (OffPtr <t.FieldType(3).PtrTo()> [t.FieldOff(3)] dst) f3 (Store {t.FieldType(2)} (OffPtr <t.FieldType(2).PtrTo()> [t.FieldOff(2)] dst) f2 (Store {t.FieldType(1)} (OffPtr <t.FieldType(1).PtrTo()> [t.FieldOff(1)] dst) f1 (Store {t.FieldType(0)} (OffPtr <t.FieldType(0).PtrTo()> [0] dst) f0 mem))))
788 if v_1.Op != OpStructMake4 {
798 v.Aux = typeToAux(t.FieldType(3))
799 v0 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(3).PtrTo())
800 v0.AuxInt = int64ToAuxInt(t.FieldOff(3))
802 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
803 v1.Aux = typeToAux(t.FieldType(2))
804 v2 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(2).PtrTo())
805 v2.AuxInt = int64ToAuxInt(t.FieldOff(2))
807 v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
808 v3.Aux = typeToAux(t.FieldType(1))
809 v4 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(1).PtrTo())
810 v4.AuxInt = int64ToAuxInt(t.FieldOff(1))
812 v5 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
813 v5.Aux = typeToAux(t.FieldType(0))
814 v6 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo())
815 v6.AuxInt = int64ToAuxInt(0)
817 v5.AddArg3(v6, f0, mem)
818 v3.AddArg3(v4, f1, v5)
819 v1.AddArg3(v2, f2, v3)
820 v.AddArg3(v0, f3, v1)
823 // match: (Store dst (ArrayMake1 e) mem)
824 // result: (Store {e.Type} dst e mem)
827 if v_1.Op != OpArrayMake1 {
833 v.Aux = typeToAux(e.Type)
834 v.AddArg3(dst, e, mem)
839 func rewriteValuedec_OpStringLen(v *Value) bool {
842 config := b.Func.Config
843 typ := &b.Func.Config.Types
844 // match: (StringLen (StringMake _ len))
847 if v_0.Op != OpStringMake {
854 // match: (StringLen x:(Load <t> ptr mem))
855 // cond: t.IsString()
856 // result: @x.Block (Load <typ.Int> (OffPtr <typ.IntPtr> [config.PtrSize] ptr) mem)
869 v0 := b.NewValue0(v.Pos, OpLoad, typ.Int)
871 v1 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
872 v1.AuxInt = int64ToAuxInt(config.PtrSize)
879 func rewriteValuedec_OpStringPtr(v *Value) bool {
882 typ := &b.Func.Config.Types
883 // match: (StringPtr (StringMake ptr _))
886 if v_0.Op != OpStringMake {
893 // match: (StringPtr x:(Load <t> ptr mem))
894 // cond: t.IsString()
895 // result: @x.Block (Load <typ.BytePtr> ptr mem)
908 v0 := b.NewValue0(v.Pos, OpLoad, typ.BytePtr)
915 func rewriteValuedec_OpStructMake1(v *Value) bool {
917 // match: (StructMake1 x)
918 // cond: x.Type.IsPtr()
922 if !(x.Type.IsPtr()) {
930 func rewriteValuedec_OpStructSelect(v *Value) bool {
933 // match: (StructSelect [0] (IData x))
936 if auxIntToInt64(v.AuxInt) != 0 || v_0.Op != OpIData {
944 // match: (StructSelect (StructMake1 x))
947 if v_0.Op != OpStructMake1 {
954 // match: (StructSelect [0] (StructMake2 x _))
957 if auxIntToInt64(v.AuxInt) != 0 || v_0.Op != OpStructMake2 {
964 // match: (StructSelect [1] (StructMake2 _ x))
967 if auxIntToInt64(v.AuxInt) != 1 || v_0.Op != OpStructMake2 {
974 // match: (StructSelect [0] (StructMake3 x _ _))
977 if auxIntToInt64(v.AuxInt) != 0 || v_0.Op != OpStructMake3 {
984 // match: (StructSelect [1] (StructMake3 _ x _))
987 if auxIntToInt64(v.AuxInt) != 1 || v_0.Op != OpStructMake3 {
994 // match: (StructSelect [2] (StructMake3 _ _ x))
997 if auxIntToInt64(v.AuxInt) != 2 || v_0.Op != OpStructMake3 {
1004 // match: (StructSelect [0] (StructMake4 x _ _ _))
1007 if auxIntToInt64(v.AuxInt) != 0 || v_0.Op != OpStructMake4 {
1014 // match: (StructSelect [1] (StructMake4 _ x _ _))
1017 if auxIntToInt64(v.AuxInt) != 1 || v_0.Op != OpStructMake4 {
1024 // match: (StructSelect [2] (StructMake4 _ _ x _))
1027 if auxIntToInt64(v.AuxInt) != 2 || v_0.Op != OpStructMake4 {
1034 // match: (StructSelect [3] (StructMake4 _ _ _ x))
1037 if auxIntToInt64(v.AuxInt) != 3 || v_0.Op != OpStructMake4 {
1044 // match: (StructSelect [0] x)
1045 // cond: x.Type.IsPtr()
1048 if auxIntToInt64(v.AuxInt) != 0 {
1052 if !(x.Type.IsPtr()) {
1058 // match: (StructSelect [i] x:(Load <t> ptr mem))
1059 // result: @x.Block (Load <v.Type> (OffPtr <v.Type.PtrTo()> [t.FieldOff(int(i))] ptr) mem)
1061 i := auxIntToInt64(v.AuxInt)
1070 v0 := b.NewValue0(v.Pos, OpLoad, v.Type)
1072 v1 := b.NewValue0(v.Pos, OpOffPtr, v.Type.PtrTo())
1073 v1.AuxInt = int64ToAuxInt(t.FieldOff(int(i)))
1080 func rewriteBlockdec(b *Block) bool {