// Code generated from gen/decArgs.rules; DO NOT EDIT. // generated with: cd gen; go run *.go package ssa func rewriteValuedecArgs(v *Value) bool { switch v.Op { case OpArg: return rewriteValuedecArgs_OpArg(v) } return false } func rewriteValuedecArgs_OpArg(v *Value) bool { b := v.Block config := b.Func.Config fe := b.Func.fe typ := &b.Func.Config.Types // match: (Arg {n} [off]) // cond: v.Type.IsString() // result: (StringMake (Arg {n} [off]) (Arg {n} [off+int32(config.PtrSize)])) for { off := auxIntToInt32(v.AuxInt) n := auxToSym(v.Aux) if !(v.Type.IsString()) { break } v.reset(OpStringMake) v0 := b.NewValue0(v.Pos, OpArg, typ.BytePtr) v0.AuxInt = int32ToAuxInt(off) v0.Aux = symToAux(n) v1 := b.NewValue0(v.Pos, OpArg, typ.Int) v1.AuxInt = int32ToAuxInt(off + int32(config.PtrSize)) v1.Aux = symToAux(n) v.AddArg2(v0, v1) return true } // match: (Arg {n} [off]) // cond: v.Type.IsSlice() // result: (SliceMake (Arg {n} [off]) (Arg {n} [off+int32(config.PtrSize)]) (Arg {n} [off+2*int32(config.PtrSize)])) for { off := auxIntToInt32(v.AuxInt) n := auxToSym(v.Aux) if !(v.Type.IsSlice()) { break } v.reset(OpSliceMake) v0 := b.NewValue0(v.Pos, OpArg, v.Type.Elem().PtrTo()) v0.AuxInt = int32ToAuxInt(off) v0.Aux = symToAux(n) v1 := b.NewValue0(v.Pos, OpArg, typ.Int) v1.AuxInt = int32ToAuxInt(off + int32(config.PtrSize)) v1.Aux = symToAux(n) v2 := b.NewValue0(v.Pos, OpArg, typ.Int) v2.AuxInt = int32ToAuxInt(off + 2*int32(config.PtrSize)) v2.Aux = symToAux(n) v.AddArg3(v0, v1, v2) return true } // match: (Arg {n} [off]) // cond: v.Type.IsInterface() // result: (IMake (Arg {n} [off]) (Arg {n} [off+int32(config.PtrSize)])) for { off := auxIntToInt32(v.AuxInt) n := auxToSym(v.Aux) if !(v.Type.IsInterface()) { break } v.reset(OpIMake) v0 := b.NewValue0(v.Pos, OpArg, typ.Uintptr) v0.AuxInt = int32ToAuxInt(off) v0.Aux = symToAux(n) v1 := b.NewValue0(v.Pos, OpArg, typ.BytePtr) v1.AuxInt = int32ToAuxInt(off + int32(config.PtrSize)) v1.Aux = symToAux(n) v.AddArg2(v0, v1) return true } // match: (Arg {n} [off]) // cond: v.Type.IsComplex() && v.Type.Size() == 16 // result: (ComplexMake (Arg {n} [off]) (Arg {n} [off+8])) for { off := auxIntToInt32(v.AuxInt) n := auxToSym(v.Aux) if !(v.Type.IsComplex() && v.Type.Size() == 16) { break } v.reset(OpComplexMake) v0 := b.NewValue0(v.Pos, OpArg, typ.Float64) v0.AuxInt = int32ToAuxInt(off) v0.Aux = symToAux(n) v1 := b.NewValue0(v.Pos, OpArg, typ.Float64) v1.AuxInt = int32ToAuxInt(off + 8) v1.Aux = symToAux(n) v.AddArg2(v0, v1) return true } // match: (Arg {n} [off]) // cond: v.Type.IsComplex() && v.Type.Size() == 8 // result: (ComplexMake (Arg {n} [off]) (Arg {n} [off+4])) for { off := auxIntToInt32(v.AuxInt) n := auxToSym(v.Aux) if !(v.Type.IsComplex() && v.Type.Size() == 8) { break } v.reset(OpComplexMake) v0 := b.NewValue0(v.Pos, OpArg, typ.Float32) v0.AuxInt = int32ToAuxInt(off) v0.Aux = symToAux(n) v1 := b.NewValue0(v.Pos, OpArg, typ.Float32) v1.AuxInt = int32ToAuxInt(off + 4) v1.Aux = symToAux(n) v.AddArg2(v0, v1) return true } // match: (Arg ) // cond: t.IsStruct() && t.NumFields() == 0 && fe.CanSSA(t) // result: (StructMake0) for { t := v.Type if !(t.IsStruct() && t.NumFields() == 0 && fe.CanSSA(t)) { break } v.reset(OpStructMake0) return true } // match: (Arg {n} [off]) // cond: t.IsStruct() && t.NumFields() == 1 && fe.CanSSA(t) // result: (StructMake1 (Arg {n} [off+int32(t.FieldOff(0))])) for { t := v.Type off := auxIntToInt32(v.AuxInt) n := auxToSym(v.Aux) if !(t.IsStruct() && t.NumFields() == 1 && fe.CanSSA(t)) { break } v.reset(OpStructMake1) v0 := b.NewValue0(v.Pos, OpArg, t.FieldType(0)) v0.AuxInt = int32ToAuxInt(off + int32(t.FieldOff(0))) v0.Aux = symToAux(n) v.AddArg(v0) return true } // match: (Arg {n} [off]) // cond: t.IsStruct() && t.NumFields() == 2 && fe.CanSSA(t) // result: (StructMake2 (Arg {n} [off+int32(t.FieldOff(0))]) (Arg {n} [off+int32(t.FieldOff(1))])) for { t := v.Type off := auxIntToInt32(v.AuxInt) n := auxToSym(v.Aux) if !(t.IsStruct() && t.NumFields() == 2 && fe.CanSSA(t)) { break } v.reset(OpStructMake2) v0 := b.NewValue0(v.Pos, OpArg, t.FieldType(0)) v0.AuxInt = int32ToAuxInt(off + int32(t.FieldOff(0))) v0.Aux = symToAux(n) v1 := b.NewValue0(v.Pos, OpArg, t.FieldType(1)) v1.AuxInt = int32ToAuxInt(off + int32(t.FieldOff(1))) v1.Aux = symToAux(n) v.AddArg2(v0, v1) return true } // match: (Arg {n} [off]) // cond: t.IsStruct() && t.NumFields() == 3 && fe.CanSSA(t) // result: (StructMake3 (Arg {n} [off+int32(t.FieldOff(0))]) (Arg {n} [off+int32(t.FieldOff(1))]) (Arg {n} [off+int32(t.FieldOff(2))])) for { t := v.Type off := auxIntToInt32(v.AuxInt) n := auxToSym(v.Aux) if !(t.IsStruct() && t.NumFields() == 3 && fe.CanSSA(t)) { break } v.reset(OpStructMake3) v0 := b.NewValue0(v.Pos, OpArg, t.FieldType(0)) v0.AuxInt = int32ToAuxInt(off + int32(t.FieldOff(0))) v0.Aux = symToAux(n) v1 := b.NewValue0(v.Pos, OpArg, t.FieldType(1)) v1.AuxInt = int32ToAuxInt(off + int32(t.FieldOff(1))) v1.Aux = symToAux(n) v2 := b.NewValue0(v.Pos, OpArg, t.FieldType(2)) v2.AuxInt = int32ToAuxInt(off + int32(t.FieldOff(2))) v2.Aux = symToAux(n) v.AddArg3(v0, v1, v2) return true } // match: (Arg {n} [off]) // cond: t.IsStruct() && t.NumFields() == 4 && fe.CanSSA(t) // result: (StructMake4 (Arg {n} [off+int32(t.FieldOff(0))]) (Arg {n} [off+int32(t.FieldOff(1))]) (Arg {n} [off+int32(t.FieldOff(2))]) (Arg {n} [off+int32(t.FieldOff(3))])) for { t := v.Type off := auxIntToInt32(v.AuxInt) n := auxToSym(v.Aux) if !(t.IsStruct() && t.NumFields() == 4 && fe.CanSSA(t)) { break } v.reset(OpStructMake4) v0 := b.NewValue0(v.Pos, OpArg, t.FieldType(0)) v0.AuxInt = int32ToAuxInt(off + int32(t.FieldOff(0))) v0.Aux = symToAux(n) v1 := b.NewValue0(v.Pos, OpArg, t.FieldType(1)) v1.AuxInt = int32ToAuxInt(off + int32(t.FieldOff(1))) v1.Aux = symToAux(n) v2 := b.NewValue0(v.Pos, OpArg, t.FieldType(2)) v2.AuxInt = int32ToAuxInt(off + int32(t.FieldOff(2))) v2.Aux = symToAux(n) v3 := b.NewValue0(v.Pos, OpArg, t.FieldType(3)) v3.AuxInt = int32ToAuxInt(off + int32(t.FieldOff(3))) v3.Aux = symToAux(n) v.AddArg4(v0, v1, v2, v3) return true } // match: (Arg ) // cond: t.IsArray() && t.NumElem() == 0 // result: (ArrayMake0) for { t := v.Type if !(t.IsArray() && t.NumElem() == 0) { break } v.reset(OpArrayMake0) return true } // match: (Arg {n} [off]) // cond: t.IsArray() && t.NumElem() == 1 && fe.CanSSA(t) // result: (ArrayMake1 (Arg {n} [off])) for { t := v.Type off := auxIntToInt32(v.AuxInt) n := auxToSym(v.Aux) if !(t.IsArray() && t.NumElem() == 1 && fe.CanSSA(t)) { break } v.reset(OpArrayMake1) v0 := b.NewValue0(v.Pos, OpArg, t.Elem()) v0.AuxInt = int32ToAuxInt(off) v0.Aux = symToAux(n) v.AddArg(v0) return true } return false } func rewriteBlockdecArgs(b *Block) bool { switch b.Kind { } return false }