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

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

Issue 2064953004: [turbofan] Unify the PlainPrimitive as Number treatment. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 6 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-builtin-reducer.cc ('k') | src/compiler/opcodes.h » ('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 2014 the V8 project authors. All rights reserved. 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 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/code-factory.h" 5 #include "src/code-factory.h"
6 #include "src/compilation-dependencies.h" 6 #include "src/compilation-dependencies.h"
7 #include "src/compiler/access-builder.h" 7 #include "src/compiler/access-builder.h"
8 #include "src/compiler/js-graph.h" 8 #include "src/compiler/js-graph.h"
9 #include "src/compiler/js-typed-lowering.h" 9 #include "src/compiler/js-typed-lowering.h"
10 #include "src/compiler/linkage.h" 10 #include "src/compiler/linkage.h"
(...skipping 27 matching lines...) Expand all
38 BinaryOperationHints hints = BinaryOperationHintsOf(node_->op()); 38 BinaryOperationHints hints = BinaryOperationHintsOf(node_->op());
39 BinaryOperationHints::Hint combined = hints.combined(); 39 BinaryOperationHints::Hint combined = hints.combined();
40 if (combined == BinaryOperationHints::kSignedSmall || 40 if (combined == BinaryOperationHints::kSignedSmall ||
41 combined == BinaryOperationHints::kSigned32 || 41 combined == BinaryOperationHints::kSigned32 ||
42 combined == BinaryOperationHints::kNumberOrUndefined) { 42 combined == BinaryOperationHints::kNumberOrUndefined) {
43 return combined; 43 return combined;
44 } 44 }
45 return BinaryOperationHints::kAny; 45 return BinaryOperationHints::kAny;
46 } 46 }
47 47
48 void ConvertInputsToNumberOrUndefined(Node* frame_state) { 48 void ConvertInputsToNumber(Node* frame_state) {
49 // To convert the inputs to numbers, we have to provide frame states 49 // To convert the inputs to numbers, we have to provide frame states
50 // for lazy bailouts in the ToNumber conversions. 50 // for lazy bailouts in the ToNumber conversions.
51 // We use a little hack here: we take the frame state before the binary 51 // We use a little hack here: we take the frame state before the binary
52 // operation and use it to construct the frame states for the conversion 52 // operation and use it to construct the frame states for the conversion
53 // so that after the deoptimization, the binary operation IC gets 53 // so that after the deoptimization, the binary operation IC gets
54 // already converted values from full code. This way we are sure that we 54 // already converted values from full code. This way we are sure that we
55 // will not re-do any of the side effects. 55 // will not re-do any of the side effects.
56 56
57 Node* left_input = nullptr; 57 Node* left_input = nullptr;
58 Node* right_input = nullptr; 58 Node* right_input = nullptr;
59 bool left_is_primitive = left_type()->Is(Type::PlainPrimitive()); 59 bool left_is_primitive = left_type()->Is(Type::PlainPrimitive());
60 bool right_is_primitive = right_type()->Is(Type::PlainPrimitive()); 60 bool right_is_primitive = right_type()->Is(Type::PlainPrimitive());
61 bool handles_exception = NodeProperties::IsExceptionalCall(node_); 61 bool handles_exception = NodeProperties::IsExceptionalCall(node_);
62 62
63 if (!left_is_primitive && !right_is_primitive && handles_exception) { 63 if (!left_is_primitive && !right_is_primitive && handles_exception) {
64 ConvertBothInputsToNumber(&left_input, &right_input, frame_state); 64 ConvertBothInputsToNumber(&left_input, &right_input, frame_state);
65 } else { 65 } else {
66 left_input = left_is_primitive 66 left_input = left_is_primitive
67 ? ConvertPlainPrimitiveToNumberOrUndefined(left()) 67 ? ConvertPlainPrimitiveToNumber(left())
68 : ConvertSingleInputToNumber( 68 : ConvertSingleInputToNumber(
69 left(), CreateFrameStateForLeftInput(frame_state)); 69 left(), CreateFrameStateForLeftInput(frame_state));
70 right_input = right_is_primitive 70 right_input = right_is_primitive
71 ? ConvertPlainPrimitiveToNumberOrUndefined(right()) 71 ? ConvertPlainPrimitiveToNumber(right())
72 : ConvertSingleInputToNumber( 72 : ConvertSingleInputToNumber(
73 right(), CreateFrameStateForRightInput( 73 right(), CreateFrameStateForRightInput(
74 frame_state, left_input)); 74 frame_state, left_input));
75 } 75 }
76 76
77 node_->ReplaceInput(0, left_input); 77 node_->ReplaceInput(0, left_input);
78 node_->ReplaceInput(1, right_input); 78 node_->ReplaceInput(1, right_input);
79 } 79 }
80 80
81 void ConvertInputsToUI32(Signedness left_signedness, 81 void ConvertInputsToUI32(Signedness left_signedness,
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 graph()->NewNode(stack->op(), stack->InputCount(), &new_values.front()); 274 graph()->NewNode(stack->op(), stack->InputCount(), &new_values.front());
275 275
276 return graph()->NewNode( 276 return graph()->NewNode(
277 op, frame_state->InputAt(kFrameStateParametersInput), 277 op, frame_state->InputAt(kFrameStateParametersInput),
278 frame_state->InputAt(kFrameStateLocalsInput), new_stack, 278 frame_state->InputAt(kFrameStateLocalsInput), new_stack,
279 frame_state->InputAt(kFrameStateContextInput), 279 frame_state->InputAt(kFrameStateContextInput),
280 frame_state->InputAt(kFrameStateFunctionInput), 280 frame_state->InputAt(kFrameStateFunctionInput),
281 frame_state->InputAt(kFrameStateOuterStateInput)); 281 frame_state->InputAt(kFrameStateOuterStateInput));
282 } 282 }
283 283
284 Node* ConvertPlainPrimitiveToNumberOrUndefined(Node* node) { 284 Node* ConvertPlainPrimitiveToNumber(Node* node) {
285 DCHECK(NodeProperties::GetType(node)->Is(Type::PlainPrimitive())); 285 DCHECK(NodeProperties::GetType(node)->Is(Type::PlainPrimitive()));
286 // Avoid inserting too many eager ToNumber() operations. 286 // Avoid inserting too many eager ToNumber() operations.
287 Reduction const reduction = lowering_->ReduceJSToNumberInput(node); 287 Reduction const reduction = lowering_->ReduceJSToNumberInput(node);
288 if (reduction.Changed()) return reduction.replacement(); 288 if (reduction.Changed()) return reduction.replacement();
289 if (NodeProperties::GetType(node)->Is(Type::NumberOrUndefined())) { 289 if (NodeProperties::GetType(node)->Is(Type::Number())) {
290 return node; 290 return node;
291 } 291 }
292 return graph()->NewNode(simplified()->PlainPrimitiveToNumber(), node); 292 return graph()->NewNode(simplified()->PlainPrimitiveToNumber(), node);
293 } 293 }
294 294
295 Node* ConvertSingleInputToNumber(Node* node, Node* frame_state) { 295 Node* ConvertSingleInputToNumber(Node* node, Node* frame_state) {
296 DCHECK(!NodeProperties::GetType(node)->Is(Type::PlainPrimitive())); 296 DCHECK(!NodeProperties::GetType(node)->Is(Type::PlainPrimitive()));
297 Node* const n = graph()->NewNode(javascript()->ToNumber(), node, context(), 297 Node* const n = graph()->NewNode(javascript()->ToNumber(), node, context(),
298 frame_state, effect(), control()); 298 frame_state, effect(), control());
299 Node* const if_success = graph()->NewNode(common()->IfSuccess(), n); 299 Node* const if_success = graph()->NewNode(common()->IfSuccess(), n);
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 if (flags() & kDisableBinaryOpReduction) return NoChange(); 402 if (flags() & kDisableBinaryOpReduction) return NoChange();
403 403
404 JSBinopReduction r(this, node); 404 JSBinopReduction r(this, node);
405 405
406 BinaryOperationHints::Hint feedback = r.GetUsableNumberFeedback(); 406 BinaryOperationHints::Hint feedback = r.GetUsableNumberFeedback();
407 if (feedback != BinaryOperationHints::kAny) { 407 if (feedback != BinaryOperationHints::kAny) {
408 // Lower to the optimistic number binop. 408 // Lower to the optimistic number binop.
409 return r.ChangeToSpeculativeOperator( 409 return r.ChangeToSpeculativeOperator(
410 simplified()->SpeculativeNumberAdd(feedback)); 410 simplified()->SpeculativeNumberAdd(feedback));
411 } 411 }
412 if (r.BothInputsAre(Type::NumberOrUndefined())) { 412 if (r.BothInputsAre(Type::Number())) {
413 // JSAdd(x:number, y:number) => NumberAdd(x, y) 413 // JSAdd(x:number, y:number) => NumberAdd(x, y)
414 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); 414 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1);
415 r.ConvertInputsToNumberOrUndefined(frame_state); 415 r.ConvertInputsToNumber(frame_state);
416 return r.ChangeToPureOperator(simplified()->NumberAdd(), Type::Number()); 416 return r.ChangeToPureOperator(simplified()->NumberAdd(), Type::Number());
417 } 417 }
418 if (r.NeitherInputCanBe(Type::StringOrReceiver())) { 418 if (r.NeitherInputCanBe(Type::StringOrReceiver())) {
419 // JSAdd(x:-string, y:-string) => NumberAdd(ToNumber(x), ToNumber(y)) 419 // JSAdd(x:-string, y:-string) => NumberAdd(ToNumber(x), ToNumber(y))
420 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); 420 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1);
421 r.ConvertInputsToNumberOrUndefined(frame_state); 421 r.ConvertInputsToNumber(frame_state);
422 return r.ChangeToPureOperator(simplified()->NumberAdd(), Type::Number()); 422 return r.ChangeToPureOperator(simplified()->NumberAdd(), Type::Number());
423 } 423 }
424 if (r.OneInputIs(Type::String())) { 424 if (r.OneInputIs(Type::String())) {
425 StringAddFlags flags = STRING_ADD_CHECK_NONE; 425 StringAddFlags flags = STRING_ADD_CHECK_NONE;
426 if (!r.LeftInputIs(Type::String())) { 426 if (!r.LeftInputIs(Type::String())) {
427 flags = STRING_ADD_CONVERT_LEFT; 427 flags = STRING_ADD_CONVERT_LEFT;
428 } else if (!r.RightInputIs(Type::String())) { 428 } else if (!r.RightInputIs(Type::String())) {
429 flags = STRING_ADD_CONVERT_RIGHT; 429 flags = STRING_ADD_CONVERT_RIGHT;
430 } 430 }
431 // JSAdd(x:string, y) => CallStub[StringAdd](x, y) 431 // JSAdd(x:string, y) => CallStub[StringAdd](x, y)
(...skipping 29 matching lines...) Expand all
461 Reduction JSTypedLowering::ReduceJSSubtract(Node* node) { 461 Reduction JSTypedLowering::ReduceJSSubtract(Node* node) {
462 if (flags() & kDisableBinaryOpReduction) return NoChange(); 462 if (flags() & kDisableBinaryOpReduction) return NoChange();
463 JSBinopReduction r(this, node); 463 JSBinopReduction r(this, node);
464 BinaryOperationHints::Hint feedback = r.GetUsableNumberFeedback(); 464 BinaryOperationHints::Hint feedback = r.GetUsableNumberFeedback();
465 if (feedback != BinaryOperationHints::kAny) { 465 if (feedback != BinaryOperationHints::kAny) {
466 // Lower to the optimistic number binop. 466 // Lower to the optimistic number binop.
467 return r.ChangeToSpeculativeOperator( 467 return r.ChangeToSpeculativeOperator(
468 simplified()->SpeculativeNumberSubtract(feedback)); 468 simplified()->SpeculativeNumberSubtract(feedback));
469 } 469 }
470 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); 470 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1);
471 r.ConvertInputsToNumberOrUndefined(frame_state); 471 r.ConvertInputsToNumber(frame_state);
472 return r.ChangeToPureOperator(simplified()->NumberSubtract(), Type::Number()); 472 return r.ChangeToPureOperator(simplified()->NumberSubtract(), Type::Number());
473 } 473 }
474 474
475 Reduction JSTypedLowering::ReduceJSMultiply(Node* node) { 475 Reduction JSTypedLowering::ReduceJSMultiply(Node* node) {
476 if (flags() & kDisableBinaryOpReduction) return NoChange(); 476 if (flags() & kDisableBinaryOpReduction) return NoChange();
477 JSBinopReduction r(this, node); 477 JSBinopReduction r(this, node);
478 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); 478 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1);
479 r.ConvertInputsToNumberOrUndefined(frame_state); 479 r.ConvertInputsToNumber(frame_state);
480 return r.ChangeToPureOperator(simplified()->NumberMultiply(), Type::Number()); 480 return r.ChangeToPureOperator(simplified()->NumberMultiply(), Type::Number());
481 } 481 }
482 482
483 Reduction JSTypedLowering::ReduceJSDivide(Node* node) { 483 Reduction JSTypedLowering::ReduceJSDivide(Node* node) {
484 if (flags() & kDisableBinaryOpReduction) return NoChange(); 484 if (flags() & kDisableBinaryOpReduction) return NoChange();
485 JSBinopReduction r(this, node); 485 JSBinopReduction r(this, node);
486 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); 486 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1);
487 r.ConvertInputsToNumberOrUndefined(frame_state); 487 r.ConvertInputsToNumber(frame_state);
488 return r.ChangeToPureOperator(simplified()->NumberDivide(), Type::Number()); 488 return r.ChangeToPureOperator(simplified()->NumberDivide(), Type::Number());
489 } 489 }
490 490
491 491
492 Reduction JSTypedLowering::ReduceInt32Binop(Node* node, const Operator* intOp) { 492 Reduction JSTypedLowering::ReduceInt32Binop(Node* node, const Operator* intOp) {
493 if (flags() & kDisableBinaryOpReduction) return NoChange(); 493 if (flags() & kDisableBinaryOpReduction) return NoChange();
494 494
495 JSBinopReduction r(this, node); 495 JSBinopReduction r(this, node);
496 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); 496 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1);
497 r.ConvertInputsToNumberOrUndefined(frame_state); 497 r.ConvertInputsToNumber(frame_state);
498 r.ConvertInputsToUI32(kSigned, kSigned); 498 r.ConvertInputsToUI32(kSigned, kSigned);
499 return r.ChangeToPureOperator(intOp, Type::Integral32()); 499 return r.ChangeToPureOperator(intOp, Type::Integral32());
500 } 500 }
501 501
502 502
503 Reduction JSTypedLowering::ReduceUI32Shift(Node* node, 503 Reduction JSTypedLowering::ReduceUI32Shift(Node* node,
504 Signedness left_signedness, 504 Signedness left_signedness,
505 const Operator* shift_op) { 505 const Operator* shift_op) {
506 if (flags() & kDisableBinaryOpReduction) return NoChange(); 506 if (flags() & kDisableBinaryOpReduction) return NoChange();
507 507
508 JSBinopReduction r(this, node); 508 JSBinopReduction r(this, node);
509 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); 509 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1);
510 r.ConvertInputsToNumberOrUndefined(frame_state); 510 r.ConvertInputsToNumber(frame_state);
511 r.ConvertInputsToUI32(left_signedness, kUnsigned); 511 r.ConvertInputsToUI32(left_signedness, kUnsigned);
512 return r.ChangeToPureOperator(shift_op); 512 return r.ChangeToPureOperator(shift_op);
513 } 513 }
514 514
515 515
516 Reduction JSTypedLowering::ReduceJSComparison(Node* node) { 516 Reduction JSTypedLowering::ReduceJSComparison(Node* node) {
517 if (flags() & kDisableBinaryOpReduction) return NoChange(); 517 if (flags() & kDisableBinaryOpReduction) return NoChange();
518 518
519 JSBinopReduction r(this, node); 519 JSBinopReduction r(this, node);
520 if (r.BothInputsAre(Type::String())) { 520 if (r.BothInputsAre(Type::String())) {
(...skipping 25 matching lines...) Expand all
546 const Operator* less_than_or_equal; 546 const Operator* less_than_or_equal;
547 if (r.BothInputsAre(Type::Unsigned32())) { 547 if (r.BothInputsAre(Type::Unsigned32())) {
548 less_than = machine()->Uint32LessThan(); 548 less_than = machine()->Uint32LessThan();
549 less_than_or_equal = machine()->Uint32LessThanOrEqual(); 549 less_than_or_equal = machine()->Uint32LessThanOrEqual();
550 } else if (r.BothInputsAre(Type::Signed32())) { 550 } else if (r.BothInputsAre(Type::Signed32())) {
551 less_than = machine()->Int32LessThan(); 551 less_than = machine()->Int32LessThan();
552 less_than_or_equal = machine()->Int32LessThanOrEqual(); 552 less_than_or_equal = machine()->Int32LessThanOrEqual();
553 } else { 553 } else {
554 // TODO(turbofan): mixed signed/unsigned int32 comparisons. 554 // TODO(turbofan): mixed signed/unsigned int32 comparisons.
555 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); 555 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1);
556 r.ConvertInputsToNumberOrUndefined(frame_state); 556 r.ConvertInputsToNumber(frame_state);
557 less_than = simplified()->NumberLessThan(); 557 less_than = simplified()->NumberLessThan();
558 less_than_or_equal = simplified()->NumberLessThanOrEqual(); 558 less_than_or_equal = simplified()->NumberLessThanOrEqual();
559 } 559 }
560 const Operator* comparison; 560 const Operator* comparison;
561 switch (node->opcode()) { 561 switch (node->opcode()) {
562 case IrOpcode::kJSLessThan: 562 case IrOpcode::kJSLessThan:
563 comparison = less_than; 563 comparison = less_than;
564 break; 564 break;
565 case IrOpcode::kJSGreaterThan: 565 case IrOpcode::kJSGreaterThan:
566 comparison = less_than; 566 comparison = less_than;
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 return r.ChangeToPureOperator( 715 return r.ChangeToPureOperator(
716 simplified()->ReferenceEqual(Type::Receiver()), invert); 716 simplified()->ReferenceEqual(Type::Receiver()), invert);
717 } 717 }
718 if (r.BothInputsAre(Type::Unique())) { 718 if (r.BothInputsAre(Type::Unique())) {
719 return r.ChangeToPureOperator(simplified()->ReferenceEqual(Type::Unique()), 719 return r.ChangeToPureOperator(simplified()->ReferenceEqual(Type::Unique()),
720 invert); 720 invert);
721 } 721 }
722 if (r.BothInputsAre(Type::String())) { 722 if (r.BothInputsAre(Type::String())) {
723 return r.ChangeToPureOperator(simplified()->StringEqual(), invert); 723 return r.ChangeToPureOperator(simplified()->StringEqual(), invert);
724 } 724 }
725 if (r.BothInputsAre(Type::NumberOrUndefined())) { 725 if (r.BothInputsAre(Type::Number())) {
726 return r.ChangeToPureOperator(simplified()->NumberEqual(), invert); 726 return r.ChangeToPureOperator(simplified()->NumberEqual(), invert);
727 } 727 }
728 // TODO(turbofan): js-typed-lowering of StrictEqual(mixed types) 728 // TODO(turbofan): js-typed-lowering of StrictEqual(mixed types)
729 return NoChange(); 729 return NoChange();
730 } 730 }
731 731
732 732
733 Reduction JSTypedLowering::ReduceJSToBoolean(Node* node) { 733 Reduction JSTypedLowering::ReduceJSToBoolean(Node* node) {
734 Node* const input = node->InputAt(0); 734 Node* const input = node->InputAt(0);
735 Type* const input_type = NodeProperties::GetType(input); 735 Type* const input_type = NodeProperties::GetType(input);
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
1066 key_type->Is(shifted_int32_ranges_[k]) && byte_length <= kMaxInt) { 1066 key_type->Is(shifted_int32_ranges_[k]) && byte_length <= kMaxInt) {
1067 // JSLoadProperty(typed-array, int32) 1067 // JSLoadProperty(typed-array, int32)
1068 Handle<FixedTypedArrayBase> elements = 1068 Handle<FixedTypedArrayBase> elements =
1069 Handle<FixedTypedArrayBase>::cast(handle(array->elements())); 1069 Handle<FixedTypedArrayBase>::cast(handle(array->elements()));
1070 Node* buffer = jsgraph()->PointerConstant(elements->external_pointer()); 1070 Node* buffer = jsgraph()->PointerConstant(elements->external_pointer());
1071 Node* length = jsgraph()->Constant(byte_length); 1071 Node* length = jsgraph()->Constant(byte_length);
1072 Node* context = NodeProperties::GetContextInput(node); 1072 Node* context = NodeProperties::GetContextInput(node);
1073 Node* effect = NodeProperties::GetEffectInput(node); 1073 Node* effect = NodeProperties::GetEffectInput(node);
1074 Node* control = NodeProperties::GetControlInput(node); 1074 Node* control = NodeProperties::GetControlInput(node);
1075 // Convert to a number first. 1075 // Convert to a number first.
1076 if (!value_type->Is(Type::NumberOrUndefined())) { 1076 if (!value_type->Is(Type::Number())) {
1077 Reduction number_reduction = ReduceJSToNumberInput(value); 1077 Reduction number_reduction = ReduceJSToNumberInput(value);
1078 if (number_reduction.Changed()) { 1078 if (number_reduction.Changed()) {
1079 value = number_reduction.replacement(); 1079 value = number_reduction.replacement();
1080 } else { 1080 } else {
1081 Node* frame_state_for_to_number = 1081 Node* frame_state_for_to_number =
1082 NodeProperties::FindFrameStateBefore(node); 1082 NodeProperties::FindFrameStateBefore(node);
1083 value = effect = 1083 value = effect =
1084 graph()->NewNode(javascript()->ToNumber(), value, context, 1084 graph()->NewNode(javascript()->ToNumber(), value, context,
1085 frame_state_for_to_number, effect, control); 1085 frame_state_for_to_number, effect, control);
1086 } 1086 }
(...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after
1947 } 1947 }
1948 1948
1949 1949
1950 CompilationDependencies* JSTypedLowering::dependencies() const { 1950 CompilationDependencies* JSTypedLowering::dependencies() const {
1951 return dependencies_; 1951 return dependencies_;
1952 } 1952 }
1953 1953
1954 } // namespace compiler 1954 } // namespace compiler
1955 } // namespace internal 1955 } // namespace internal
1956 } // namespace v8 1956 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/js-builtin-reducer.cc ('k') | src/compiler/opcodes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698