...

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