| // Copyright 2018 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| // Decompose compound argument values | |
| // Do this early to simplify tracking names for debugging. | |
| (Arg {n} [off]) && v.Type.IsString() => | |
| (StringMake | |
| (Arg <typ.BytePtr> {n} [off]) | |
| (Arg <typ.Int> {n} [off+int32(config.PtrSize)])) | |
| (Arg {n} [off]) && v.Type.IsSlice() => | |
| (SliceMake | |
| (Arg <v.Type.Elem().PtrTo()> {n} [off]) | |
| (Arg <typ.Int> {n} [off+int32(config.PtrSize)]) | |
| (Arg <typ.Int> {n} [off+2*int32(config.PtrSize)])) | |
| (Arg {n} [off]) && v.Type.IsInterface() => | |
| (IMake | |
| (Arg <typ.Uintptr> {n} [off]) | |
| (Arg <typ.BytePtr> {n} [off+int32(config.PtrSize)])) | |
| (Arg {n} [off]) && v.Type.IsComplex() && v.Type.Size() == 16 => | |
| (ComplexMake | |
| (Arg <typ.Float64> {n} [off]) | |
| (Arg <typ.Float64> {n} [off+8])) | |
| (Arg {n} [off]) && v.Type.IsComplex() && v.Type.Size() == 8 => | |
| (ComplexMake | |
| (Arg <typ.Float32> {n} [off]) | |
| (Arg <typ.Float32> {n} [off+4])) | |
| (Arg <t>) && t.IsStruct() && t.NumFields() == 0 && fe.CanSSA(t) => | |
| (StructMake0) | |
| (Arg <t> {n} [off]) && t.IsStruct() && t.NumFields() == 1 && fe.CanSSA(t) => | |
| (StructMake1 | |
| (Arg <t.FieldType(0)> {n} [off+int32(t.FieldOff(0))])) | |
| (Arg <t> {n} [off]) && t.IsStruct() && t.NumFields() == 2 && fe.CanSSA(t) => | |
| (StructMake2 | |
| (Arg <t.FieldType(0)> {n} [off+int32(t.FieldOff(0))]) | |
| (Arg <t.FieldType(1)> {n} [off+int32(t.FieldOff(1))])) | |
| (Arg <t> {n} [off]) && t.IsStruct() && t.NumFields() == 3 && fe.CanSSA(t) => | |
| (StructMake3 | |
| (Arg <t.FieldType(0)> {n} [off+int32(t.FieldOff(0))]) | |
| (Arg <t.FieldType(1)> {n} [off+int32(t.FieldOff(1))]) | |
| (Arg <t.FieldType(2)> {n} [off+int32(t.FieldOff(2))])) | |
| (Arg <t> {n} [off]) && t.IsStruct() && t.NumFields() == 4 && fe.CanSSA(t) => | |
| (StructMake4 | |
| (Arg <t.FieldType(0)> {n} [off+int32(t.FieldOff(0))]) | |
| (Arg <t.FieldType(1)> {n} [off+int32(t.FieldOff(1))]) | |
| (Arg <t.FieldType(2)> {n} [off+int32(t.FieldOff(2))]) | |
| (Arg <t.FieldType(3)> {n} [off+int32(t.FieldOff(3))])) | |
| (Arg <t>) && t.IsArray() && t.NumElem() == 0 => | |
| (ArrayMake0) | |
| (Arg <t> {n} [off]) && t.IsArray() && t.NumElem() == 1 && fe.CanSSA(t) => | |
| (ArrayMake1 (Arg <t.Elem()> {n} [off])) |