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

Side by Side Diff: src/compiler/simplified-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/representation-change.cc ('k') | src/compiler/simplified-operator.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/compiler/simplified-lowering.h" 5 #include "src/compiler/simplified-lowering.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "src/address-map.h" 9 #include "src/address-map.h"
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 593 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 604
605 void ResetOutput(Node* node, MachineRepresentation representation, 605 void ResetOutput(Node* node, MachineRepresentation representation,
606 TypeCheckKind type_check = TypeCheckKind::kNone) { 606 TypeCheckKind type_check = TypeCheckKind::kNone) {
607 NodeInfo* info = GetInfo(node); 607 NodeInfo* info = GetInfo(node);
608 info->set_output(representation); 608 info->set_output(representation);
609 info->set_type_check(type_check); 609 info->set_type_check(type_check);
610 } 610 }
611 611
612 Type* GetUpperBound(Node* node) { return NodeProperties::GetType(node); } 612 Type* GetUpperBound(Node* node) { return NodeProperties::GetType(node); }
613 613
614 bool InputIs(Node* node, Type* type) {
615 DCHECK_EQ(1, node->InputCount());
616 return GetUpperBound(node->InputAt(0))->Is(type);
617 }
618
614 bool BothInputsAreSigned32(Node* node) { 619 bool BothInputsAreSigned32(Node* node) {
615 DCHECK_EQ(2, node->InputCount()); 620 return BothInputsAre(node, Type::Signed32());
616 return GetUpperBound(node->InputAt(0))->Is(Type::Signed32()) &&
617 GetUpperBound(node->InputAt(1))->Is(Type::Signed32());
618 } 621 }
619 622
620 bool BothInputsAreUnsigned32(Node* node) { 623 bool BothInputsAreUnsigned32(Node* node) {
621 DCHECK_EQ(2, node->InputCount()); 624 return BothInputsAre(node, Type::Unsigned32());
622 return GetUpperBound(node->InputAt(0))->Is(Type::Unsigned32()) &&
623 GetUpperBound(node->InputAt(1))->Is(Type::Unsigned32());
624 } 625 }
625 626
626 bool BothInputsAre(Node* node, Type* type) { 627 bool BothInputsAre(Node* node, Type* type) {
627 DCHECK_EQ(2, node->op()->ValueInputCount()); 628 DCHECK_EQ(2, node->op()->ValueInputCount());
628 return GetUpperBound(node->InputAt(0))->Is(type) && 629 return GetUpperBound(node->InputAt(0))->Is(type) &&
629 GetUpperBound(node->InputAt(1))->Is(type); 630 GetUpperBound(node->InputAt(1))->Is(type);
630 } 631 }
631 632
632 void ConvertInput(Node* node, int index, UseInfo use) { 633 void ConvertInput(Node* node, int index, UseInfo use) {
633 Node* input = node->InputAt(index); 634 Node* input = node->InputAt(index);
(...skipping 752 matching lines...) Expand 10 before | Expand all | Expand 10 after
1386 MachineRepresentation::kFloat64); 1387 MachineRepresentation::kFloat64);
1387 if (lower()) DeferReplacement(node, lowering->Float64Ceil(node)); 1388 if (lower()) DeferReplacement(node, lowering->Float64Ceil(node));
1388 return; 1389 return;
1389 } 1390 }
1390 case IrOpcode::kNumberFloor: { 1391 case IrOpcode::kNumberFloor: {
1391 VisitUnop(node, UseInfo::TruncatingFloat64(), 1392 VisitUnop(node, UseInfo::TruncatingFloat64(),
1392 MachineRepresentation::kFloat64); 1393 MachineRepresentation::kFloat64);
1393 if (lower()) DeferReplacement(node, lowering->Float64Floor(node)); 1394 if (lower()) DeferReplacement(node, lowering->Float64Floor(node));
1394 return; 1395 return;
1395 } 1396 }
1397 case IrOpcode::kNumberFround: {
1398 VisitUnop(node, UseInfo::TruncatingFloat64(),
1399 MachineRepresentation::kFloat32);
1400 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node));
1401 return;
1402 }
1396 case IrOpcode::kNumberAtan2: { 1403 case IrOpcode::kNumberAtan2: {
1397 VisitBinop(node, UseInfo::TruncatingFloat64(), 1404 VisitBinop(node, UseInfo::TruncatingFloat64(),
1398 MachineRepresentation::kFloat64); 1405 MachineRepresentation::kFloat64);
1399 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node)); 1406 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node));
1400 return; 1407 return;
1401 } 1408 }
1402 case IrOpcode::kNumberAtan: 1409 case IrOpcode::kNumberAtan:
1403 case IrOpcode::kNumberLog: 1410 case IrOpcode::kNumberLog:
1404 case IrOpcode::kNumberLog1p: { 1411 case IrOpcode::kNumberLog1p: {
1405 VisitUnop(node, UseInfo::TruncatingFloat64(), 1412 VisitUnop(node, UseInfo::TruncatingFloat64(),
1406 MachineRepresentation::kFloat64); 1413 MachineRepresentation::kFloat64);
1407 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node)); 1414 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node));
1408 return; 1415 return;
1409 } 1416 }
1410 case IrOpcode::kNumberRound: { 1417 case IrOpcode::kNumberRound: {
1411 VisitUnop(node, UseInfo::TruncatingFloat64(), 1418 VisitUnop(node, UseInfo::TruncatingFloat64(),
1412 MachineRepresentation::kFloat64); 1419 MachineRepresentation::kFloat64);
1413 if (lower()) DeferReplacement(node, lowering->Float64Round(node)); 1420 if (lower()) DeferReplacement(node, lowering->Float64Round(node));
1414 return; 1421 return;
1415 } 1422 }
1423 case IrOpcode::kNumberSqrt: {
1424 VisitUnop(node, UseInfo::TruncatingFloat64(),
1425 MachineRepresentation::kFloat64);
1426 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node));
1427 return;
1428 }
1416 case IrOpcode::kNumberTrunc: { 1429 case IrOpcode::kNumberTrunc: {
1417 VisitUnop(node, UseInfo::TruncatingFloat64(), 1430 VisitUnop(node, UseInfo::TruncatingFloat64(),
1418 MachineRepresentation::kFloat64); 1431 MachineRepresentation::kFloat64);
1419 if (lower()) DeferReplacement(node, lowering->Float64Trunc(node)); 1432 if (lower()) DeferReplacement(node, lowering->Float64Trunc(node));
1420 return; 1433 return;
1421 } 1434 }
1422 case IrOpcode::kNumberToInt32: { 1435 case IrOpcode::kNumberToInt32: {
1423 // Just change representation if necessary. 1436 // Just change representation if necessary.
1424 VisitUnop(node, UseInfo::TruncatingWord32(), 1437 VisitUnop(node, UseInfo::TruncatingWord32(),
1425 MachineRepresentation::kWord32); 1438 MachineRepresentation::kWord32);
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
1676 access.type, node->InputAt(2)); 1689 access.type, node->InputAt(2));
1677 if (write_barrier_kind < access.write_barrier_kind) { 1690 if (write_barrier_kind < access.write_barrier_kind) {
1678 access.write_barrier_kind = write_barrier_kind; 1691 access.write_barrier_kind = write_barrier_kind;
1679 NodeProperties::ChangeOp( 1692 NodeProperties::ChangeOp(
1680 node, jsgraph_->simplified()->StoreElement(access)); 1693 node, jsgraph_->simplified()->StoreElement(access));
1681 } 1694 }
1682 } 1695 }
1683 return; 1696 return;
1684 } 1697 }
1685 case IrOpcode::kPlainPrimitiveToNumber: 1698 case IrOpcode::kPlainPrimitiveToNumber:
1686 ProcessInput(node, 0, UseInfo::AnyTagged());
1687 if (truncation.TruncatesToWord32()) { 1699 if (truncation.TruncatesToWord32()) {
1688 SetOutput(node, MachineRepresentation::kWord32); 1700 // TODO(jarin): Extend this to Number \/ Oddball
1689 if (lower()) { 1701 if (InputIs(node, Type::NumberOrUndefined())) {
1690 NodeProperties::ChangeOp(node, 1702 VisitUnop(node, UseInfo::TruncatingWord32(),
1691 simplified()->PlainPrimitiveToWord32()); 1703 MachineRepresentation::kWord32);
1704 if (lower()) DeferReplacement(node, node->InputAt(0));
1705 } else {
1706 VisitUnop(node, UseInfo::AnyTagged(),
1707 MachineRepresentation::kWord32);
1708 if (lower()) {
1709 NodeProperties::ChangeOp(node,
1710 simplified()->PlainPrimitiveToWord32());
1711 }
1692 } 1712 }
1693 } else if (truncation.TruncatesToFloat64()) { 1713 } else if (truncation.TruncatesToFloat64()) {
1694 SetOutput(node, MachineRepresentation::kFloat64); 1714 // TODO(jarin): Extend this to Number \/ Oddball
1695 if (lower()) { 1715 if (InputIs(node, Type::NumberOrUndefined())) {
1696 NodeProperties::ChangeOp(node, 1716 VisitUnop(node, UseInfo::TruncatingFloat64(),
1697 simplified()->PlainPrimitiveToFloat64()); 1717 MachineRepresentation::kFloat64);
1718 if (lower()) DeferReplacement(node, node->InputAt(0));
1719 } else {
1720 VisitUnop(node, UseInfo::AnyTagged(),
1721 MachineRepresentation::kFloat64);
1722 if (lower()) {
1723 NodeProperties::ChangeOp(node,
1724 simplified()->PlainPrimitiveToFloat64());
1725 }
1698 } 1726 }
1699 } else { 1727 } else {
1700 SetOutput(node, MachineRepresentation::kTagged); 1728 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
1701 } 1729 }
1702 return; 1730 return;
1703 case IrOpcode::kObjectIsCallable: 1731 case IrOpcode::kObjectIsCallable:
1704 case IrOpcode::kObjectIsNumber: 1732 case IrOpcode::kObjectIsNumber:
1705 case IrOpcode::kObjectIsReceiver: 1733 case IrOpcode::kObjectIsReceiver:
1706 case IrOpcode::kObjectIsSmi: 1734 case IrOpcode::kObjectIsSmi:
1707 case IrOpcode::kObjectIsString: 1735 case IrOpcode::kObjectIsString:
1708 case IrOpcode::kObjectIsUndetectable: { 1736 case IrOpcode::kObjectIsUndetectable: {
1709 ProcessInput(node, 0, UseInfo::AnyTagged()); 1737 ProcessInput(node, 0, UseInfo::AnyTagged());
1710 SetOutput(node, MachineRepresentation::kBit); 1738 SetOutput(node, MachineRepresentation::kBit);
(...skipping 1179 matching lines...) Expand 10 before | Expand all | Expand 10 after
2890 isolate(), graph()->zone(), callable.descriptor(), 0, flags, 2918 isolate(), graph()->zone(), callable.descriptor(), 0, flags,
2891 Operator::kNoProperties); 2919 Operator::kNoProperties);
2892 to_number_operator_.set(common()->Call(desc)); 2920 to_number_operator_.set(common()->Call(desc));
2893 } 2921 }
2894 return to_number_operator_.get(); 2922 return to_number_operator_.get();
2895 } 2923 }
2896 2924
2897 } // namespace compiler 2925 } // namespace compiler
2898 } // namespace internal 2926 } // namespace internal
2899 } // namespace v8 2927 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/representation-change.cc ('k') | src/compiler/simplified-operator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698