OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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-operator.h" | 5 #include "src/compiler/simplified-operator.h" |
6 | 6 |
7 #include "src/base/lazy-instance.h" | 7 #include "src/base/lazy-instance.h" |
8 #include "src/compiler/opcodes.h" | 8 #include "src/compiler/opcodes.h" |
9 #include "src/compiler/operator.h" | 9 #include "src/compiler/operator.h" |
10 #include "src/compiler/types.h" | 10 #include "src/compiler/types.h" |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 UNREACHABLE(); | 206 UNREACHABLE(); |
207 return os; | 207 return os; |
208 } | 208 } |
209 | 209 |
210 CheckFloat64HoleMode CheckFloat64HoleModeOf(const Operator* op) { | 210 CheckFloat64HoleMode CheckFloat64HoleModeOf(const Operator* op) { |
211 DCHECK_EQ(IrOpcode::kCheckFloat64Hole, op->opcode()); | 211 DCHECK_EQ(IrOpcode::kCheckFloat64Hole, op->opcode()); |
212 return OpParameter<CheckFloat64HoleMode>(op); | 212 return OpParameter<CheckFloat64HoleMode>(op); |
213 } | 213 } |
214 | 214 |
215 CheckForMinusZeroMode CheckMinusZeroModeOf(const Operator* op) { | 215 CheckForMinusZeroMode CheckMinusZeroModeOf(const Operator* op) { |
216 DCHECK(op->opcode() == IrOpcode::kCheckedInt32Mul || | 216 DCHECK(op->opcode() == IrOpcode::kChangeFloat64ToTagged || |
| 217 op->opcode() == IrOpcode::kCheckedInt32Mul || |
217 op->opcode() == IrOpcode::kCheckedFloat64ToInt32 || | 218 op->opcode() == IrOpcode::kCheckedFloat64ToInt32 || |
218 op->opcode() == IrOpcode::kCheckedTaggedToInt32); | 219 op->opcode() == IrOpcode::kCheckedTaggedToInt32); |
219 return OpParameter<CheckForMinusZeroMode>(op); | 220 return OpParameter<CheckForMinusZeroMode>(op); |
220 } | 221 } |
221 | 222 |
222 size_t hash_value(CheckForMinusZeroMode mode) { | 223 size_t hash_value(CheckForMinusZeroMode mode) { |
223 return static_cast<size_t>(mode); | 224 return static_cast<size_t>(mode); |
224 } | 225 } |
225 | 226 |
226 std::ostream& operator<<(std::ostream& os, CheckForMinusZeroMode mode) { | 227 std::ostream& operator<<(std::ostream& os, CheckForMinusZeroMode mode) { |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 V(StringFromCharCode, Operator::kNoProperties, 1, 0) \ | 482 V(StringFromCharCode, Operator::kNoProperties, 1, 0) \ |
482 V(StringIndexOf, Operator::kNoProperties, 3, 0) \ | 483 V(StringIndexOf, Operator::kNoProperties, 3, 0) \ |
483 V(PlainPrimitiveToNumber, Operator::kNoProperties, 1, 0) \ | 484 V(PlainPrimitiveToNumber, Operator::kNoProperties, 1, 0) \ |
484 V(PlainPrimitiveToWord32, Operator::kNoProperties, 1, 0) \ | 485 V(PlainPrimitiveToWord32, Operator::kNoProperties, 1, 0) \ |
485 V(PlainPrimitiveToFloat64, Operator::kNoProperties, 1, 0) \ | 486 V(PlainPrimitiveToFloat64, Operator::kNoProperties, 1, 0) \ |
486 V(ChangeTaggedSignedToInt32, Operator::kNoProperties, 1, 0) \ | 487 V(ChangeTaggedSignedToInt32, Operator::kNoProperties, 1, 0) \ |
487 V(ChangeTaggedToInt32, Operator::kNoProperties, 1, 0) \ | 488 V(ChangeTaggedToInt32, Operator::kNoProperties, 1, 0) \ |
488 V(ChangeTaggedToUint32, Operator::kNoProperties, 1, 0) \ | 489 V(ChangeTaggedToUint32, Operator::kNoProperties, 1, 0) \ |
489 V(ChangeTaggedToFloat64, Operator::kNoProperties, 1, 0) \ | 490 V(ChangeTaggedToFloat64, Operator::kNoProperties, 1, 0) \ |
490 V(ChangeTaggedToTaggedSigned, Operator::kNoProperties, 1, 0) \ | 491 V(ChangeTaggedToTaggedSigned, Operator::kNoProperties, 1, 0) \ |
491 V(ChangeFloat64ToTagged, Operator::kNoProperties, 1, 0) \ | |
492 V(ChangeFloat64ToTaggedPointer, Operator::kNoProperties, 1, 0) \ | 492 V(ChangeFloat64ToTaggedPointer, Operator::kNoProperties, 1, 0) \ |
493 V(ChangeInt31ToTaggedSigned, Operator::kNoProperties, 1, 0) \ | 493 V(ChangeInt31ToTaggedSigned, Operator::kNoProperties, 1, 0) \ |
494 V(ChangeInt32ToTagged, Operator::kNoProperties, 1, 0) \ | 494 V(ChangeInt32ToTagged, Operator::kNoProperties, 1, 0) \ |
495 V(ChangeUint32ToTagged, Operator::kNoProperties, 1, 0) \ | 495 V(ChangeUint32ToTagged, Operator::kNoProperties, 1, 0) \ |
496 V(ChangeTaggedToBit, Operator::kNoProperties, 1, 0) \ | 496 V(ChangeTaggedToBit, Operator::kNoProperties, 1, 0) \ |
497 V(ChangeBitToTagged, Operator::kNoProperties, 1, 0) \ | 497 V(ChangeBitToTagged, Operator::kNoProperties, 1, 0) \ |
498 V(TruncateTaggedToBit, Operator::kNoProperties, 1, 0) \ | 498 V(TruncateTaggedToBit, Operator::kNoProperties, 1, 0) \ |
499 V(TruncateTaggedPointerToBit, Operator::kNoProperties, 1, 0) \ | 499 V(TruncateTaggedPointerToBit, Operator::kNoProperties, 1, 0) \ |
500 V(TruncateTaggedToWord32, Operator::kNoProperties, 1, 0) \ | 500 V(TruncateTaggedToWord32, Operator::kNoProperties, 1, 0) \ |
501 V(TruncateTaggedToFloat64, Operator::kNoProperties, 1, 0) \ | 501 V(TruncateTaggedToFloat64, Operator::kNoProperties, 1, 0) \ |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
594 | 594 |
595 struct NewUnmappedArgumentsElementsOperator final : public Operator { | 595 struct NewUnmappedArgumentsElementsOperator final : public Operator { |
596 NewUnmappedArgumentsElementsOperator() | 596 NewUnmappedArgumentsElementsOperator() |
597 : Operator(IrOpcode::kNewUnmappedArgumentsElements, | 597 : Operator(IrOpcode::kNewUnmappedArgumentsElements, |
598 Operator::kEliminatable, "NewUnmappedArgumentsElements", 2, | 598 Operator::kEliminatable, "NewUnmappedArgumentsElements", 2, |
599 1, 0, 1, 1, 0) {} | 599 1, 0, 1, 1, 0) {} |
600 }; | 600 }; |
601 NewUnmappedArgumentsElementsOperator kNewUnmappedArgumentsElements; | 601 NewUnmappedArgumentsElementsOperator kNewUnmappedArgumentsElements; |
602 | 602 |
603 template <CheckForMinusZeroMode kMode> | 603 template <CheckForMinusZeroMode kMode> |
| 604 struct ChangeFloat64ToTaggedOperator final |
| 605 : public Operator1<CheckForMinusZeroMode> { |
| 606 ChangeFloat64ToTaggedOperator() |
| 607 : Operator1<CheckForMinusZeroMode>( |
| 608 IrOpcode::kChangeFloat64ToTagged, Operator::kPure, |
| 609 "ChangeFloat64ToTagged", 1, 0, 0, 1, 0, 0, kMode) {} |
| 610 }; |
| 611 ChangeFloat64ToTaggedOperator<CheckForMinusZeroMode::kCheckForMinusZero> |
| 612 kChangeFloat64ToTaggedCheckForMinusZeroOperator; |
| 613 ChangeFloat64ToTaggedOperator<CheckForMinusZeroMode::kDontCheckForMinusZero> |
| 614 kChangeFloat64ToTaggedDontCheckForMinusZeroOperator; |
| 615 |
| 616 template <CheckForMinusZeroMode kMode> |
604 struct CheckedInt32MulOperator final | 617 struct CheckedInt32MulOperator final |
605 : public Operator1<CheckForMinusZeroMode> { | 618 : public Operator1<CheckForMinusZeroMode> { |
606 CheckedInt32MulOperator() | 619 CheckedInt32MulOperator() |
607 : Operator1<CheckForMinusZeroMode>( | 620 : Operator1<CheckForMinusZeroMode>( |
608 IrOpcode::kCheckedInt32Mul, | 621 IrOpcode::kCheckedInt32Mul, |
609 Operator::kFoldable | Operator::kNoThrow, "CheckedInt32Mul", 2, 1, | 622 Operator::kFoldable | Operator::kNoThrow, "CheckedInt32Mul", 2, 1, |
610 1, 1, 1, 0, kMode) {} | 623 1, 1, 1, 0, kMode) {} |
611 }; | 624 }; |
612 CheckedInt32MulOperator<CheckForMinusZeroMode::kCheckForMinusZero> | 625 CheckedInt32MulOperator<CheckForMinusZeroMode::kCheckForMinusZero> |
613 kCheckedInt32MulCheckForMinusZeroOperator; | 626 kCheckedInt32MulCheckForMinusZeroOperator; |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
750 | 763 |
751 #define GET_FROM_CACHE(Name, ...) \ | 764 #define GET_FROM_CACHE(Name, ...) \ |
752 const Operator* SimplifiedOperatorBuilder::Name() { return &cache_.k##Name; } | 765 const Operator* SimplifiedOperatorBuilder::Name() { return &cache_.k##Name; } |
753 PURE_OP_LIST(GET_FROM_CACHE) | 766 PURE_OP_LIST(GET_FROM_CACHE) |
754 CHECKED_OP_LIST(GET_FROM_CACHE) | 767 CHECKED_OP_LIST(GET_FROM_CACHE) |
755 GET_FROM_CACHE(ArrayBufferWasNeutered) | 768 GET_FROM_CACHE(ArrayBufferWasNeutered) |
756 GET_FROM_CACHE(ArgumentsFrame) | 769 GET_FROM_CACHE(ArgumentsFrame) |
757 GET_FROM_CACHE(NewUnmappedArgumentsElements) | 770 GET_FROM_CACHE(NewUnmappedArgumentsElements) |
758 #undef GET_FROM_CACHE | 771 #undef GET_FROM_CACHE |
759 | 772 |
| 773 const Operator* SimplifiedOperatorBuilder::ChangeFloat64ToTagged( |
| 774 CheckForMinusZeroMode mode) { |
| 775 switch (mode) { |
| 776 case CheckForMinusZeroMode::kCheckForMinusZero: |
| 777 return &cache_.kChangeFloat64ToTaggedCheckForMinusZeroOperator; |
| 778 case CheckForMinusZeroMode::kDontCheckForMinusZero: |
| 779 return &cache_.kChangeFloat64ToTaggedDontCheckForMinusZeroOperator; |
| 780 } |
| 781 UNREACHABLE(); |
| 782 return nullptr; |
| 783 } |
| 784 |
760 const Operator* SimplifiedOperatorBuilder::CheckedInt32Mul( | 785 const Operator* SimplifiedOperatorBuilder::CheckedInt32Mul( |
761 CheckForMinusZeroMode mode) { | 786 CheckForMinusZeroMode mode) { |
762 switch (mode) { | 787 switch (mode) { |
763 case CheckForMinusZeroMode::kCheckForMinusZero: | 788 case CheckForMinusZeroMode::kCheckForMinusZero: |
764 return &cache_.kCheckedInt32MulCheckForMinusZeroOperator; | 789 return &cache_.kCheckedInt32MulCheckForMinusZeroOperator; |
765 case CheckForMinusZeroMode::kDontCheckForMinusZero: | 790 case CheckForMinusZeroMode::kDontCheckForMinusZero: |
766 return &cache_.kCheckedInt32MulDontCheckForMinusZeroOperator; | 791 return &cache_.kCheckedInt32MulDontCheckForMinusZeroOperator; |
767 } | 792 } |
768 UNREACHABLE(); | 793 UNREACHABLE(); |
769 return nullptr; | 794 return nullptr; |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
993 Operator::kNoDeopt | Operator::kNoThrow | properties, \ | 1018 Operator::kNoDeopt | Operator::kNoThrow | properties, \ |
994 #Name, value_input_count, 1, control_input_count, \ | 1019 #Name, value_input_count, 1, control_input_count, \ |
995 output_count, 1, 0, access); \ | 1020 output_count, 1, 0, access); \ |
996 } | 1021 } |
997 ACCESS_OP_LIST(ACCESS) | 1022 ACCESS_OP_LIST(ACCESS) |
998 #undef ACCESS | 1023 #undef ACCESS |
999 | 1024 |
1000 } // namespace compiler | 1025 } // namespace compiler |
1001 } // namespace internal | 1026 } // namespace internal |
1002 } // namespace v8 | 1027 } // namespace v8 |
OLD | NEW |