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} _ _ mem)
587 // cond: t.Size() == 0
590 t := auxToType(v.Aux)
592 if !(t.Size() == 0) {
598 // match: (Store {t} dst (ComplexMake real imag) mem)
599 // cond: t.Size() == 8
600 // result: (Store {typ.Float32} (OffPtr <typ.Float32Ptr> [4] dst) imag (Store {typ.Float32} dst real mem))
602 t := auxToType(v.Aux)
604 if v_1.Op != OpComplexMake {
610 if !(t.Size() == 8) {
614 v.Aux = typeToAux(typ.Float32)
615 v0 := b.NewValue0(v.Pos, OpOffPtr, typ.Float32Ptr)
616 v0.AuxInt = int64ToAuxInt(4)
618 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
619 v1.Aux = typeToAux(typ.Float32)
620 v1.AddArg3(dst, real, mem)
621 v.AddArg3(v0, imag, v1)
624 // match: (Store {t} dst (ComplexMake real imag) mem)
625 // cond: t.Size() == 16
626 // result: (Store {typ.Float64} (OffPtr <typ.Float64Ptr> [8] dst) imag (Store {typ.Float64} dst real mem))
628 t := auxToType(v.Aux)
630 if v_1.Op != OpComplexMake {
636 if !(t.Size() == 16) {
640 v.Aux = typeToAux(typ.Float64)
641 v0 := b.NewValue0(v.Pos, OpOffPtr, typ.Float64Ptr)
642 v0.AuxInt = int64ToAuxInt(8)
644 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
645 v1.Aux = typeToAux(typ.Float64)
646 v1.AddArg3(dst, real, mem)
647 v.AddArg3(v0, imag, v1)
650 // match: (Store dst (StringMake ptr len) mem)
651 // result: (Store {typ.Int} (OffPtr <typ.IntPtr> [config.PtrSize] dst) len (Store {typ.BytePtr} dst ptr mem))
654 if v_1.Op != OpStringMake {
661 v.Aux = typeToAux(typ.Int)
662 v0 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
663 v0.AuxInt = int64ToAuxInt(config.PtrSize)
665 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
666 v1.Aux = typeToAux(typ.BytePtr)
667 v1.AddArg3(dst, ptr, mem)
668 v.AddArg3(v0, len, v1)
671 // match: (Store {t} dst (SliceMake ptr len cap) mem)
672 // 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)))
674 t := auxToType(v.Aux)
676 if v_1.Op != OpSliceMake {
684 v.Aux = typeToAux(typ.Int)
685 v0 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
686 v0.AuxInt = int64ToAuxInt(2 * config.PtrSize)
688 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
689 v1.Aux = typeToAux(typ.Int)
690 v2 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
691 v2.AuxInt = int64ToAuxInt(config.PtrSize)
693 v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
694 v3.Aux = typeToAux(t.Elem().PtrTo())
695 v3.AddArg3(dst, ptr, mem)
696 v1.AddArg3(v2, len, v3)
697 v.AddArg3(v0, cap, v1)
700 // match: (Store dst (IMake itab data) mem)
701 // result: (Store {typ.BytePtr} (OffPtr <typ.BytePtrPtr> [config.PtrSize] dst) data (Store {typ.Uintptr} dst itab mem))
704 if v_1.Op != OpIMake {
711 v.Aux = typeToAux(typ.BytePtr)
712 v0 := b.NewValue0(v.Pos, OpOffPtr, typ.BytePtrPtr)
713 v0.AuxInt = int64ToAuxInt(config.PtrSize)
715 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
716 v1.Aux = typeToAux(typ.Uintptr)
717 v1.AddArg3(dst, itab, mem)
718 v.AddArg3(v0, data, v1)
721 // match: (Store dst (StructMake1 <t> f0) mem)
722 // result: (Store {t.FieldType(0)} (OffPtr <t.FieldType(0).PtrTo()> [0] dst) f0 mem)
725 if v_1.Op != OpStructMake1 {
732 v.Aux = typeToAux(t.FieldType(0))
733 v0 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo())
734 v0.AuxInt = int64ToAuxInt(0)
736 v.AddArg3(v0, f0, mem)
739 // match: (Store dst (StructMake2 <t> f0 f1) mem)
740 // 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))
743 if v_1.Op != OpStructMake2 {
751 v.Aux = typeToAux(t.FieldType(1))
752 v0 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(1).PtrTo())
753 v0.AuxInt = int64ToAuxInt(t.FieldOff(1))
755 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
756 v1.Aux = typeToAux(t.FieldType(0))
757 v2 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo())
758 v2.AuxInt = int64ToAuxInt(0)
760 v1.AddArg3(v2, f0, mem)
761 v.AddArg3(v0, f1, v1)
764 // match: (Store dst (StructMake3 <t> f0 f1 f2) mem)
765 // 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)))
768 if v_1.Op != OpStructMake3 {
777 v.Aux = typeToAux(t.FieldType(2))
778 v0 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(2).PtrTo())
779 v0.AuxInt = int64ToAuxInt(t.FieldOff(2))
781 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
782 v1.Aux = typeToAux(t.FieldType(1))
783 v2 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(1).PtrTo())
784 v2.AuxInt = int64ToAuxInt(t.FieldOff(1))
786 v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
787 v3.Aux = typeToAux(t.FieldType(0))
788 v4 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo())
789 v4.AuxInt = int64ToAuxInt(0)
791 v3.AddArg3(v4, f0, mem)
792 v1.AddArg3(v2, f1, v3)
793 v.AddArg3(v0, f2, v1)
796 // match: (Store dst (StructMake4 <t> f0 f1 f2 f3) mem)
797 // 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))))
800 if v_1.Op != OpStructMake4 {
810 v.Aux = typeToAux(t.FieldType(3))
811 v0 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(3).PtrTo())
812 v0.AuxInt = int64ToAuxInt(t.FieldOff(3))
814 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
815 v1.Aux = typeToAux(t.FieldType(2))
816 v2 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(2).PtrTo())
817 v2.AuxInt = int64ToAuxInt(t.FieldOff(2))
819 v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
820 v3.Aux = typeToAux(t.FieldType(1))
821 v4 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(1).PtrTo())
822 v4.AuxInt = int64ToAuxInt(t.FieldOff(1))
824 v5 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
825 v5.Aux = typeToAux(t.FieldType(0))
826 v6 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo())
827 v6.AuxInt = int64ToAuxInt(0)
829 v5.AddArg3(v6, f0, mem)
830 v3.AddArg3(v4, f1, v5)
831 v1.AddArg3(v2, f2, v3)
832 v.AddArg3(v0, f3, v1)
835 // match: (Store dst (ArrayMake1 e) mem)
836 // result: (Store {e.Type} dst e mem)
839 if v_1.Op != OpArrayMake1 {
845 v.Aux = typeToAux(e.Type)
846 v.AddArg3(dst, e, mem)
851 func rewriteValuedec_OpStringLen(v *Value) bool {
854 config := b.Func.Config
855 typ := &b.Func.Config.Types
856 // match: (StringLen (StringMake _ len))
859 if v_0.Op != OpStringMake {
866 // match: (StringLen x:(Load <t> ptr mem))
867 // cond: t.IsString()
868 // result: @x.Block (Load <typ.Int> (OffPtr <typ.IntPtr> [config.PtrSize] ptr) mem)
881 v0 := b.NewValue0(v.Pos, OpLoad, typ.Int)
883 v1 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr)
884 v1.AuxInt = int64ToAuxInt(config.PtrSize)
891 func rewriteValuedec_OpStringPtr(v *Value) bool {
894 typ := &b.Func.Config.Types
895 // match: (StringPtr (StringMake ptr _))
898 if v_0.Op != OpStringMake {
905 // match: (StringPtr x:(Load <t> ptr mem))
906 // cond: t.IsString()
907 // result: @x.Block (Load <typ.BytePtr> ptr mem)
920 v0 := b.NewValue0(v.Pos, OpLoad, typ.BytePtr)
927 func rewriteValuedec_OpStructMake1(v *Value) bool {
929 // match: (StructMake1 x)
930 // cond: x.Type.IsPtr()
934 if !(x.Type.IsPtr()) {
942 func rewriteValuedec_OpStructSelect(v *Value) bool {
945 // match: (StructSelect [0] (IData x))
948 if auxIntToInt64(v.AuxInt) != 0 || v_0.Op != OpIData {
956 // match: (StructSelect (StructMake1 x))
959 if v_0.Op != OpStructMake1 {
966 // match: (StructSelect [0] (StructMake2 x _))
969 if auxIntToInt64(v.AuxInt) != 0 || v_0.Op != OpStructMake2 {
976 // match: (StructSelect [1] (StructMake2 _ x))
979 if auxIntToInt64(v.AuxInt) != 1 || v_0.Op != OpStructMake2 {
986 // match: (StructSelect [0] (StructMake3 x _ _))
989 if auxIntToInt64(v.AuxInt) != 0 || v_0.Op != OpStructMake3 {
996 // match: (StructSelect [1] (StructMake3 _ x _))
999 if auxIntToInt64(v.AuxInt) != 1 || v_0.Op != OpStructMake3 {
1006 // match: (StructSelect [2] (StructMake3 _ _ x))
1009 if auxIntToInt64(v.AuxInt) != 2 || v_0.Op != OpStructMake3 {
1016 // match: (StructSelect [0] (StructMake4 x _ _ _))
1019 if auxIntToInt64(v.AuxInt) != 0 || v_0.Op != OpStructMake4 {
1026 // match: (StructSelect [1] (StructMake4 _ x _ _))
1029 if auxIntToInt64(v.AuxInt) != 1 || v_0.Op != OpStructMake4 {
1036 // match: (StructSelect [2] (StructMake4 _ _ x _))
1039 if auxIntToInt64(v.AuxInt) != 2 || v_0.Op != OpStructMake4 {
1046 // match: (StructSelect [3] (StructMake4 _ _ _ x))
1049 if auxIntToInt64(v.AuxInt) != 3 || v_0.Op != OpStructMake4 {
1056 // match: (StructSelect [0] x)
1057 // cond: x.Type.IsPtr()
1060 if auxIntToInt64(v.AuxInt) != 0 {
1064 if !(x.Type.IsPtr()) {
1070 // match: (StructSelect [i] x:(Load <t> ptr mem))
1071 // result: @x.Block (Load <v.Type> (OffPtr <v.Type.PtrTo()> [t.FieldOff(int(i))] ptr) mem)
1073 i := auxIntToInt64(v.AuxInt)
1082 v0 := b.NewValue0(v.Pos, OpLoad, v.Type)
1084 v1 := b.NewValue0(v.Pos, OpOffPtr, v.Type.PtrTo())
1085 v1.AuxInt = int64ToAuxInt(t.FieldOff(int(i)))
1092 func rewriteBlockdec(b *Block) bool {