| OLD | NEW |
| 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 455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 466 jsgraph()->HeapConstant(callable.code())); | 466 jsgraph()->HeapConstant(callable.code())); |
| 467 NodeProperties::ChangeOp(node, common()->Call(desc)); | 467 NodeProperties::ChangeOp(node, common()->Call(desc)); |
| 468 return Changed(node); | 468 return Changed(node); |
| 469 } | 469 } |
| 470 return NoChange(); | 470 return NoChange(); |
| 471 } | 471 } |
| 472 | 472 |
| 473 | 473 |
| 474 Reduction JSTypedLowering::ReduceJSModulus(Node* node) { | 474 Reduction JSTypedLowering::ReduceJSModulus(Node* node) { |
| 475 if (flags() & kDisableBinaryOpReduction) return NoChange(); | 475 if (flags() & kDisableBinaryOpReduction) return NoChange(); |
| 476 | |
| 477 JSBinopReduction r(this, node); | 476 JSBinopReduction r(this, node); |
| 478 if (r.BothInputsAre(Type::Number())) { | 477 if (r.BothInputsAre(Type::Number())) { |
| 479 // JSModulus(x:number, x:number) => NumberModulus(x, y) | 478 // JSModulus(x:number, x:number) => NumberModulus(x, y) |
| 480 return r.ChangeToPureOperator(simplified()->NumberModulus(), | 479 return r.ChangeToPureOperator(simplified()->NumberModulus(), |
| 481 Type::Number()); | 480 Type::Number()); |
| 482 } | 481 } |
| 482 BinaryOperationHints::Hint feedback = r.GetNumberBinaryOperationFeedback(); |
| 483 if (feedback != BinaryOperationHints::kAny) { |
| 484 return r.ChangeToSpeculativeOperator( |
| 485 simplified()->SpeculativeNumberModulus(feedback), Type::Number()); |
| 486 } |
| 483 return NoChange(); | 487 return NoChange(); |
| 484 } | 488 } |
| 485 | 489 |
| 486 Reduction JSTypedLowering::ReduceJSSubtract(Node* node) { | 490 Reduction JSTypedLowering::ReduceJSSubtract(Node* node) { |
| 487 if (flags() & kDisableBinaryOpReduction) return NoChange(); | 491 if (flags() & kDisableBinaryOpReduction) return NoChange(); |
| 488 JSBinopReduction r(this, node); | 492 JSBinopReduction r(this, node); |
| 489 BinaryOperationHints::Hint feedback = r.GetNumberBinaryOperationFeedback(); | 493 BinaryOperationHints::Hint feedback = r.GetNumberBinaryOperationFeedback(); |
| 490 if (feedback == BinaryOperationHints::kNumberOrUndefined && | 494 if (feedback == BinaryOperationHints::kNumberOrUndefined && |
| 491 r.BothInputsAre(Type::PlainPrimitive())) { | 495 r.BothInputsAre(Type::PlainPrimitive())) { |
| 492 // JSSubtract(x:plain-primitive, y:plain-primitive) | 496 // JSSubtract(x:plain-primitive, y:plain-primitive) |
| 493 // => NumberSubtract(ToNumber(x), ToNumber(y)) | 497 // => NumberSubtract(ToNumber(x), ToNumber(y)) |
| 494 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); | 498 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); |
| 495 r.ConvertInputsToNumber(frame_state); | 499 r.ConvertInputsToNumber(frame_state); |
| 496 return r.ChangeToPureOperator(simplified()->NumberSubtract(), | 500 return r.ChangeToPureOperator(simplified()->NumberSubtract(), |
| 497 Type::Number()); | 501 Type::Number()); |
| 498 } | 502 } |
| 499 if (feedback != BinaryOperationHints::kAny) { | 503 if (feedback != BinaryOperationHints::kAny) { |
| 500 // Lower to the optimistic number binop. | 504 // Lower to the optimistic number binop. |
| 501 return r.ChangeToSpeculativeOperator( | 505 return r.ChangeToSpeculativeOperator( |
| 502 simplified()->SpeculativeNumberSubtract(feedback), Type::Number()); | 506 simplified()->SpeculativeNumberSubtract(feedback), Type::Number()); |
| 503 } | 507 } |
| 504 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); | 508 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); |
| 505 r.ConvertInputsToNumber(frame_state); | 509 r.ConvertInputsToNumber(frame_state); |
| 506 return r.ChangeToPureOperator(simplified()->NumberSubtract(), Type::Number()); | 510 return r.ChangeToPureOperator(simplified()->NumberSubtract(), Type::Number()); |
| 507 } | 511 } |
| 508 | 512 |
| 509 Reduction JSTypedLowering::ReduceJSMultiply(Node* node) { | 513 Reduction JSTypedLowering::ReduceJSMultiply(Node* node) { |
| 510 if (flags() & kDisableBinaryOpReduction) return NoChange(); | 514 if (flags() & kDisableBinaryOpReduction) return NoChange(); |
| 511 JSBinopReduction r(this, node); | 515 JSBinopReduction r(this, node); |
| 516 |
| 517 BinaryOperationHints::Hint feedback = r.GetNumberBinaryOperationFeedback(); |
| 518 if (feedback != BinaryOperationHints::kAny) { |
| 519 return r.ChangeToSpeculativeOperator( |
| 520 simplified()->SpeculativeNumberMultiply(feedback), Type::Number()); |
| 521 } |
| 522 |
| 512 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); | 523 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); |
| 513 r.ConvertInputsToNumber(frame_state); | 524 r.ConvertInputsToNumber(frame_state); |
| 514 return r.ChangeToPureOperator(simplified()->NumberMultiply(), Type::Number()); | 525 return r.ChangeToPureOperator(simplified()->NumberMultiply(), Type::Number()); |
| 515 } | 526 } |
| 516 | 527 |
| 517 Reduction JSTypedLowering::ReduceJSDivide(Node* node) { | 528 Reduction JSTypedLowering::ReduceJSDivide(Node* node) { |
| 518 if (flags() & kDisableBinaryOpReduction) return NoChange(); | 529 if (flags() & kDisableBinaryOpReduction) return NoChange(); |
| 519 JSBinopReduction r(this, node); | 530 JSBinopReduction r(this, node); |
| 531 BinaryOperationHints::Hint feedback = r.GetNumberBinaryOperationFeedback(); |
| 532 if (feedback != BinaryOperationHints::kAny) { |
| 533 return r.ChangeToSpeculativeOperator( |
| 534 simplified()->SpeculativeNumberDivide(feedback), Type::Number()); |
| 535 } |
| 520 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); | 536 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); |
| 521 r.ConvertInputsToNumber(frame_state); | 537 r.ConvertInputsToNumber(frame_state); |
| 522 return r.ChangeToPureOperator(simplified()->NumberDivide(), Type::Number()); | 538 return r.ChangeToPureOperator(simplified()->NumberDivide(), Type::Number()); |
| 523 } | 539 } |
| 524 | 540 |
| 525 | 541 |
| 526 Reduction JSTypedLowering::ReduceInt32Binop(Node* node, const Operator* intOp) { | 542 Reduction JSTypedLowering::ReduceInt32Binop(Node* node, const Operator* intOp) { |
| 527 if (flags() & kDisableBinaryOpReduction) return NoChange(); | 543 if (flags() & kDisableBinaryOpReduction) return NoChange(); |
| 528 | 544 |
| 529 JSBinopReduction r(this, node); | 545 JSBinopReduction r(this, node); |
| (...skipping 1461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1991 } | 2007 } |
| 1992 | 2008 |
| 1993 | 2009 |
| 1994 CompilationDependencies* JSTypedLowering::dependencies() const { | 2010 CompilationDependencies* JSTypedLowering::dependencies() const { |
| 1995 return dependencies_; | 2011 return dependencies_; |
| 1996 } | 2012 } |
| 1997 | 2013 |
| 1998 } // namespace compiler | 2014 } // namespace compiler |
| 1999 } // namespace internal | 2015 } // namespace internal |
| 2000 } // namespace v8 | 2016 } // namespace v8 |
| OLD | NEW |