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