...
Text file src/pkg/cmd/compile/internal/ssa/gen/decArgs.rules
1 // Copyright 2018 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // Decompose compound argument values
6 // Do this early to simplify tracking names for debugging.
7
8 (Arg {n} [off]) && v.Type.IsString() ->
9 (StringMake
10 (Arg <typ.BytePtr> {n} [off])
11 (Arg <typ.Int> {n} [off+config.PtrSize]))
12
13 (Arg {n} [off]) && v.Type.IsSlice() ->
14 (SliceMake
15 (Arg <v.Type.Elem().PtrTo()> {n} [off])
16 (Arg <typ.Int> {n} [off+config.PtrSize])
17 (Arg <typ.Int> {n} [off+2*config.PtrSize]))
18
19 (Arg {n} [off]) && v.Type.IsInterface() ->
20 (IMake
21 (Arg <typ.Uintptr> {n} [off])
22 (Arg <typ.BytePtr> {n} [off+config.PtrSize]))
23
24 (Arg {n} [off]) && v.Type.IsComplex() && v.Type.Size() == 16 ->
25 (ComplexMake
26 (Arg <typ.Float64> {n} [off])
27 (Arg <typ.Float64> {n} [off+8]))
28
29 (Arg {n} [off]) && v.Type.IsComplex() && v.Type.Size() == 8 ->
30 (ComplexMake
31 (Arg <typ.Float32> {n} [off])
32 (Arg <typ.Float32> {n} [off+4]))
33
34 (Arg <t>) && t.IsStruct() && t.NumFields() == 0 && fe.CanSSA(t) ->
35 (StructMake0)
36 (Arg <t> {n} [off]) && t.IsStruct() && t.NumFields() == 1 && fe.CanSSA(t) ->
37 (StructMake1
38 (Arg <t.FieldType(0)> {n} [off+t.FieldOff(0)]))
39 (Arg <t> {n} [off]) && t.IsStruct() && t.NumFields() == 2 && fe.CanSSA(t) ->
40 (StructMake2
41 (Arg <t.FieldType(0)> {n} [off+t.FieldOff(0)])
42 (Arg <t.FieldType(1)> {n} [off+t.FieldOff(1)]))
43 (Arg <t> {n} [off]) && t.IsStruct() && t.NumFields() == 3 && fe.CanSSA(t) ->
44 (StructMake3
45 (Arg <t.FieldType(0)> {n} [off+t.FieldOff(0)])
46 (Arg <t.FieldType(1)> {n} [off+t.FieldOff(1)])
47 (Arg <t.FieldType(2)> {n} [off+t.FieldOff(2)]))
48 (Arg <t> {n} [off]) && t.IsStruct() && t.NumFields() == 4 && fe.CanSSA(t) ->
49 (StructMake4
50 (Arg <t.FieldType(0)> {n} [off+t.FieldOff(0)])
51 (Arg <t.FieldType(1)> {n} [off+t.FieldOff(1)])
52 (Arg <t.FieldType(2)> {n} [off+t.FieldOff(2)])
53 (Arg <t.FieldType(3)> {n} [off+t.FieldOff(3)]))
54
55 (Arg <t>) && t.IsArray() && t.NumElem() == 0 ->
56 (ArrayMake0)
57 (Arg <t> {n} [off]) && t.IsArray() && t.NumElem() == 1 && fe.CanSSA(t) ->
58 (ArrayMake1 (Arg <t.Elem()> {n} [off]))
View as plain text