Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(198)

Side by Side Diff: src/compiler/js-intrinsic-lowering.cc

Issue 1134663006: [turbofan] Turn JSIntrinsicLowering into an AdvancedReducer. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@local_graph-reducer-advanced-1
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/compiler/js-intrinsic-lowering.h ('k') | src/compiler/pipeline.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/js-intrinsic-lowering.h" 5 #include "src/compiler/js-intrinsic-lowering.h"
6 6
7 #include <stack> 7 #include <stack>
8 8
9 #include "src/compiler/access-builder.h" 9 #include "src/compiler/access-builder.h"
10 #include "src/compiler/js-graph.h" 10 #include "src/compiler/js-graph.h"
11 #include "src/compiler/node-matchers.h" 11 #include "src/compiler/node-matchers.h"
12 #include "src/compiler/node-properties.h" 12 #include "src/compiler/node-properties.h"
13 #include "src/compiler/operator-properties.h" 13 #include "src/compiler/operator-properties.h"
14 14
15 namespace v8 { 15 namespace v8 {
16 namespace internal { 16 namespace internal {
17 namespace compiler { 17 namespace compiler {
18 18
19 JSIntrinsicLowering::JSIntrinsicLowering(JSGraph* jsgraph) 19 JSIntrinsicLowering::JSIntrinsicLowering(Editor* editor, JSGraph* jsgraph)
20 : jsgraph_(jsgraph), simplified_(jsgraph->zone()) {} 20 : AdvancedReducer(editor),
21 jsgraph_(jsgraph),
22 simplified_(jsgraph->zone()) {}
21 23
22 24
23 Reduction JSIntrinsicLowering::Reduce(Node* node) { 25 Reduction JSIntrinsicLowering::Reduce(Node* node) {
24 if (node->opcode() != IrOpcode::kJSCallRuntime) return NoChange(); 26 if (node->opcode() != IrOpcode::kJSCallRuntime) return NoChange();
25 const Runtime::Function* const f = 27 const Runtime::Function* const f =
26 Runtime::FunctionForId(CallRuntimeParametersOf(node->op()).id()); 28 Runtime::FunctionForId(CallRuntimeParametersOf(node->op()).id());
27 if (f->intrinsic_type != Runtime::IntrinsicType::INLINE) return NoChange(); 29 if (f->intrinsic_type != Runtime::IntrinsicType::INLINE) return NoChange();
28 switch (f->function_id) { 30 switch (f->function_id) {
29 case Runtime::kInlineConstructDouble: 31 case Runtime::kInlineConstructDouble:
30 return ReduceConstructDouble(node); 32 return ReduceConstructDouble(node);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 90
89 91
90 Reduction JSIntrinsicLowering::ReduceConstructDouble(Node* node) { 92 Reduction JSIntrinsicLowering::ReduceConstructDouble(Node* node) {
91 Node* high = NodeProperties::GetValueInput(node, 0); 93 Node* high = NodeProperties::GetValueInput(node, 0);
92 Node* low = NodeProperties::GetValueInput(node, 1); 94 Node* low = NodeProperties::GetValueInput(node, 1);
93 Node* value = 95 Node* value =
94 graph()->NewNode(machine()->Float64InsertHighWord32(), 96 graph()->NewNode(machine()->Float64InsertHighWord32(),
95 graph()->NewNode(machine()->Float64InsertLowWord32(), 97 graph()->NewNode(machine()->Float64InsertLowWord32(),
96 jsgraph()->Constant(0), low), 98 jsgraph()->Constant(0), low),
97 high); 99 high);
98 NodeProperties::ReplaceWithValue(node, value); 100 ReplaceWithValue(node, value);
99 return Replace(value); 101 return Replace(value);
100 } 102 }
101 103
102 104
103 Reduction JSIntrinsicLowering::ReduceDeoptimizeNow(Node* node) { 105 Reduction JSIntrinsicLowering::ReduceDeoptimizeNow(Node* node) {
104 // TODO(jarin): This should not depend on the global flag. 106 // TODO(jarin): This should not depend on the global flag.
105 if (!FLAG_turbo_deoptimization) return NoChange(); 107 if (!FLAG_turbo_deoptimization) return NoChange();
106 108
107 Node* frame_state = NodeProperties::GetFrameStateInput(node, 0); 109 Node* frame_state = NodeProperties::GetFrameStateInput(node, 0);
108 DCHECK_EQ(frame_state->opcode(), IrOpcode::kFrameState); 110 DCHECK_EQ(frame_state->opcode(), IrOpcode::kFrameState);
109 111
110 Node* effect = NodeProperties::GetEffectInput(node); 112 Node* effect = NodeProperties::GetEffectInput(node);
111 Node* control = NodeProperties::GetControlInput(node); 113 Node* control = NodeProperties::GetControlInput(node);
112 114
113 // We are making the continuation after the call dead. To 115 // We are making the continuation after the call dead. To
114 // model this, we generate if (true) statement with deopt 116 // model this, we generate if (true) statement with deopt
115 // in the true branch and continuation in the false branch. 117 // in the true branch and continuation in the false branch.
116 Node* branch = 118 Node* branch =
117 graph()->NewNode(common()->Branch(), jsgraph()->TrueConstant(), control); 119 graph()->NewNode(common()->Branch(), jsgraph()->TrueConstant(), control);
118 120
119 // False branch - the original continuation. 121 // False branch - the original continuation.
120 Node* if_false = graph()->NewNode(common()->IfFalse(), branch); 122 Node* if_false = graph()->NewNode(common()->IfFalse(), branch);
121 NodeProperties::ReplaceWithValue(node, jsgraph()->UndefinedConstant(), effect, 123 ReplaceWithValue(node, jsgraph()->UndefinedConstant(), effect, if_false);
122 if_false);
123 124
124 // True branch: deopt. 125 // True branch: deopt.
125 Node* if_true = graph()->NewNode(common()->IfTrue(), branch); 126 Node* if_true = graph()->NewNode(common()->IfTrue(), branch);
126 Node* deopt = 127 Node* deopt =
127 graph()->NewNode(common()->Deoptimize(), frame_state, effect, if_true); 128 graph()->NewNode(common()->Deoptimize(), frame_state, effect, if_true);
128 129
129 // Connect the deopt to the merge exiting the graph. 130 // Connect the deopt to the merge exiting the graph.
130 NodeProperties::MergeControlToEnd(graph(), common(), deopt); 131 NodeProperties::MergeControlToEnd(graph(), common(), deopt);
131 132
132 return Changed(deopt); 133 return Changed(deopt);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 graph()->NewNode(simplified()->LoadField(AccessBuilder::ForMap()), value, 203 graph()->NewNode(simplified()->LoadField(AccessBuilder::ForMap()), value,
203 effect, if_false), 204 effect, if_false),
204 effect, if_false); 205 effect, if_false);
205 Node* vfalse = graph()->NewNode(machine()->Word32Equal(), efalse, 206 Node* vfalse = graph()->NewNode(machine()->Word32Equal(), efalse,
206 jsgraph()->Int32Constant(instance_type)); 207 jsgraph()->Int32Constant(instance_type));
207 208
208 Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); 209 Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false);
209 210
210 // Replace all effect uses of {node} with the {ephi}. 211 // Replace all effect uses of {node} with the {ephi}.
211 Node* ephi = graph()->NewNode(common()->EffectPhi(2), etrue, efalse, merge); 212 Node* ephi = graph()->NewNode(common()->EffectPhi(2), etrue, efalse, merge);
212 NodeProperties::ReplaceWithValue(node, node, ephi); 213 ReplaceWithValue(node, node, ephi);
213 214
214 // Turn the {node} into a Phi. 215 // Turn the {node} into a Phi.
215 return Change(node, common()->Phi(type, 2), vtrue, vfalse, merge); 216 return Change(node, common()->Phi(type, 2), vtrue, vfalse, merge);
216 } 217 }
217 218
218 219
219 Reduction JSIntrinsicLowering::ReduceIsNonNegativeSmi(Node* node) { 220 Reduction JSIntrinsicLowering::ReduceIsNonNegativeSmi(Node* node) {
220 return Change(node, simplified()->ObjectIsNonNegativeSmi()); 221 return Change(node, simplified()->ObjectIsNonNegativeSmi());
221 } 222 }
222 223
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 264
264 Reduction JSIntrinsicLowering::ReduceSeqStringGetChar( 265 Reduction JSIntrinsicLowering::ReduceSeqStringGetChar(
265 Node* node, String::Encoding encoding) { 266 Node* node, String::Encoding encoding) {
266 Node* effect = NodeProperties::GetEffectInput(node); 267 Node* effect = NodeProperties::GetEffectInput(node);
267 Node* control = NodeProperties::GetControlInput(node); 268 Node* control = NodeProperties::GetControlInput(node);
268 node->set_op( 269 node->set_op(
269 simplified()->LoadElement(AccessBuilder::ForSeqStringChar(encoding))); 270 simplified()->LoadElement(AccessBuilder::ForSeqStringChar(encoding)));
270 node->ReplaceInput(2, effect); 271 node->ReplaceInput(2, effect);
271 node->ReplaceInput(3, control); 272 node->ReplaceInput(3, control);
272 node->TrimInputCount(4); 273 node->TrimInputCount(4);
273 NodeProperties::ReplaceWithValue(node, node, node); 274 RelaxControls(node);
274 return Changed(node); 275 return Changed(node);
275 } 276 }
276 277
277 278
278 Reduction JSIntrinsicLowering::ReduceSeqStringSetChar( 279 Reduction JSIntrinsicLowering::ReduceSeqStringSetChar(
279 Node* node, String::Encoding encoding) { 280 Node* node, String::Encoding encoding) {
280 // Note: The intrinsic has a strange argument order, so we need to reshuffle. 281 // Note: The intrinsic has a strange argument order, so we need to reshuffle.
281 Node* index = NodeProperties::GetValueInput(node, 0); 282 Node* index = NodeProperties::GetValueInput(node, 0);
282 Node* chr = NodeProperties::GetValueInput(node, 1); 283 Node* chr = NodeProperties::GetValueInput(node, 1);
283 Node* string = NodeProperties::GetValueInput(node, 2); 284 Node* string = NodeProperties::GetValueInput(node, 2);
284 Node* effect = NodeProperties::GetEffectInput(node); 285 Node* effect = NodeProperties::GetEffectInput(node);
285 Node* control = NodeProperties::GetControlInput(node); 286 Node* control = NodeProperties::GetControlInput(node);
286 node->set_op( 287 node->set_op(
287 simplified()->StoreElement(AccessBuilder::ForSeqStringChar(encoding))); 288 simplified()->StoreElement(AccessBuilder::ForSeqStringChar(encoding)));
288 node->ReplaceInput(0, string); 289 node->ReplaceInput(0, string);
289 node->ReplaceInput(1, index); 290 node->ReplaceInput(1, index);
290 node->ReplaceInput(2, chr); 291 node->ReplaceInput(2, chr);
291 node->ReplaceInput(3, effect); 292 node->ReplaceInput(3, effect);
292 node->ReplaceInput(4, control); 293 node->ReplaceInput(4, control);
293 node->TrimInputCount(5); 294 node->TrimInputCount(5);
294 NodeProperties::RemoveBounds(node); 295 NodeProperties::RemoveBounds(node);
295 NodeProperties::ReplaceWithValue(node, string, node); 296 ReplaceWithValue(node, string, node);
296 return Changed(node); 297 return Changed(node);
297 } 298 }
298 299
299 300
300 Reduction JSIntrinsicLowering::ReduceStringGetLength(Node* node) { 301 Reduction JSIntrinsicLowering::ReduceStringGetLength(Node* node) {
301 Node* value = NodeProperties::GetValueInput(node, 0); 302 Node* value = NodeProperties::GetValueInput(node, 0);
302 Node* effect = NodeProperties::GetEffectInput(node); 303 Node* effect = NodeProperties::GetEffectInput(node);
303 Node* control = NodeProperties::GetControlInput(node); 304 Node* control = NodeProperties::GetControlInput(node);
304 return Change(node, simplified()->LoadField( 305 return Change(node, simplified()->LoadField(
305 AccessBuilder::ForStringLength(graph()->zone())), 306 AccessBuilder::ForStringLength(graph()->zone())),
(...skipping 12 matching lines...) Expand all
318 // We have to "look through" ToBoolean calls. 319 // We have to "look through" ToBoolean calls.
319 nodes_to_visit.push(use); 320 nodes_to_visit.push(use);
320 } else if (use->opcode() == IrOpcode::kBranch) { 321 } else if (use->opcode() == IrOpcode::kBranch) {
321 // Actually set the hint on any branch using the intrinsic node. 322 // Actually set the hint on any branch using the intrinsic node.
322 use->set_op(common()->Branch(hint)); 323 use->set_op(common()->Branch(hint));
323 } 324 }
324 } 325 }
325 } 326 }
326 // Apart from adding hints to branchs nodes, this is the identity function. 327 // Apart from adding hints to branchs nodes, this is the identity function.
327 Node* value = NodeProperties::GetValueInput(node, 0); 328 Node* value = NodeProperties::GetValueInput(node, 0);
328 NodeProperties::ReplaceWithValue(node, value); 329 ReplaceWithValue(node, value);
329 return Changed(value); 330 return Changed(value);
330 } 331 }
331 332
332 333
333 Reduction JSIntrinsicLowering::ReduceValueOf(Node* node) { 334 Reduction JSIntrinsicLowering::ReduceValueOf(Node* node) {
334 // if (%_IsSmi(value)) { 335 // if (%_IsSmi(value)) {
335 // return value; 336 // return value;
336 // } else if (%_GetInstanceType(%_GetMap(value)) == JS_VALUE_TYPE) { 337 // } else if (%_GetInstanceType(%_GetMap(value)) == JS_VALUE_TYPE) {
337 // return %_GetValue(value); 338 // return %_GetValue(value);
338 // } else { 339 // } else {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 380
380 Node* merge1 = graph()->NewNode(merge_op, if_true1, if_false1); 381 Node* merge1 = graph()->NewNode(merge_op, if_true1, if_false1);
381 efalse0 = graph()->NewNode(ephi_op, etrue1, efalse1, merge1); 382 efalse0 = graph()->NewNode(ephi_op, etrue1, efalse1, merge1);
382 vfalse0 = graph()->NewNode(phi_op, vtrue1, vfalse1, merge1); 383 vfalse0 = graph()->NewNode(phi_op, vtrue1, vfalse1, merge1);
383 } 384 }
384 385
385 Node* merge0 = graph()->NewNode(merge_op, if_true0, if_false0); 386 Node* merge0 = graph()->NewNode(merge_op, if_true0, if_false0);
386 387
387 // Replace all effect uses of {node} with the {ephi0}. 388 // Replace all effect uses of {node} with the {ephi0}.
388 Node* ephi0 = graph()->NewNode(ephi_op, etrue0, efalse0, merge0); 389 Node* ephi0 = graph()->NewNode(ephi_op, etrue0, efalse0, merge0);
389 NodeProperties::ReplaceWithValue(node, node, ephi0); 390 ReplaceWithValue(node, node, ephi0);
390 391
391 // Turn the {node} into a Phi. 392 // Turn the {node} into a Phi.
392 return Change(node, phi_op, vtrue0, vfalse0, merge0); 393 return Change(node, phi_op, vtrue0, vfalse0, merge0);
393 } 394 }
394 395
395 396
396 Reduction JSIntrinsicLowering::Change(Node* node, const Operator* op) { 397 Reduction JSIntrinsicLowering::Change(Node* node, const Operator* op) {
397 // Replace all effect uses of {node} with the effect dependency. 398 // Replace all effect uses of {node} with the effect dependency.
398 NodeProperties::ReplaceWithValue(node, node); 399 RelaxEffectsAndControls(node);
399 // Remove the inputs corresponding to context, effect and control. 400 // Remove the inputs corresponding to context, effect and control.
400 NodeProperties::RemoveNonValueInputs(node); 401 NodeProperties::RemoveNonValueInputs(node);
401 // Finally update the operator to the new one. 402 // Finally update the operator to the new one.
402 node->set_op(op); 403 node->set_op(op);
403 return Changed(node); 404 return Changed(node);
404 } 405 }
405 406
406 407
407 Reduction JSIntrinsicLowering::ReduceIsMinusZero(Node* node) { 408 Reduction JSIntrinsicLowering::ReduceIsMinusZero(Node* node) {
408 Node* value = NodeProperties::GetValueInput(node, 0); 409 Node* value = NodeProperties::GetValueInput(node, 0);
409 Node* effect = NodeProperties::GetEffectInput(node); 410 Node* effect = NodeProperties::GetEffectInput(node);
410 411
411 Node* double_lo = 412 Node* double_lo =
412 graph()->NewNode(machine()->Float64ExtractLowWord32(), value); 413 graph()->NewNode(machine()->Float64ExtractLowWord32(), value);
413 Node* check1 = graph()->NewNode(machine()->Word32Equal(), double_lo, 414 Node* check1 = graph()->NewNode(machine()->Word32Equal(), double_lo,
414 jsgraph()->ZeroConstant()); 415 jsgraph()->ZeroConstant());
415 416
416 Node* double_hi = 417 Node* double_hi =
417 graph()->NewNode(machine()->Float64ExtractHighWord32(), value); 418 graph()->NewNode(machine()->Float64ExtractHighWord32(), value);
418 Node* check2 = graph()->NewNode( 419 Node* check2 = graph()->NewNode(
419 machine()->Word32Equal(), double_hi, 420 machine()->Word32Equal(), double_hi,
420 jsgraph()->Int32Constant(static_cast<int32_t>(0x80000000))); 421 jsgraph()->Int32Constant(static_cast<int32_t>(0x80000000)));
421 422
422 NodeProperties::ReplaceWithValue(node, node, effect); 423 ReplaceWithValue(node, node, effect);
423 424
424 Node* and_result = graph()->NewNode(machine()->Word32And(), check1, check2); 425 Node* and_result = graph()->NewNode(machine()->Word32And(), check1, check2);
425 426
426 return Change(node, machine()->Word32Equal(), and_result, 427 return Change(node, machine()->Word32Equal(), and_result,
427 jsgraph()->Int32Constant(1)); 428 jsgraph()->Int32Constant(1));
428 } 429 }
429 430
430 431
431 Reduction JSIntrinsicLowering::ReduceFixedArraySet(Node* node) { 432 Reduction JSIntrinsicLowering::ReduceFixedArraySet(Node* node) {
432 Node* base = node->InputAt(0); 433 Node* base = node->InputAt(0);
433 Node* index = node->InputAt(1); 434 Node* index = node->InputAt(1);
434 Node* value = node->InputAt(2); 435 Node* value = node->InputAt(2);
435 Node* effect = NodeProperties::GetEffectInput(node); 436 Node* effect = NodeProperties::GetEffectInput(node);
436 Node* control = NodeProperties::GetControlInput(node); 437 Node* control = NodeProperties::GetControlInput(node);
437 Node* store = (graph()->NewNode( 438 Node* store = (graph()->NewNode(
438 simplified()->StoreElement(AccessBuilder::ForFixedArrayElement()), base, 439 simplified()->StoreElement(AccessBuilder::ForFixedArrayElement()), base,
439 index, value, effect, control)); 440 index, value, effect, control));
440 NodeProperties::ReplaceWithValue(node, value, store); 441 ReplaceWithValue(node, value, store);
441 return Changed(store); 442 return Changed(store);
442 } 443 }
443 444
444 445
445 Reduction JSIntrinsicLowering::ReduceGetTypeFeedbackVector(Node* node) { 446 Reduction JSIntrinsicLowering::ReduceGetTypeFeedbackVector(Node* node) {
446 Node* func = node->InputAt(0); 447 Node* func = node->InputAt(0);
447 Node* effect = NodeProperties::GetEffectInput(node); 448 Node* effect = NodeProperties::GetEffectInput(node);
448 Node* control = NodeProperties::GetControlInput(node); 449 Node* control = NodeProperties::GetControlInput(node);
449 FieldAccess access = AccessBuilder::ForJSFunctionSharedFunctionInfo(); 450 FieldAccess access = AccessBuilder::ForJSFunctionSharedFunctionInfo();
450 Node* load = 451 Node* load =
451 graph()->NewNode(simplified()->LoadField(access), func, effect, control); 452 graph()->NewNode(simplified()->LoadField(access), func, effect, control);
452 access = AccessBuilder::ForSharedFunctionInfoTypeFeedbackVector(); 453 access = AccessBuilder::ForSharedFunctionInfoTypeFeedbackVector();
453 return Change(node, simplified()->LoadField(access), load, load, control); 454 return Change(node, simplified()->LoadField(access), load, load, control);
454 } 455 }
455 456
456 457
457 Reduction JSIntrinsicLowering::Change(Node* node, const Operator* op, Node* a, 458 Reduction JSIntrinsicLowering::Change(Node* node, const Operator* op, Node* a,
458 Node* b) { 459 Node* b) {
459 node->set_op(op); 460 node->set_op(op);
460 node->ReplaceInput(0, a); 461 node->ReplaceInput(0, a);
461 node->ReplaceInput(1, b); 462 node->ReplaceInput(1, b);
462 node->TrimInputCount(2); 463 node->TrimInputCount(2);
463 NodeProperties::ReplaceWithValue(node, node, node); 464 RelaxControls(node);
464 return Changed(node); 465 return Changed(node);
465 } 466 }
466 467
467 468
468 Reduction JSIntrinsicLowering::Change(Node* node, const Operator* op, Node* a, 469 Reduction JSIntrinsicLowering::Change(Node* node, const Operator* op, Node* a,
469 Node* b, Node* c) { 470 Node* b, Node* c) {
470 node->set_op(op); 471 node->set_op(op);
471 node->ReplaceInput(0, a); 472 node->ReplaceInput(0, a);
472 node->ReplaceInput(1, b); 473 node->ReplaceInput(1, b);
473 node->ReplaceInput(2, c); 474 node->ReplaceInput(2, c);
474 node->TrimInputCount(3); 475 node->TrimInputCount(3);
475 NodeProperties::ReplaceWithValue(node, node, node); 476 RelaxControls(node);
476 return Changed(node); 477 return Changed(node);
477 } 478 }
478 479
479 480
480 Reduction JSIntrinsicLowering::ChangeToUndefined(Node* node, Node* effect) { 481 Reduction JSIntrinsicLowering::ChangeToUndefined(Node* node, Node* effect) {
481 NodeProperties::ReplaceWithValue(node, jsgraph()->UndefinedConstant(), 482 ReplaceWithValue(node, jsgraph()->UndefinedConstant(), effect);
482 effect);
483 return Changed(node); 483 return Changed(node);
484 } 484 }
485 485
486 486
487 Graph* JSIntrinsicLowering::graph() const { return jsgraph()->graph(); } 487 Graph* JSIntrinsicLowering::graph() const { return jsgraph()->graph(); }
488 488
489 489
490 CommonOperatorBuilder* JSIntrinsicLowering::common() const { 490 CommonOperatorBuilder* JSIntrinsicLowering::common() const {
491 return jsgraph()->common(); 491 return jsgraph()->common();
492 } 492 }
493 493
494 494
495 MachineOperatorBuilder* JSIntrinsicLowering::machine() const { 495 MachineOperatorBuilder* JSIntrinsicLowering::machine() const {
496 return jsgraph()->machine(); 496 return jsgraph()->machine();
497 } 497 }
498 498
499 } // namespace compiler 499 } // namespace compiler
500 } // namespace internal 500 } // namespace internal
501 } // namespace v8 501 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/js-intrinsic-lowering.h ('k') | src/compiler/pipeline.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698