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/compiler/instruction-selector.h" | 5 #include "src/compiler/instruction-selector.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "src/base/adapters.h" | 9 #include "src/base/adapters.h" |
10 #include "src/compiler/instruction-selector-impl.h" | 10 #include "src/compiler/instruction-selector-impl.h" |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 | 234 |
235 | 235 |
236 void InstructionSelector::MarkAsUsed(Node* node) { | 236 void InstructionSelector::MarkAsUsed(Node* node) { |
237 DCHECK_NOT_NULL(node); | 237 DCHECK_NOT_NULL(node); |
238 size_t const id = node->id(); | 238 size_t const id = node->id(); |
239 DCHECK_LT(id, used_.size()); | 239 DCHECK_LT(id, used_.size()); |
240 used_[id] = true; | 240 used_[id] = true; |
241 } | 241 } |
242 | 242 |
243 | 243 |
| 244 bool InstructionSelector::IsDouble(const Node* node) const { |
| 245 DCHECK_NOT_NULL(node); |
| 246 int const virtual_register = virtual_registers_[node->id()]; |
| 247 if (virtual_register == InstructionOperand::kInvalidVirtualRegister) { |
| 248 return false; |
| 249 } |
| 250 return sequence()->IsDouble(virtual_register); |
| 251 } |
| 252 |
| 253 |
| 254 void InstructionSelector::MarkAsDouble(Node* node) { |
| 255 DCHECK_NOT_NULL(node); |
| 256 DCHECK(!IsReference(node)); |
| 257 sequence()->MarkAsDouble(GetVirtualRegister(node)); |
| 258 } |
| 259 |
| 260 |
| 261 bool InstructionSelector::IsReference(const Node* node) const { |
| 262 DCHECK_NOT_NULL(node); |
| 263 int const virtual_register = virtual_registers_[node->id()]; |
| 264 if (virtual_register == InstructionOperand::kInvalidVirtualRegister) { |
| 265 return false; |
| 266 } |
| 267 return sequence()->IsReference(virtual_register); |
| 268 } |
| 269 |
| 270 |
| 271 void InstructionSelector::MarkAsReference(Node* node) { |
| 272 DCHECK_NOT_NULL(node); |
| 273 DCHECK(!IsDouble(node)); |
| 274 sequence()->MarkAsReference(GetVirtualRegister(node)); |
| 275 } |
| 276 |
| 277 |
244 void InstructionSelector::MarkAsRepresentation(MachineType rep, | 278 void InstructionSelector::MarkAsRepresentation(MachineType rep, |
245 const InstructionOperand& op) { | 279 const InstructionOperand& op) { |
246 UnallocatedOperand unalloc = UnallocatedOperand::cast(op); | 280 UnallocatedOperand unalloc = UnallocatedOperand::cast(op); |
247 rep = RepresentationOf(rep); | 281 switch (RepresentationOf(rep)) { |
248 sequence()->MarkAsRepresentation(rep, unalloc.virtual_register()); | 282 case kRepFloat32: |
| 283 case kRepFloat64: |
| 284 sequence()->MarkAsDouble(unalloc.virtual_register()); |
| 285 break; |
| 286 case kRepTagged: |
| 287 sequence()->MarkAsReference(unalloc.virtual_register()); |
| 288 break; |
| 289 default: |
| 290 break; |
| 291 } |
249 } | 292 } |
250 | 293 |
251 | 294 |
252 void InstructionSelector::MarkAsRepresentation(MachineType rep, Node* node) { | 295 void InstructionSelector::MarkAsRepresentation(MachineType rep, Node* node) { |
253 rep = RepresentationOf(rep); | 296 DCHECK_NOT_NULL(node); |
254 sequence()->MarkAsRepresentation(rep, GetVirtualRegister(node)); | 297 switch (RepresentationOf(rep)) { |
| 298 case kRepFloat32: |
| 299 case kRepFloat64: |
| 300 MarkAsDouble(node); |
| 301 break; |
| 302 case kRepTagged: |
| 303 MarkAsReference(node); |
| 304 break; |
| 305 default: |
| 306 break; |
| 307 } |
255 } | 308 } |
256 | 309 |
257 | 310 |
258 // TODO(bmeurer): Get rid of the CallBuffer business and make | 311 // TODO(bmeurer): Get rid of the CallBuffer business and make |
259 // InstructionSelector::VisitCall platform independent instead. | 312 // InstructionSelector::VisitCall platform independent instead. |
260 CallBuffer::CallBuffer(Zone* zone, const CallDescriptor* d, | 313 CallBuffer::CallBuffer(Zone* zone, const CallDescriptor* d, |
261 FrameStateDescriptor* frame_desc) | 314 FrameStateDescriptor* frame_desc) |
262 : descriptor(d), | 315 : descriptor(d), |
263 frame_state_descriptor(frame_desc), | 316 frame_state_descriptor(frame_desc), |
264 output_nodes(zone), | 317 output_nodes(zone), |
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
565 MarkAsRepresentation(type, node); | 618 MarkAsRepresentation(type, node); |
566 return VisitPhi(node); | 619 return VisitPhi(node); |
567 } | 620 } |
568 case IrOpcode::kProjection: | 621 case IrOpcode::kProjection: |
569 return VisitProjection(node); | 622 return VisitProjection(node); |
570 case IrOpcode::kInt32Constant: | 623 case IrOpcode::kInt32Constant: |
571 case IrOpcode::kInt64Constant: | 624 case IrOpcode::kInt64Constant: |
572 case IrOpcode::kExternalConstant: | 625 case IrOpcode::kExternalConstant: |
573 return VisitConstant(node); | 626 return VisitConstant(node); |
574 case IrOpcode::kFloat32Constant: | 627 case IrOpcode::kFloat32Constant: |
575 return MarkAsFloat32(node), VisitConstant(node); | 628 return MarkAsDouble(node), VisitConstant(node); |
576 case IrOpcode::kFloat64Constant: | 629 case IrOpcode::kFloat64Constant: |
577 return MarkAsFloat64(node), VisitConstant(node); | 630 return MarkAsDouble(node), VisitConstant(node); |
578 case IrOpcode::kHeapConstant: | 631 case IrOpcode::kHeapConstant: |
579 return MarkAsReference(node), VisitConstant(node); | 632 return MarkAsReference(node), VisitConstant(node); |
580 case IrOpcode::kNumberConstant: { | 633 case IrOpcode::kNumberConstant: { |
581 double value = OpParameter<double>(node); | 634 double value = OpParameter<double>(node); |
582 if (!IsSmiDouble(value)) MarkAsReference(node); | 635 if (!IsSmiDouble(value)) MarkAsReference(node); |
583 return VisitConstant(node); | 636 return VisitConstant(node); |
584 } | 637 } |
585 case IrOpcode::kCall: | 638 case IrOpcode::kCall: |
586 return VisitCall(node, nullptr); | 639 return VisitCall(node, nullptr); |
587 case IrOpcode::kFrameState: | 640 case IrOpcode::kFrameState: |
588 case IrOpcode::kStateValues: | 641 case IrOpcode::kStateValues: |
589 return; | 642 return; |
590 case IrOpcode::kLoad: { | 643 case IrOpcode::kLoad: { |
591 LoadRepresentation rep = OpParameter<LoadRepresentation>(node); | 644 LoadRepresentation rep = OpParameter<LoadRepresentation>(node); |
592 MarkAsRepresentation(rep, node); | 645 MarkAsRepresentation(rep, node); |
593 return VisitLoad(node); | 646 return VisitLoad(node); |
594 } | 647 } |
595 case IrOpcode::kStore: | 648 case IrOpcode::kStore: |
596 return VisitStore(node); | 649 return VisitStore(node); |
597 case IrOpcode::kWord32And: | 650 case IrOpcode::kWord32And: |
598 return MarkAsWord32(node), VisitWord32And(node); | 651 return VisitWord32And(node); |
599 case IrOpcode::kWord32Or: | 652 case IrOpcode::kWord32Or: |
600 return MarkAsWord32(node), VisitWord32Or(node); | 653 return VisitWord32Or(node); |
601 case IrOpcode::kWord32Xor: | 654 case IrOpcode::kWord32Xor: |
602 return MarkAsWord32(node), VisitWord32Xor(node); | 655 return VisitWord32Xor(node); |
603 case IrOpcode::kWord32Shl: | 656 case IrOpcode::kWord32Shl: |
604 return MarkAsWord32(node), VisitWord32Shl(node); | 657 return VisitWord32Shl(node); |
605 case IrOpcode::kWord32Shr: | 658 case IrOpcode::kWord32Shr: |
606 return MarkAsWord32(node), VisitWord32Shr(node); | 659 return VisitWord32Shr(node); |
607 case IrOpcode::kWord32Sar: | 660 case IrOpcode::kWord32Sar: |
608 return MarkAsWord32(node), VisitWord32Sar(node); | 661 return VisitWord32Sar(node); |
609 case IrOpcode::kWord32Ror: | 662 case IrOpcode::kWord32Ror: |
610 return MarkAsWord32(node), VisitWord32Ror(node); | 663 return VisitWord32Ror(node); |
611 case IrOpcode::kWord32Equal: | 664 case IrOpcode::kWord32Equal: |
612 return VisitWord32Equal(node); | 665 return VisitWord32Equal(node); |
613 case IrOpcode::kWord32Clz: | 666 case IrOpcode::kWord32Clz: |
614 return MarkAsWord32(node), VisitWord32Clz(node); | 667 return VisitWord32Clz(node); |
615 case IrOpcode::kWord64And: | 668 case IrOpcode::kWord64And: |
616 return MarkAsWord64(node), VisitWord64And(node); | 669 return VisitWord64And(node); |
617 case IrOpcode::kWord64Or: | 670 case IrOpcode::kWord64Or: |
618 return MarkAsWord64(node), VisitWord64Or(node); | 671 return VisitWord64Or(node); |
619 case IrOpcode::kWord64Xor: | 672 case IrOpcode::kWord64Xor: |
620 return MarkAsWord64(node), VisitWord64Xor(node); | 673 return VisitWord64Xor(node); |
621 case IrOpcode::kWord64Shl: | 674 case IrOpcode::kWord64Shl: |
622 return MarkAsWord64(node), VisitWord64Shl(node); | 675 return VisitWord64Shl(node); |
623 case IrOpcode::kWord64Shr: | 676 case IrOpcode::kWord64Shr: |
624 return MarkAsWord64(node), VisitWord64Shr(node); | 677 return VisitWord64Shr(node); |
625 case IrOpcode::kWord64Sar: | 678 case IrOpcode::kWord64Sar: |
626 return MarkAsWord64(node), VisitWord64Sar(node); | 679 return VisitWord64Sar(node); |
627 case IrOpcode::kWord64Ror: | 680 case IrOpcode::kWord64Ror: |
628 return MarkAsWord64(node), VisitWord64Ror(node); | 681 return VisitWord64Ror(node); |
629 case IrOpcode::kWord64Equal: | 682 case IrOpcode::kWord64Equal: |
630 return VisitWord64Equal(node); | 683 return VisitWord64Equal(node); |
631 case IrOpcode::kInt32Add: | 684 case IrOpcode::kInt32Add: |
632 return MarkAsWord32(node), VisitInt32Add(node); | 685 return VisitInt32Add(node); |
633 case IrOpcode::kInt32AddWithOverflow: | 686 case IrOpcode::kInt32AddWithOverflow: |
634 return MarkAsWord32(node), VisitInt32AddWithOverflow(node); | 687 return VisitInt32AddWithOverflow(node); |
635 case IrOpcode::kInt32Sub: | 688 case IrOpcode::kInt32Sub: |
636 return MarkAsWord32(node), VisitInt32Sub(node); | 689 return VisitInt32Sub(node); |
637 case IrOpcode::kInt32SubWithOverflow: | 690 case IrOpcode::kInt32SubWithOverflow: |
638 return VisitInt32SubWithOverflow(node); | 691 return VisitInt32SubWithOverflow(node); |
639 case IrOpcode::kInt32Mul: | 692 case IrOpcode::kInt32Mul: |
640 return MarkAsWord32(node), VisitInt32Mul(node); | 693 return VisitInt32Mul(node); |
641 case IrOpcode::kInt32MulHigh: | 694 case IrOpcode::kInt32MulHigh: |
642 return VisitInt32MulHigh(node); | 695 return VisitInt32MulHigh(node); |
643 case IrOpcode::kInt32Div: | 696 case IrOpcode::kInt32Div: |
644 return MarkAsWord32(node), VisitInt32Div(node); | 697 return VisitInt32Div(node); |
645 case IrOpcode::kInt32Mod: | 698 case IrOpcode::kInt32Mod: |
646 return MarkAsWord32(node), VisitInt32Mod(node); | 699 return VisitInt32Mod(node); |
647 case IrOpcode::kInt32LessThan: | 700 case IrOpcode::kInt32LessThan: |
648 return VisitInt32LessThan(node); | 701 return VisitInt32LessThan(node); |
649 case IrOpcode::kInt32LessThanOrEqual: | 702 case IrOpcode::kInt32LessThanOrEqual: |
650 return VisitInt32LessThanOrEqual(node); | 703 return VisitInt32LessThanOrEqual(node); |
651 case IrOpcode::kUint32Div: | 704 case IrOpcode::kUint32Div: |
652 return MarkAsWord32(node), VisitUint32Div(node); | 705 return VisitUint32Div(node); |
653 case IrOpcode::kUint32LessThan: | 706 case IrOpcode::kUint32LessThan: |
654 return VisitUint32LessThan(node); | 707 return VisitUint32LessThan(node); |
655 case IrOpcode::kUint32LessThanOrEqual: | 708 case IrOpcode::kUint32LessThanOrEqual: |
656 return VisitUint32LessThanOrEqual(node); | 709 return VisitUint32LessThanOrEqual(node); |
657 case IrOpcode::kUint32Mod: | 710 case IrOpcode::kUint32Mod: |
658 return MarkAsWord32(node), VisitUint32Mod(node); | 711 return VisitUint32Mod(node); |
659 case IrOpcode::kUint32MulHigh: | 712 case IrOpcode::kUint32MulHigh: |
660 return VisitUint32MulHigh(node); | 713 return VisitUint32MulHigh(node); |
661 case IrOpcode::kInt64Add: | 714 case IrOpcode::kInt64Add: |
662 return MarkAsWord64(node), VisitInt64Add(node); | 715 return VisitInt64Add(node); |
663 case IrOpcode::kInt64Sub: | 716 case IrOpcode::kInt64Sub: |
664 return MarkAsWord64(node), VisitInt64Sub(node); | 717 return VisitInt64Sub(node); |
665 case IrOpcode::kInt64Mul: | 718 case IrOpcode::kInt64Mul: |
666 return MarkAsWord64(node), VisitInt64Mul(node); | 719 return VisitInt64Mul(node); |
667 case IrOpcode::kInt64Div: | 720 case IrOpcode::kInt64Div: |
668 return MarkAsWord64(node), VisitInt64Div(node); | 721 return VisitInt64Div(node); |
669 case IrOpcode::kInt64Mod: | 722 case IrOpcode::kInt64Mod: |
670 return MarkAsWord64(node), VisitInt64Mod(node); | 723 return VisitInt64Mod(node); |
671 case IrOpcode::kInt64LessThan: | 724 case IrOpcode::kInt64LessThan: |
672 return VisitInt64LessThan(node); | 725 return VisitInt64LessThan(node); |
673 case IrOpcode::kInt64LessThanOrEqual: | 726 case IrOpcode::kInt64LessThanOrEqual: |
674 return VisitInt64LessThanOrEqual(node); | 727 return VisitInt64LessThanOrEqual(node); |
675 case IrOpcode::kUint64Div: | 728 case IrOpcode::kUint64Div: |
676 return MarkAsWord64(node), VisitUint64Div(node); | 729 return VisitUint64Div(node); |
677 case IrOpcode::kUint64LessThan: | 730 case IrOpcode::kUint64LessThan: |
678 return VisitUint64LessThan(node); | 731 return VisitUint64LessThan(node); |
679 case IrOpcode::kUint64Mod: | 732 case IrOpcode::kUint64Mod: |
680 return MarkAsWord64(node), VisitUint64Mod(node); | 733 return VisitUint64Mod(node); |
681 case IrOpcode::kChangeFloat32ToFloat64: | 734 case IrOpcode::kChangeFloat32ToFloat64: |
682 return MarkAsFloat64(node), VisitChangeFloat32ToFloat64(node); | 735 return MarkAsDouble(node), VisitChangeFloat32ToFloat64(node); |
683 case IrOpcode::kChangeInt32ToFloat64: | 736 case IrOpcode::kChangeInt32ToFloat64: |
684 return MarkAsFloat64(node), VisitChangeInt32ToFloat64(node); | 737 return MarkAsDouble(node), VisitChangeInt32ToFloat64(node); |
685 case IrOpcode::kChangeUint32ToFloat64: | 738 case IrOpcode::kChangeUint32ToFloat64: |
686 return MarkAsFloat64(node), VisitChangeUint32ToFloat64(node); | 739 return MarkAsDouble(node), VisitChangeUint32ToFloat64(node); |
687 case IrOpcode::kChangeFloat64ToInt32: | 740 case IrOpcode::kChangeFloat64ToInt32: |
688 return MarkAsWord32(node), VisitChangeFloat64ToInt32(node); | 741 return VisitChangeFloat64ToInt32(node); |
689 case IrOpcode::kChangeFloat64ToUint32: | 742 case IrOpcode::kChangeFloat64ToUint32: |
690 return MarkAsWord32(node), VisitChangeFloat64ToUint32(node); | 743 return VisitChangeFloat64ToUint32(node); |
691 case IrOpcode::kChangeInt32ToInt64: | 744 case IrOpcode::kChangeInt32ToInt64: |
692 return MarkAsWord64(node), VisitChangeInt32ToInt64(node); | 745 return VisitChangeInt32ToInt64(node); |
693 case IrOpcode::kChangeUint32ToUint64: | 746 case IrOpcode::kChangeUint32ToUint64: |
694 return MarkAsWord64(node), VisitChangeUint32ToUint64(node); | 747 return VisitChangeUint32ToUint64(node); |
695 case IrOpcode::kTruncateFloat64ToFloat32: | 748 case IrOpcode::kTruncateFloat64ToFloat32: |
696 return MarkAsFloat32(node), VisitTruncateFloat64ToFloat32(node); | 749 return MarkAsDouble(node), VisitTruncateFloat64ToFloat32(node); |
697 case IrOpcode::kTruncateFloat64ToInt32: | 750 case IrOpcode::kTruncateFloat64ToInt32: |
698 return MarkAsWord32(node), VisitTruncateFloat64ToInt32(node); | 751 return VisitTruncateFloat64ToInt32(node); |
699 case IrOpcode::kTruncateInt64ToInt32: | 752 case IrOpcode::kTruncateInt64ToInt32: |
700 return MarkAsWord32(node), VisitTruncateInt64ToInt32(node); | 753 return VisitTruncateInt64ToInt32(node); |
701 case IrOpcode::kFloat32Add: | 754 case IrOpcode::kFloat32Add: |
702 return MarkAsFloat32(node), VisitFloat32Add(node); | 755 return MarkAsDouble(node), VisitFloat32Add(node); |
703 case IrOpcode::kFloat32Sub: | 756 case IrOpcode::kFloat32Sub: |
704 return MarkAsFloat32(node), VisitFloat32Sub(node); | 757 return MarkAsDouble(node), VisitFloat32Sub(node); |
705 case IrOpcode::kFloat32Mul: | 758 case IrOpcode::kFloat32Mul: |
706 return MarkAsFloat32(node), VisitFloat32Mul(node); | 759 return MarkAsDouble(node), VisitFloat32Mul(node); |
707 case IrOpcode::kFloat32Div: | 760 case IrOpcode::kFloat32Div: |
708 return MarkAsFloat32(node), VisitFloat32Div(node); | 761 return MarkAsDouble(node), VisitFloat32Div(node); |
709 case IrOpcode::kFloat32Min: | 762 case IrOpcode::kFloat32Min: |
710 return MarkAsFloat32(node), VisitFloat32Min(node); | 763 return MarkAsDouble(node), VisitFloat32Min(node); |
711 case IrOpcode::kFloat32Max: | 764 case IrOpcode::kFloat32Max: |
712 return MarkAsFloat32(node), VisitFloat32Max(node); | 765 return MarkAsDouble(node), VisitFloat32Max(node); |
713 case IrOpcode::kFloat32Abs: | 766 case IrOpcode::kFloat32Abs: |
714 return MarkAsFloat32(node), VisitFloat32Abs(node); | 767 return MarkAsDouble(node), VisitFloat32Abs(node); |
715 case IrOpcode::kFloat32Sqrt: | 768 case IrOpcode::kFloat32Sqrt: |
716 return MarkAsFloat32(node), VisitFloat32Sqrt(node); | 769 return MarkAsDouble(node), VisitFloat32Sqrt(node); |
717 case IrOpcode::kFloat32Equal: | 770 case IrOpcode::kFloat32Equal: |
718 return VisitFloat32Equal(node); | 771 return VisitFloat32Equal(node); |
719 case IrOpcode::kFloat32LessThan: | 772 case IrOpcode::kFloat32LessThan: |
720 return VisitFloat32LessThan(node); | 773 return VisitFloat32LessThan(node); |
721 case IrOpcode::kFloat32LessThanOrEqual: | 774 case IrOpcode::kFloat32LessThanOrEqual: |
722 return VisitFloat32LessThanOrEqual(node); | 775 return VisitFloat32LessThanOrEqual(node); |
723 case IrOpcode::kFloat64Add: | 776 case IrOpcode::kFloat64Add: |
724 return MarkAsFloat64(node), VisitFloat64Add(node); | 777 return MarkAsDouble(node), VisitFloat64Add(node); |
725 case IrOpcode::kFloat64Sub: | 778 case IrOpcode::kFloat64Sub: |
726 return MarkAsFloat64(node), VisitFloat64Sub(node); | 779 return MarkAsDouble(node), VisitFloat64Sub(node); |
727 case IrOpcode::kFloat64Mul: | 780 case IrOpcode::kFloat64Mul: |
728 return MarkAsFloat64(node), VisitFloat64Mul(node); | 781 return MarkAsDouble(node), VisitFloat64Mul(node); |
729 case IrOpcode::kFloat64Div: | 782 case IrOpcode::kFloat64Div: |
730 return MarkAsFloat64(node), VisitFloat64Div(node); | 783 return MarkAsDouble(node), VisitFloat64Div(node); |
731 case IrOpcode::kFloat64Mod: | 784 case IrOpcode::kFloat64Mod: |
732 return MarkAsFloat64(node), VisitFloat64Mod(node); | 785 return MarkAsDouble(node), VisitFloat64Mod(node); |
733 case IrOpcode::kFloat64Min: | 786 case IrOpcode::kFloat64Min: |
734 return MarkAsFloat64(node), VisitFloat64Min(node); | 787 return MarkAsDouble(node), VisitFloat64Min(node); |
735 case IrOpcode::kFloat64Max: | 788 case IrOpcode::kFloat64Max: |
736 return MarkAsFloat64(node), VisitFloat64Max(node); | 789 return MarkAsDouble(node), VisitFloat64Max(node); |
737 case IrOpcode::kFloat64Abs: | 790 case IrOpcode::kFloat64Abs: |
738 return MarkAsFloat64(node), VisitFloat64Abs(node); | 791 return MarkAsDouble(node), VisitFloat64Abs(node); |
739 case IrOpcode::kFloat64Sqrt: | 792 case IrOpcode::kFloat64Sqrt: |
740 return MarkAsFloat64(node), VisitFloat64Sqrt(node); | 793 return MarkAsDouble(node), VisitFloat64Sqrt(node); |
741 case IrOpcode::kFloat64Equal: | 794 case IrOpcode::kFloat64Equal: |
742 return VisitFloat64Equal(node); | 795 return VisitFloat64Equal(node); |
743 case IrOpcode::kFloat64LessThan: | 796 case IrOpcode::kFloat64LessThan: |
744 return VisitFloat64LessThan(node); | 797 return VisitFloat64LessThan(node); |
745 case IrOpcode::kFloat64LessThanOrEqual: | 798 case IrOpcode::kFloat64LessThanOrEqual: |
746 return VisitFloat64LessThanOrEqual(node); | 799 return VisitFloat64LessThanOrEqual(node); |
747 case IrOpcode::kFloat64RoundDown: | 800 case IrOpcode::kFloat64RoundDown: |
748 return MarkAsFloat64(node), VisitFloat64RoundDown(node); | 801 return MarkAsDouble(node), VisitFloat64RoundDown(node); |
749 case IrOpcode::kFloat64RoundTruncate: | 802 case IrOpcode::kFloat64RoundTruncate: |
750 return MarkAsFloat64(node), VisitFloat64RoundTruncate(node); | 803 return MarkAsDouble(node), VisitFloat64RoundTruncate(node); |
751 case IrOpcode::kFloat64RoundTiesAway: | 804 case IrOpcode::kFloat64RoundTiesAway: |
752 return MarkAsFloat64(node), VisitFloat64RoundTiesAway(node); | 805 return MarkAsDouble(node), VisitFloat64RoundTiesAway(node); |
753 case IrOpcode::kFloat64ExtractLowWord32: | 806 case IrOpcode::kFloat64ExtractLowWord32: |
754 return MarkAsWord32(node), VisitFloat64ExtractLowWord32(node); | 807 return VisitFloat64ExtractLowWord32(node); |
755 case IrOpcode::kFloat64ExtractHighWord32: | 808 case IrOpcode::kFloat64ExtractHighWord32: |
756 return MarkAsWord32(node), VisitFloat64ExtractHighWord32(node); | 809 return VisitFloat64ExtractHighWord32(node); |
757 case IrOpcode::kFloat64InsertLowWord32: | 810 case IrOpcode::kFloat64InsertLowWord32: |
758 return MarkAsFloat64(node), VisitFloat64InsertLowWord32(node); | 811 return MarkAsDouble(node), VisitFloat64InsertLowWord32(node); |
759 case IrOpcode::kFloat64InsertHighWord32: | 812 case IrOpcode::kFloat64InsertHighWord32: |
760 return MarkAsFloat64(node), VisitFloat64InsertHighWord32(node); | 813 return MarkAsDouble(node), VisitFloat64InsertHighWord32(node); |
761 case IrOpcode::kLoadStackPointer: | 814 case IrOpcode::kLoadStackPointer: |
762 return VisitLoadStackPointer(node); | 815 return VisitLoadStackPointer(node); |
763 case IrOpcode::kCheckedLoad: { | 816 case IrOpcode::kCheckedLoad: { |
764 MachineType rep = OpParameter<MachineType>(node); | 817 MachineType rep = OpParameter<MachineType>(node); |
765 MarkAsRepresentation(rep, node); | 818 MarkAsRepresentation(rep, node); |
766 return VisitCheckedLoad(node); | 819 return VisitCheckedLoad(node); |
767 } | 820 } |
768 case IrOpcode::kCheckedStore: | 821 case IrOpcode::kCheckedStore: |
769 return VisitCheckedStore(node); | 822 return VisitCheckedStore(node); |
770 default: | 823 default: |
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1139 MachineOperatorBuilder::Flags | 1192 MachineOperatorBuilder::Flags |
1140 InstructionSelector::SupportedMachineOperatorFlags() { | 1193 InstructionSelector::SupportedMachineOperatorFlags() { |
1141 return MachineOperatorBuilder::Flag::kNoFlags; | 1194 return MachineOperatorBuilder::Flag::kNoFlags; |
1142 } | 1195 } |
1143 | 1196 |
1144 #endif // !V8_TURBOFAN_BACKEND | 1197 #endif // !V8_TURBOFAN_BACKEND |
1145 | 1198 |
1146 } // namespace compiler | 1199 } // namespace compiler |
1147 } // namespace internal | 1200 } // namespace internal |
1148 } // namespace v8 | 1201 } // namespace v8 |
OLD | NEW |