...
Source file src/pkg/cmd/compile/internal/ssa/rewritedecArgs.go
1
2
3
4 package ssa
5
6 import "fmt"
7 import "math"
8 import "cmd/internal/obj"
9 import "cmd/internal/objabi"
10 import "cmd/compile/internal/types"
11
12 var _ = fmt.Println
13 var _ = math.MinInt8
14 var _ = obj.ANOP
15 var _ = objabi.GOROOT
16 var _ = types.TypeMem
17
18 func rewriteValuedecArgs(v *Value) bool {
19 switch v.Op {
20 case OpArg:
21 return rewriteValuedecArgs_OpArg_0(v) || rewriteValuedecArgs_OpArg_10(v)
22 }
23 return false
24 }
25 func rewriteValuedecArgs_OpArg_0(v *Value) bool {
26 b := v.Block
27 config := b.Func.Config
28 fe := b.Func.fe
29 typ := &b.Func.Config.Types
30
31
32
33 for {
34 off := v.AuxInt
35 n := v.Aux
36 if !(v.Type.IsString()) {
37 break
38 }
39 v.reset(OpStringMake)
40 v0 := b.NewValue0(v.Pos, OpArg, typ.BytePtr)
41 v0.AuxInt = off
42 v0.Aux = n
43 v.AddArg(v0)
44 v1 := b.NewValue0(v.Pos, OpArg, typ.Int)
45 v1.AuxInt = off + config.PtrSize
46 v1.Aux = n
47 v.AddArg(v1)
48 return true
49 }
50
51
52
53 for {
54 off := v.AuxInt
55 n := v.Aux
56 if !(v.Type.IsSlice()) {
57 break
58 }
59 v.reset(OpSliceMake)
60 v0 := b.NewValue0(v.Pos, OpArg, v.Type.Elem().PtrTo())
61 v0.AuxInt = off
62 v0.Aux = n
63 v.AddArg(v0)
64 v1 := b.NewValue0(v.Pos, OpArg, typ.Int)
65 v1.AuxInt = off + config.PtrSize
66 v1.Aux = n
67 v.AddArg(v1)
68 v2 := b.NewValue0(v.Pos, OpArg, typ.Int)
69 v2.AuxInt = off + 2*config.PtrSize
70 v2.Aux = n
71 v.AddArg(v2)
72 return true
73 }
74
75
76
77 for {
78 off := v.AuxInt
79 n := v.Aux
80 if !(v.Type.IsInterface()) {
81 break
82 }
83 v.reset(OpIMake)
84 v0 := b.NewValue0(v.Pos, OpArg, typ.Uintptr)
85 v0.AuxInt = off
86 v0.Aux = n
87 v.AddArg(v0)
88 v1 := b.NewValue0(v.Pos, OpArg, typ.BytePtr)
89 v1.AuxInt = off + config.PtrSize
90 v1.Aux = n
91 v.AddArg(v1)
92 return true
93 }
94
95
96
97 for {
98 off := v.AuxInt
99 n := v.Aux
100 if !(v.Type.IsComplex() && v.Type.Size() == 16) {
101 break
102 }
103 v.reset(OpComplexMake)
104 v0 := b.NewValue0(v.Pos, OpArg, typ.Float64)
105 v0.AuxInt = off
106 v0.Aux = n
107 v.AddArg(v0)
108 v1 := b.NewValue0(v.Pos, OpArg, typ.Float64)
109 v1.AuxInt = off + 8
110 v1.Aux = n
111 v.AddArg(v1)
112 return true
113 }
114
115
116
117 for {
118 off := v.AuxInt
119 n := v.Aux
120 if !(v.Type.IsComplex() && v.Type.Size() == 8) {
121 break
122 }
123 v.reset(OpComplexMake)
124 v0 := b.NewValue0(v.Pos, OpArg, typ.Float32)
125 v0.AuxInt = off
126 v0.Aux = n
127 v.AddArg(v0)
128 v1 := b.NewValue0(v.Pos, OpArg, typ.Float32)
129 v1.AuxInt = off + 4
130 v1.Aux = n
131 v.AddArg(v1)
132 return true
133 }
134
135
136
137 for {
138 t := v.Type
139 if !(t.IsStruct() && t.NumFields() == 0 && fe.CanSSA(t)) {
140 break
141 }
142 v.reset(OpStructMake0)
143 return true
144 }
145
146
147
148 for {
149 t := v.Type
150 off := v.AuxInt
151 n := v.Aux
152 if !(t.IsStruct() && t.NumFields() == 1 && fe.CanSSA(t)) {
153 break
154 }
155 v.reset(OpStructMake1)
156 v0 := b.NewValue0(v.Pos, OpArg, t.FieldType(0))
157 v0.AuxInt = off + t.FieldOff(0)
158 v0.Aux = n
159 v.AddArg(v0)
160 return true
161 }
162
163
164
165 for {
166 t := v.Type
167 off := v.AuxInt
168 n := v.Aux
169 if !(t.IsStruct() && t.NumFields() == 2 && fe.CanSSA(t)) {
170 break
171 }
172 v.reset(OpStructMake2)
173 v0 := b.NewValue0(v.Pos, OpArg, t.FieldType(0))
174 v0.AuxInt = off + t.FieldOff(0)
175 v0.Aux = n
176 v.AddArg(v0)
177 v1 := b.NewValue0(v.Pos, OpArg, t.FieldType(1))
178 v1.AuxInt = off + t.FieldOff(1)
179 v1.Aux = n
180 v.AddArg(v1)
181 return true
182 }
183
184
185
186 for {
187 t := v.Type
188 off := v.AuxInt
189 n := v.Aux
190 if !(t.IsStruct() && t.NumFields() == 3 && fe.CanSSA(t)) {
191 break
192 }
193 v.reset(OpStructMake3)
194 v0 := b.NewValue0(v.Pos, OpArg, t.FieldType(0))
195 v0.AuxInt = off + t.FieldOff(0)
196 v0.Aux = n
197 v.AddArg(v0)
198 v1 := b.NewValue0(v.Pos, OpArg, t.FieldType(1))
199 v1.AuxInt = off + t.FieldOff(1)
200 v1.Aux = n
201 v.AddArg(v1)
202 v2 := b.NewValue0(v.Pos, OpArg, t.FieldType(2))
203 v2.AuxInt = off + t.FieldOff(2)
204 v2.Aux = n
205 v.AddArg(v2)
206 return true
207 }
208
209
210
211 for {
212 t := v.Type
213 off := v.AuxInt
214 n := v.Aux
215 if !(t.IsStruct() && t.NumFields() == 4 && fe.CanSSA(t)) {
216 break
217 }
218 v.reset(OpStructMake4)
219 v0 := b.NewValue0(v.Pos, OpArg, t.FieldType(0))
220 v0.AuxInt = off + t.FieldOff(0)
221 v0.Aux = n
222 v.AddArg(v0)
223 v1 := b.NewValue0(v.Pos, OpArg, t.FieldType(1))
224 v1.AuxInt = off + t.FieldOff(1)
225 v1.Aux = n
226 v.AddArg(v1)
227 v2 := b.NewValue0(v.Pos, OpArg, t.FieldType(2))
228 v2.AuxInt = off + t.FieldOff(2)
229 v2.Aux = n
230 v.AddArg(v2)
231 v3 := b.NewValue0(v.Pos, OpArg, t.FieldType(3))
232 v3.AuxInt = off + t.FieldOff(3)
233 v3.Aux = n
234 v.AddArg(v3)
235 return true
236 }
237 return false
238 }
239 func rewriteValuedecArgs_OpArg_10(v *Value) bool {
240 b := v.Block
241 fe := b.Func.fe
242
243
244
245 for {
246 t := v.Type
247 if !(t.IsArray() && t.NumElem() == 0) {
248 break
249 }
250 v.reset(OpArrayMake0)
251 return true
252 }
253
254
255
256 for {
257 t := v.Type
258 off := v.AuxInt
259 n := v.Aux
260 if !(t.IsArray() && t.NumElem() == 1 && fe.CanSSA(t)) {
261 break
262 }
263 v.reset(OpArrayMake1)
264 v0 := b.NewValue0(v.Pos, OpArg, t.Elem())
265 v0.AuxInt = off
266 v0.Aux = n
267 v.AddArg(v0)
268 return true
269 }
270 return false
271 }
272 func rewriteBlockdecArgs(b *Block) bool {
273 config := b.Func.Config
274 typ := &config.Types
275 _ = typ
276 v := b.Control
277 _ = v
278 switch b.Kind {
279 }
280 return false
281 }
282
View as plain text