OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2014 the V8 project authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "src/compiler/common-operator.h" | |
6 #include "src/compiler/graph.h" | |
7 #include "src/compiler/linkage.h" | |
8 #include "src/compiler/node.h" | |
9 #include "test/unittests/test-utils.h" | |
10 | |
11 namespace v8 { | |
12 namespace internal { | |
13 namespace compiler { | |
14 | |
15 class LinkageTailCall : public TestWithZone { | |
16 protected: | |
17 CallDescriptor* NewStandardCallDescriptor( | |
18 LocationSignature::Builder* locations, MachineSignature::Builder* types) { | |
19 return new (zone()) | |
20 CallDescriptor(CallDescriptor::kCallCodeObject, kMachAnyTagged, | |
21 LinkageLocation::AnyRegister(), | |
22 types->Build(), // machine_sig | |
23 locations->Build(), // location_sig | |
24 0, // js_parameter_count | |
25 Operator::kNoProperties, // properties | |
26 0, // callee-saved | |
27 0, // callee-saved fp | |
28 CallDescriptor::kNoFlags, // flags, | |
29 ""); | |
30 } | |
31 | |
32 LinkageLocation StackLocation(int loc) { return LinkageLocation(-loc); } | |
33 | |
34 LinkageLocation RegisterLocation(int loc) { return LinkageLocation(loc); } | |
35 }; | |
36 | |
37 | |
38 TEST_F(LinkageTailCall, EmptyToEmpty) { | |
39 LocationSignature::Builder locations(zone(), 0, 0); | |
40 MachineSignature::Builder types(zone(), 0, 0); | |
41 | |
42 CallDescriptor* desc = NewStandardCallDescriptor(&locations, &types); | |
43 | |
44 CommonOperatorBuilder common(zone()); | |
45 const Operator* op = common.Call(desc); | |
46 Node* const node = Node::New(zone(), 1, op, 0, nullptr, false); | |
47 EXPECT_TRUE(desc->CanTailCall(node)); | |
48 } | |
49 | |
50 | |
51 TEST_F(LinkageTailCall, SameReturn) { | |
52 // Caller | |
53 LocationSignature::Builder locations1(zone(), 1, 0); | |
titzer
2015/07/21 11:48:52
You don't have to use the Signature::Builder every
| |
54 MachineSignature::Builder types1(zone(), 1, 0); | |
55 locations1.AddReturn(RegisterLocation(0)); | |
56 types1.AddReturn(kMachAnyTagged); | |
57 | |
58 CallDescriptor* desc1 = NewStandardCallDescriptor(&locations1, &types1); | |
59 | |
60 // Callee | |
61 LocationSignature::Builder locations2(zone(), 1, 0); | |
62 MachineSignature::Builder types2(zone(), 1, 0); | |
63 locations2.AddReturn(RegisterLocation(0)); | |
64 types2.AddReturn(kMachAnyTagged); | |
65 CallDescriptor* desc2 = NewStandardCallDescriptor(&locations2, &types2); | |
66 | |
67 CommonOperatorBuilder common(zone()); | |
68 const Operator* op = common.Call(desc2); | |
69 Node* const node = Node::New(zone(), 1, op, 0, nullptr, false); | |
70 EXPECT_TRUE(desc1->CanTailCall(node)); | |
71 } | |
72 | |
73 | |
74 TEST_F(LinkageTailCall, DifferingReturn) { | |
75 // Caller | |
76 LocationSignature::Builder locations1(zone(), 1, 0); | |
77 MachineSignature::Builder types1(zone(), 1, 0); | |
78 locations1.AddReturn(RegisterLocation(0)); | |
79 types1.AddReturn(kMachAnyTagged); | |
80 CallDescriptor* desc1 = NewStandardCallDescriptor(&locations1, &types1); | |
81 | |
82 // Callee | |
83 LocationSignature::Builder locations2(zone(), 1, 0); | |
84 MachineSignature::Builder types2(zone(), 1, 0); | |
85 locations2.AddReturn(StackLocation(1)); | |
86 types2.AddReturn(kMachAnyTagged); | |
87 CallDescriptor* desc2 = NewStandardCallDescriptor(&locations2, &types2); | |
88 | |
89 CommonOperatorBuilder common(zone()); | |
90 const Operator* op = common.Call(desc2); | |
91 Node* const node = Node::New(zone(), 1, op, 0, nullptr, false); | |
92 EXPECT_FALSE(desc1->CanTailCall(node)); | |
93 } | |
94 | |
95 | |
96 TEST_F(LinkageTailCall, MoreRegisterParametersCallee) { | |
97 // Caller | |
98 LocationSignature::Builder locations1(zone(), 1, 0); | |
99 MachineSignature::Builder types1(zone(), 1, 0); | |
100 locations1.AddReturn(RegisterLocation(0)); | |
101 types1.AddReturn(kMachAnyTagged); | |
102 CallDescriptor* desc1 = NewStandardCallDescriptor(&locations1, &types1); | |
103 | |
104 // Callee | |
105 LocationSignature::Builder locations2(zone(), 1, 1); | |
106 MachineSignature::Builder types2(zone(), 1, 1); | |
107 locations2.AddReturn(RegisterLocation(0)); | |
108 types2.AddReturn(kMachAnyTagged); | |
109 locations2.AddParam(RegisterLocation(1)); | |
110 types2.AddParam(kMachAnyTagged); | |
111 CallDescriptor* desc2 = NewStandardCallDescriptor(&locations2, &types2); | |
112 | |
113 CommonOperatorBuilder common(zone()); | |
114 const Operator* op = common.Call(desc2); | |
115 Node* const node = Node::New(zone(), 1, op, 0, nullptr, false); | |
116 EXPECT_TRUE(desc1->CanTailCall(node)); | |
117 } | |
118 | |
119 | |
120 TEST_F(LinkageTailCall, MoreRegisterParametersCalleer) { | |
121 // Caller | |
122 LocationSignature::Builder locations1(zone(), 1, 1); | |
123 MachineSignature::Builder types1(zone(), 1, 1); | |
124 locations1.AddReturn(RegisterLocation(0)); | |
125 types1.AddReturn(kMachAnyTagged); | |
126 locations1.AddParam(RegisterLocation(1)); | |
127 types1.AddParam(kMachAnyTagged); | |
128 CallDescriptor* desc1 = NewStandardCallDescriptor(&locations1, &types1); | |
129 | |
130 // Callee | |
131 LocationSignature::Builder locations2(zone(), 1, 0); | |
132 MachineSignature::Builder types2(zone(), 1, 0); | |
133 locations2.AddReturn(RegisterLocation(0)); | |
134 types2.AddReturn(kMachAnyTagged); | |
135 CallDescriptor* desc2 = NewStandardCallDescriptor(&locations2, &types2); | |
136 | |
137 CommonOperatorBuilder common(zone()); | |
138 const Operator* op = common.Call(desc2); | |
139 Node* const node = Node::New(zone(), 1, op, 0, nullptr, false); | |
140 EXPECT_TRUE(desc1->CanTailCall(node)); | |
141 } | |
142 | |
143 | |
144 TEST_F(LinkageTailCall, MoreRegisterAndStackParametersCallee) { | |
145 // Caller | |
146 LocationSignature::Builder locations1(zone(), 1, 0); | |
147 MachineSignature::Builder types1(zone(), 1, 0); | |
148 locations1.AddReturn(RegisterLocation(0)); | |
149 types1.AddReturn(kMachAnyTagged); | |
150 CallDescriptor* desc1 = NewStandardCallDescriptor(&locations1, &types1); | |
151 | |
152 // Callee | |
153 LocationSignature::Builder locations2(zone(), 1, 3); | |
154 MachineSignature::Builder types2(zone(), 1, 3); | |
155 locations2.AddReturn(RegisterLocation(0)); | |
156 types2.AddReturn(kMachAnyTagged); | |
157 locations2.AddParam(StackLocation(1)); | |
158 types2.AddParam(kMachAnyTagged); | |
159 locations2.AddParam(RegisterLocation(0)); | |
160 types2.AddParam(kMachAnyTagged); | |
161 locations2.AddParam(RegisterLocation(1)); | |
162 types2.AddParam(kMachAnyTagged); | |
163 CallDescriptor* desc2 = NewStandardCallDescriptor(&locations2, &types2); | |
164 | |
165 CommonOperatorBuilder common(zone()); | |
166 const Operator* op = common.Call(desc2); | |
167 Node* const node = Node::New(zone(), 1, op, 0, nullptr, false); | |
168 EXPECT_FALSE(desc1->CanTailCall(node)); | |
169 } | |
170 | |
171 | |
172 TEST_F(LinkageTailCall, MoreRegisterAndStackParametersCalleer) { | |
173 // Caller | |
174 LocationSignature::Builder locations1(zone(), 1, 3); | |
175 MachineSignature::Builder types1(zone(), 1, 3); | |
176 locations1.AddReturn(RegisterLocation(0)); | |
177 types1.AddReturn(kMachAnyTagged); | |
178 locations1.AddParam(StackLocation(1)); | |
179 types1.AddParam(kMachAnyTagged); | |
180 locations1.AddParam(RegisterLocation(0)); | |
181 types1.AddParam(kMachAnyTagged); | |
182 locations1.AddParam(RegisterLocation(1)); | |
183 types1.AddParam(kMachAnyTagged); | |
184 CallDescriptor* desc1 = NewStandardCallDescriptor(&locations1, &types1); | |
185 | |
186 // Callee | |
187 LocationSignature::Builder locations2(zone(), 1, 0); | |
188 MachineSignature::Builder types2(zone(), 1, 0); | |
189 locations2.AddReturn(RegisterLocation(0)); | |
190 types2.AddReturn(kMachAnyTagged); | |
191 CallDescriptor* desc2 = NewStandardCallDescriptor(&locations2, &types2); | |
192 | |
193 CommonOperatorBuilder common(zone()); | |
194 const Operator* op = common.Call(desc2); | |
195 Node* const node = Node::New(zone(), 1, op, 0, nullptr, false); | |
196 EXPECT_FALSE(desc1->CanTailCall(node)); | |
197 } | |
198 | |
199 | |
200 TEST_F(LinkageTailCall, MatchingStackParameters) { | |
201 // Caller | |
202 LocationSignature::Builder locations1(zone(), 1, 3); | |
203 MachineSignature::Builder types1(zone(), 1, 3); | |
204 locations1.AddReturn(RegisterLocation(0)); | |
205 types1.AddReturn(kMachAnyTagged); | |
206 locations1.AddParam(StackLocation(3)); | |
207 types1.AddParam(kMachAnyTagged); | |
208 locations1.AddParam(StackLocation(2)); | |
209 types1.AddParam(kMachAnyTagged); | |
210 locations1.AddParam(StackLocation(1)); | |
211 types1.AddParam(kMachAnyTagged); | |
212 CallDescriptor* desc1 = NewStandardCallDescriptor(&locations1, &types1); | |
213 | |
214 // Callee | |
215 LocationSignature::Builder locations2(zone(), 1, 3); | |
216 MachineSignature::Builder types2(zone(), 1, 3); | |
217 locations2.AddReturn(RegisterLocation(0)); | |
218 types2.AddReturn(kMachAnyTagged); | |
219 locations2.AddParam(StackLocation(3)); | |
220 types2.AddParam(kMachAnyTagged); | |
221 locations2.AddParam(StackLocation(2)); | |
222 types2.AddParam(kMachAnyTagged); | |
223 locations2.AddParam(StackLocation(1)); | |
224 types2.AddParam(kMachAnyTagged); | |
225 CallDescriptor* desc2 = NewStandardCallDescriptor(&locations2, &types2); | |
226 | |
227 CommonOperatorBuilder common(zone()); | |
228 Node* p0 = Node::New(zone(), 0, nullptr, 0, nullptr, false); | |
229 Node* p1 = Node::New(zone(), 0, common.Parameter(0), 0, nullptr, false); | |
230 Node* p2 = Node::New(zone(), 0, common.Parameter(1), 0, nullptr, false); | |
231 Node* p3 = Node::New(zone(), 0, common.Parameter(2), 0, nullptr, false); | |
232 Node* parameters[] = {p0, p1, p2, p3}; | |
233 const Operator* op = common.Call(desc2); | |
234 Node* const node = | |
235 Node::New(zone(), 1, op, arraysize(parameters), parameters, false); | |
236 EXPECT_TRUE(desc1->CanTailCall(node)); | |
237 } | |
238 | |
239 | |
240 TEST_F(LinkageTailCall, NonMatchingStackParameters) { | |
241 // Caller | |
242 LocationSignature::Builder locations1(zone(), 1, 3); | |
243 MachineSignature::Builder types1(zone(), 1, 3); | |
244 locations1.AddReturn(RegisterLocation(0)); | |
245 types1.AddReturn(kMachAnyTagged); | |
246 locations1.AddParam(StackLocation(3)); | |
247 types1.AddParam(kMachAnyTagged); | |
248 locations1.AddParam(StackLocation(2)); | |
249 types1.AddParam(kMachAnyTagged); | |
250 locations1.AddParam(StackLocation(1)); | |
251 types1.AddParam(kMachAnyTagged); | |
252 CallDescriptor* desc1 = NewStandardCallDescriptor(&locations1, &types1); | |
253 | |
254 // Callee | |
255 LocationSignature::Builder locations2(zone(), 1, 3); | |
256 MachineSignature::Builder types2(zone(), 1, 3); | |
257 locations2.AddReturn(RegisterLocation(0)); | |
258 types2.AddReturn(kMachAnyTagged); | |
259 locations2.AddParam(StackLocation(3)); | |
260 types2.AddParam(kMachAnyTagged); | |
261 locations2.AddParam(StackLocation(2)); | |
262 types2.AddParam(kMachAnyTagged); | |
263 locations2.AddParam(StackLocation(1)); | |
264 types2.AddParam(kMachAnyTagged); | |
265 CallDescriptor* desc2 = NewStandardCallDescriptor(&locations2, &types2); | |
266 | |
267 CommonOperatorBuilder common(zone()); | |
268 Node* p0 = Node::New(zone(), 0, nullptr, 0, nullptr, false); | |
269 Node* p1 = Node::New(zone(), 0, common.Parameter(0), 0, nullptr, false); | |
270 Node* p2 = Node::New(zone(), 0, common.Parameter(2), 0, nullptr, false); | |
271 Node* p3 = Node::New(zone(), 0, common.Parameter(1), 0, nullptr, false); | |
272 Node* parameters[] = {p0, p1, p2, p3}; | |
273 const Operator* op = common.Call(desc2); | |
274 Node* const node = | |
275 Node::New(zone(), 1, op, arraysize(parameters), parameters, false); | |
276 EXPECT_FALSE(desc1->CanTailCall(node)); | |
277 } | |
278 | |
279 | |
280 TEST_F(LinkageTailCall, MatchingStackParametersExtraCallerRegisters) { | |
281 // Caller | |
282 LocationSignature::Builder locations1(zone(), 1, 5); | |
283 MachineSignature::Builder types1(zone(), 1, 5); | |
284 locations1.AddReturn(RegisterLocation(0)); | |
285 types1.AddReturn(kMachAnyTagged); | |
286 locations1.AddParam(StackLocation(3)); | |
287 types1.AddParam(kMachAnyTagged); | |
288 locations1.AddParam(StackLocation(2)); | |
289 types1.AddParam(kMachAnyTagged); | |
290 locations1.AddParam(StackLocation(1)); | |
291 types1.AddParam(kMachAnyTagged); | |
292 locations1.AddParam(RegisterLocation(1)); | |
293 types1.AddParam(kMachAnyTagged); | |
294 locations1.AddParam(RegisterLocation(2)); | |
295 types1.AddParam(kMachAnyTagged); | |
296 CallDescriptor* desc1 = NewStandardCallDescriptor(&locations1, &types1); | |
297 | |
298 // Callee | |
299 LocationSignature::Builder locations2(zone(), 1, 3); | |
300 MachineSignature::Builder types2(zone(), 1, 3); | |
301 locations2.AddReturn(RegisterLocation(0)); | |
302 types2.AddReturn(kMachAnyTagged); | |
303 locations2.AddParam(StackLocation(3)); | |
304 types2.AddParam(kMachAnyTagged); | |
305 locations2.AddParam(StackLocation(2)); | |
306 types2.AddParam(kMachAnyTagged); | |
307 locations2.AddParam(StackLocation(1)); | |
308 types2.AddParam(kMachAnyTagged); | |
309 CallDescriptor* desc2 = NewStandardCallDescriptor(&locations2, &types2); | |
310 | |
311 CommonOperatorBuilder common(zone()); | |
312 Node* p0 = Node::New(zone(), 0, nullptr, 0, nullptr, false); | |
313 Node* p1 = Node::New(zone(), 0, common.Parameter(0), 0, nullptr, false); | |
314 Node* p2 = Node::New(zone(), 0, common.Parameter(1), 0, nullptr, false); | |
315 Node* p3 = Node::New(zone(), 0, common.Parameter(2), 0, nullptr, false); | |
316 Node* parameters[] = {p0, p1, p2, p3}; | |
317 const Operator* op = common.Call(desc2); | |
318 Node* const node = | |
319 Node::New(zone(), 1, op, arraysize(parameters), parameters, false); | |
320 EXPECT_TRUE(desc1->CanTailCall(node)); | |
321 } | |
322 | |
323 | |
324 TEST_F(LinkageTailCall, MatchingStackParametersExtraCalleeRegisters) { | |
325 // Caller | |
326 LocationSignature::Builder locations1(zone(), 1, 3); | |
327 MachineSignature::Builder types1(zone(), 1, 3); | |
328 locations1.AddReturn(RegisterLocation(0)); | |
329 types1.AddReturn(kMachAnyTagged); | |
330 locations1.AddParam(StackLocation(3)); | |
331 types1.AddParam(kMachAnyTagged); | |
332 locations1.AddParam(StackLocation(2)); | |
333 types1.AddParam(kMachAnyTagged); | |
334 locations1.AddParam(StackLocation(1)); | |
335 types1.AddParam(kMachAnyTagged); | |
336 CallDescriptor* desc1 = NewStandardCallDescriptor(&locations1, &types1); | |
337 | |
338 // Callee | |
339 LocationSignature::Builder locations2(zone(), 1, 5); | |
340 MachineSignature::Builder types2(zone(), 1, 5); | |
341 locations2.AddReturn(RegisterLocation(0)); | |
342 types2.AddReturn(kMachAnyTagged); | |
343 locations2.AddParam(StackLocation(3)); | |
344 types2.AddParam(kMachAnyTagged); | |
345 locations2.AddParam(StackLocation(2)); | |
346 types2.AddParam(kMachAnyTagged); | |
347 locations2.AddParam(StackLocation(1)); | |
348 types2.AddParam(kMachAnyTagged); | |
349 locations2.AddParam(RegisterLocation(1)); | |
350 types2.AddParam(kMachAnyTagged); | |
351 locations2.AddParam(RegisterLocation(2)); | |
352 types2.AddParam(kMachAnyTagged); | |
353 CallDescriptor* desc2 = NewStandardCallDescriptor(&locations2, &types2); | |
354 | |
355 CommonOperatorBuilder common(zone()); | |
356 Node* p0 = Node::New(zone(), 0, nullptr, 0, nullptr, false); | |
357 Node* p1 = Node::New(zone(), 0, common.Parameter(0), 0, nullptr, false); | |
358 Node* p2 = Node::New(zone(), 0, common.Parameter(1), 0, nullptr, false); | |
359 Node* p3 = Node::New(zone(), 0, common.Parameter(2), 0, nullptr, false); | |
360 Node* p4 = Node::New(zone(), 0, common.Parameter(3), 0, nullptr, false); | |
361 Node* parameters[] = {p0, p1, p2, p3, p4}; | |
362 const Operator* op = common.Call(desc2); | |
363 Node* const node = | |
364 Node::New(zone(), 1, op, arraysize(parameters), parameters, false); | |
365 EXPECT_TRUE(desc1->CanTailCall(node)); | |
366 } | |
367 | |
368 | |
369 TEST_F(LinkageTailCall, MatchingStackParametersExtraCallerRegistersAndStack) { | |
370 // Caller | |
371 LocationSignature::Builder locations1(zone(), 1, 6); | |
372 MachineSignature::Builder types1(zone(), 1, 6); | |
373 locations1.AddReturn(RegisterLocation(0)); | |
374 types1.AddReturn(kMachAnyTagged); | |
375 locations1.AddParam(StackLocation(3)); | |
376 types1.AddParam(kMachAnyTagged); | |
377 locations1.AddParam(StackLocation(2)); | |
378 types1.AddParam(kMachAnyTagged); | |
379 locations1.AddParam(StackLocation(1)); | |
380 types1.AddParam(kMachAnyTagged); | |
381 locations1.AddParam(RegisterLocation(1)); | |
382 types1.AddParam(kMachAnyTagged); | |
383 locations1.AddParam(RegisterLocation(2)); | |
384 types1.AddParam(kMachAnyTagged); | |
385 locations1.AddParam(StackLocation(4)); | |
386 types1.AddParam(kMachAnyTagged); | |
387 CallDescriptor* desc1 = NewStandardCallDescriptor(&locations1, &types1); | |
388 | |
389 // Callee | |
390 LocationSignature::Builder locations2(zone(), 1, 3); | |
391 MachineSignature::Builder types2(zone(), 1, 3); | |
392 locations2.AddReturn(RegisterLocation(0)); | |
393 types2.AddReturn(kMachAnyTagged); | |
394 locations2.AddParam(StackLocation(3)); | |
395 types2.AddParam(kMachAnyTagged); | |
396 locations2.AddParam(StackLocation(2)); | |
397 types2.AddParam(kMachAnyTagged); | |
398 locations2.AddParam(StackLocation(1)); | |
399 types2.AddParam(kMachAnyTagged); | |
400 CallDescriptor* desc2 = NewStandardCallDescriptor(&locations2, &types2); | |
401 | |
402 CommonOperatorBuilder common(zone()); | |
403 Node* p0 = Node::New(zone(), 0, nullptr, 0, nullptr, false); | |
404 Node* p1 = Node::New(zone(), 0, common.Parameter(0), 0, nullptr, false); | |
405 Node* p2 = Node::New(zone(), 0, common.Parameter(1), 0, nullptr, false); | |
406 Node* p3 = Node::New(zone(), 0, common.Parameter(2), 0, nullptr, false); | |
407 Node* parameters[] = {p0, p1, p2, p3}; | |
408 const Operator* op = common.Call(desc2); | |
409 Node* const node = | |
410 Node::New(zone(), 1, op, arraysize(parameters), parameters, false); | |
411 EXPECT_FALSE(desc1->CanTailCall(node)); | |
412 } | |
413 | |
414 | |
415 TEST_F(LinkageTailCall, MatchingStackParametersExtraCalleeRegistersAndStack) { | |
416 // Caller | |
417 LocationSignature::Builder locations1(zone(), 1, 3); | |
418 MachineSignature::Builder types1(zone(), 1, 3); | |
419 locations1.AddReturn(RegisterLocation(0)); | |
420 types1.AddReturn(kMachAnyTagged); | |
421 locations1.AddParam(StackLocation(3)); | |
422 types1.AddParam(kMachAnyTagged); | |
423 locations1.AddParam(StackLocation(2)); | |
424 types1.AddParam(kMachAnyTagged); | |
425 locations1.AddParam(StackLocation(1)); | |
426 types1.AddParam(kMachAnyTagged); | |
427 CallDescriptor* desc1 = NewStandardCallDescriptor(&locations1, &types1); | |
428 | |
429 // Callee | |
430 LocationSignature::Builder locations2(zone(), 1, 6); | |
431 MachineSignature::Builder types2(zone(), 1, 6); | |
432 locations2.AddReturn(RegisterLocation(0)); | |
433 types2.AddReturn(kMachAnyTagged); | |
434 locations2.AddParam(StackLocation(3)); | |
435 types2.AddParam(kMachAnyTagged); | |
436 locations2.AddParam(StackLocation(2)); | |
437 types2.AddParam(kMachAnyTagged); | |
438 locations2.AddParam(StackLocation(1)); | |
439 types2.AddParam(kMachAnyTagged); | |
440 locations2.AddParam(RegisterLocation(1)); | |
441 types2.AddParam(kMachAnyTagged); | |
442 locations2.AddParam(RegisterLocation(2)); | |
443 types2.AddParam(kMachAnyTagged); | |
444 locations2.AddParam(StackLocation(4)); | |
445 types2.AddParam(kMachAnyTagged); | |
446 CallDescriptor* desc2 = NewStandardCallDescriptor(&locations2, &types2); | |
447 | |
448 CommonOperatorBuilder common(zone()); | |
449 Node* p0 = Node::New(zone(), 0, nullptr, 0, nullptr, false); | |
450 Node* p1 = Node::New(zone(), 0, common.Parameter(0), 0, nullptr, false); | |
451 Node* p2 = Node::New(zone(), 0, common.Parameter(1), 0, nullptr, false); | |
452 Node* p3 = Node::New(zone(), 0, common.Parameter(2), 0, nullptr, false); | |
453 Node* p4 = Node::New(zone(), 0, common.Parameter(3), 0, nullptr, false); | |
454 Node* parameters[] = {p0, p1, p2, p3, p4}; | |
455 const Operator* op = common.Call(desc2); | |
456 Node* const node = | |
457 Node::New(zone(), 1, op, arraysize(parameters), parameters, false); | |
458 EXPECT_FALSE(desc1->CanTailCall(node)); | |
459 } | |
460 | |
461 } // namespace compiler | |
462 } // namespace internal | |
463 } // namespace v8 | |
OLD | NEW |