| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/access-builder.h" | 5 #include "src/compiler/access-builder.h" |
| 6 #include "src/compiler/common-operator.h" | 6 #include "src/compiler/common-operator.h" |
| 7 #include "src/compiler/graph.h" | 7 #include "src/compiler/graph.h" |
| 8 #include "src/compiler/graph-visualizer.h" | 8 #include "src/compiler/graph-visualizer.h" |
| 9 #include "src/compiler/js-operator.h" | 9 #include "src/compiler/js-operator.h" |
| 10 #include "src/compiler/node.h" | 10 #include "src/compiler/node.h" |
| (...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 643 Node* ret = graph()->NewNode(common()->Return(), p1, graph()->start(), | 643 Node* ret = graph()->NewNode(common()->Return(), p1, graph()->start(), |
| 644 graph()->start()); | 644 graph()->start()); |
| 645 | 645 |
| 646 graph()->SetEnd(graph()->NewNode(common()->End(), ret)); | 646 graph()->SetEnd(graph()->NewNode(common()->End(), ret)); |
| 647 | 647 |
| 648 USE(Scheduler::ComputeSchedule(zone(), graph(), Scheduler::kNoFlags)); | 648 USE(Scheduler::ComputeSchedule(zone(), graph(), Scheduler::kNoFlags)); |
| 649 } | 649 } |
| 650 | 650 |
| 651 | 651 |
| 652 TEST_F(SchedulerTest, BuildScheduleIfSplit) { | 652 TEST_F(SchedulerTest, BuildScheduleIfSplit) { |
| 653 graph()->SetStart(graph()->NewNode(common()->Start(3))); | 653 graph()->SetStart(graph()->NewNode(common()->Start(5))); |
| 654 | 654 |
| 655 Node* p1 = graph()->NewNode(common()->Parameter(0), graph()->start()); | 655 Node* p1 = graph()->NewNode(common()->Parameter(0), graph()->start()); |
| 656 Node* p2 = graph()->NewNode(common()->Parameter(1), graph()->start()); | 656 Node* p2 = graph()->NewNode(common()->Parameter(1), graph()->start()); |
| 657 Node* p3 = graph()->NewNode(common()->Parameter(2), graph()->start()); | 657 Node* p3 = graph()->NewNode(common()->Parameter(2), graph()->start()); |
| 658 Node* p4 = graph()->NewNode(common()->Parameter(3), graph()->start()); | 658 Node* p4 = graph()->NewNode(common()->Parameter(3), graph()->start()); |
| 659 Node* p5 = graph()->NewNode(common()->Parameter(4), graph()->start()); | 659 Node* p5 = graph()->NewNode(common()->Parameter(4), graph()->start()); |
| 660 Node* cmp = graph()->NewNode(js()->LessThanOrEqual(LanguageMode::SLOPPY), p1, | 660 Node* cmp = graph()->NewNode(js()->LessThanOrEqual(LanguageMode::SLOPPY), p1, |
| 661 p2, p3, graph()->start(), graph()->start()); | 661 p2, p3, p4, graph()->start(), graph()->start()); |
| 662 Node* branch = graph()->NewNode(common()->Branch(), cmp, graph()->start()); | 662 Node* branch = graph()->NewNode(common()->Branch(), cmp, graph()->start()); |
| 663 Node* true_branch = graph()->NewNode(common()->IfTrue(), branch); | 663 Node* true_branch = graph()->NewNode(common()->IfTrue(), branch); |
| 664 Node* false_branch = graph()->NewNode(common()->IfFalse(), branch); | 664 Node* false_branch = graph()->NewNode(common()->IfFalse(), branch); |
| 665 | 665 |
| 666 Node* ret1 = | 666 Node* ret1 = |
| 667 graph()->NewNode(common()->Return(), p4, graph()->start(), true_branch); | 667 graph()->NewNode(common()->Return(), p4, graph()->start(), true_branch); |
| 668 Node* ret2 = | 668 Node* ret2 = |
| 669 graph()->NewNode(common()->Return(), p5, graph()->start(), false_branch); | 669 graph()->NewNode(common()->Return(), p5, graph()->start(), false_branch); |
| 670 Node* merge = graph()->NewNode(common()->Merge(2), ret1, ret2); | 670 Node* merge = graph()->NewNode(common()->Merge(2), ret1, ret2); |
| 671 graph()->SetEnd(graph()->NewNode(common()->End(), merge)); | 671 graph()->SetEnd(graph()->NewNode(common()->End(), merge)); |
| 672 | 672 |
| 673 ComputeAndVerifySchedule(13); | 673 ComputeAndVerifySchedule(13); |
| 674 } | 674 } |
| 675 | 675 |
| 676 | 676 |
| 677 TEST_F(SchedulerTest, BuildScheduleIfSplitWithEffects) { | |
| 678 const Operator* op; | |
| 679 Unique<HeapObject> unique_constant = | |
| 680 Unique<HeapObject>::CreateImmovable(factory()->undefined_value()); | |
| 681 | |
| 682 // Manually transcripted code for: | |
| 683 // function turbo_fan_test(a, b, c, y) { | |
| 684 // if (a < b) { | |
| 685 // return a + b - c * c - a + y; | |
| 686 // } else { | |
| 687 // return c * c - a; | |
| 688 // } | |
| 689 // } | |
| 690 Node* nil = graph()->NewNode(common()->Dead()); | |
| 691 op = common()->End(); | |
| 692 Node* n39 = graph()->NewNode(op, nil); | |
| 693 USE(n39); | |
| 694 op = common()->Merge(2); | |
| 695 Node* n37 = graph()->NewNode(op, nil, nil); | |
| 696 USE(n37); | |
| 697 op = common()->Return(); | |
| 698 Node* n29 = graph()->NewNode(op, nil, nil, nil); | |
| 699 USE(n29); | |
| 700 op = common()->Return(); | |
| 701 Node* n36 = graph()->NewNode(op, nil, nil, nil); | |
| 702 USE(n36); | |
| 703 op = js()->Add(LanguageMode::SLOPPY); | |
| 704 Node* n27 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 705 USE(n27); | |
| 706 op = common()->IfSuccess(); | |
| 707 Node* n28 = graph()->NewNode(op, nil); | |
| 708 USE(n28); | |
| 709 op = js()->Subtract(LanguageMode::SLOPPY); | |
| 710 Node* n34 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 711 USE(n34); | |
| 712 op = common()->IfSuccess(); | |
| 713 Node* n35 = graph()->NewNode(op, nil); | |
| 714 USE(n35); | |
| 715 op = js()->Subtract(LanguageMode::SLOPPY); | |
| 716 Node* n25 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 717 USE(n25); | |
| 718 op = common()->Parameter(4); | |
| 719 Node* n5 = graph()->NewNode(op, nil); | |
| 720 USE(n5); | |
| 721 op = common()->Parameter(5); | |
| 722 Node* n7 = graph()->NewNode(op, nil); | |
| 723 USE(n7); | |
| 724 op = common()->FrameState(JS_FRAME, BailoutId(-1), | |
| 725 OutputFrameStateCombine::Ignore()); | |
| 726 Node* n13 = graph()->NewNode(op, nil, nil, nil, nil, nil); | |
| 727 USE(n13); | |
| 728 op = common()->IfSuccess(); | |
| 729 Node* n26 = graph()->NewNode(op, nil); | |
| 730 USE(n26); | |
| 731 op = js()->Multiply(LanguageMode::SLOPPY); | |
| 732 Node* n32 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 733 USE(n32); | |
| 734 op = common()->Parameter(1); | |
| 735 Node* n2 = graph()->NewNode(op, nil); | |
| 736 USE(n2); | |
| 737 op = common()->IfSuccess(); | |
| 738 Node* n33 = graph()->NewNode(op, nil); | |
| 739 USE(n33); | |
| 740 op = js()->Subtract(LanguageMode::SLOPPY); | |
| 741 Node* n23 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 742 USE(n23); | |
| 743 op = common()->IfSuccess(); | |
| 744 Node* n24 = graph()->NewNode(op, nil); | |
| 745 USE(n24); | |
| 746 op = common()->Start(4); | |
| 747 Node* n0 = graph()->NewNode(op); | |
| 748 USE(n0); | |
| 749 op = common()->StateValues(0); | |
| 750 Node* n11 = graph()->NewNode(op); | |
| 751 USE(n11); | |
| 752 op = common()->NumberConstant(0); | |
| 753 Node* n12 = graph()->NewNode(op); | |
| 754 USE(n12); | |
| 755 op = common()->HeapConstant(unique_constant); | |
| 756 Node* n6 = graph()->NewNode(op); | |
| 757 USE(n6); | |
| 758 op = common()->Parameter(3); | |
| 759 Node* n4 = graph()->NewNode(op, nil); | |
| 760 USE(n4); | |
| 761 op = js()->LessThan(LanguageMode::SLOPPY); | |
| 762 Node* n15 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil); | |
| 763 USE(n15); | |
| 764 op = common()->IfFalse(); | |
| 765 Node* n31 = graph()->NewNode(op, nil); | |
| 766 USE(n31); | |
| 767 op = js()->Add(LanguageMode::SLOPPY); | |
| 768 Node* n19 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 769 USE(n19); | |
| 770 op = js()->Multiply(LanguageMode::SLOPPY); | |
| 771 Node* n21 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 772 USE(n21); | |
| 773 op = common()->IfSuccess(); | |
| 774 Node* n22 = graph()->NewNode(op, nil); | |
| 775 USE(n22); | |
| 776 op = common()->Parameter(2); | |
| 777 Node* n3 = graph()->NewNode(op, nil); | |
| 778 USE(n3); | |
| 779 op = js()->StackCheck(); | |
| 780 Node* n9 = graph()->NewNode(op, nil, nil, nil, nil); | |
| 781 USE(n9); | |
| 782 op = common()->IfSuccess(); | |
| 783 Node* n10 = graph()->NewNode(op, nil); | |
| 784 USE(n10); | |
| 785 op = common()->Branch(); | |
| 786 Node* n17 = graph()->NewNode(op, nil, nil); | |
| 787 USE(n17); | |
| 788 op = common()->IfTrue(); | |
| 789 Node* n18 = graph()->NewNode(op, nil); | |
| 790 USE(n18); | |
| 791 op = common()->IfSuccess(); | |
| 792 Node* n20 = graph()->NewNode(op, nil); | |
| 793 USE(n20); | |
| 794 op = common()->IfSuccess(); | |
| 795 Node* n16 = graph()->NewNode(op, nil); | |
| 796 USE(n16); | |
| 797 n39->ReplaceInput(0, n37); | |
| 798 n37->ReplaceInput(0, n29); | |
| 799 n37->ReplaceInput(1, n36); | |
| 800 n29->ReplaceInput(0, n27); | |
| 801 n29->ReplaceInput(1, n27); | |
| 802 n29->ReplaceInput(2, n28); | |
| 803 n36->ReplaceInput(0, n34); | |
| 804 n36->ReplaceInput(1, n34); | |
| 805 n36->ReplaceInput(2, n35); | |
| 806 n27->ReplaceInput(0, n25); | |
| 807 n27->ReplaceInput(1, n5); | |
| 808 n27->ReplaceInput(2, n7); | |
| 809 n27->ReplaceInput(3, n13); | |
| 810 n27->ReplaceInput(4, n13); | |
| 811 n27->ReplaceInput(5, n25); | |
| 812 n27->ReplaceInput(6, n26); | |
| 813 n28->ReplaceInput(0, n27); | |
| 814 n34->ReplaceInput(0, n32); | |
| 815 n34->ReplaceInput(1, n2); | |
| 816 n34->ReplaceInput(2, n7); | |
| 817 n34->ReplaceInput(3, n13); | |
| 818 n34->ReplaceInput(4, n13); | |
| 819 n34->ReplaceInput(5, n32); | |
| 820 n34->ReplaceInput(6, n33); | |
| 821 n35->ReplaceInput(0, n34); | |
| 822 n25->ReplaceInput(0, n23); | |
| 823 n25->ReplaceInput(1, n2); | |
| 824 n25->ReplaceInput(2, n7); | |
| 825 n25->ReplaceInput(3, n13); | |
| 826 n25->ReplaceInput(4, n13); | |
| 827 n25->ReplaceInput(5, n23); | |
| 828 n25->ReplaceInput(6, n24); | |
| 829 n5->ReplaceInput(0, n0); | |
| 830 n7->ReplaceInput(0, n0); | |
| 831 n13->ReplaceInput(0, n11); | |
| 832 n13->ReplaceInput(1, n11); | |
| 833 n13->ReplaceInput(2, n11); | |
| 834 n13->ReplaceInput(3, n12); | |
| 835 n13->ReplaceInput(4, n6); | |
| 836 n26->ReplaceInput(0, n25); | |
| 837 n32->ReplaceInput(0, n4); | |
| 838 n32->ReplaceInput(1, n4); | |
| 839 n32->ReplaceInput(2, n7); | |
| 840 n32->ReplaceInput(3, n13); | |
| 841 n32->ReplaceInput(4, n13); | |
| 842 n32->ReplaceInput(5, n15); | |
| 843 n32->ReplaceInput(6, n31); | |
| 844 n2->ReplaceInput(0, n0); | |
| 845 n33->ReplaceInput(0, n32); | |
| 846 n23->ReplaceInput(0, n19); | |
| 847 n23->ReplaceInput(1, n21); | |
| 848 n23->ReplaceInput(2, n7); | |
| 849 n23->ReplaceInput(3, n13); | |
| 850 n23->ReplaceInput(4, n13); | |
| 851 n23->ReplaceInput(5, n21); | |
| 852 n23->ReplaceInput(6, n22); | |
| 853 n24->ReplaceInput(0, n23); | |
| 854 n4->ReplaceInput(0, n0); | |
| 855 n15->ReplaceInput(0, n2); | |
| 856 n15->ReplaceInput(1, n3); | |
| 857 n15->ReplaceInput(2, n7); | |
| 858 n15->ReplaceInput(3, n13); | |
| 859 n15->ReplaceInput(4, n9); | |
| 860 n15->ReplaceInput(5, n10); | |
| 861 n31->ReplaceInput(0, n17); | |
| 862 n19->ReplaceInput(0, n2); | |
| 863 n19->ReplaceInput(1, n3); | |
| 864 n19->ReplaceInput(2, n7); | |
| 865 n19->ReplaceInput(3, n13); | |
| 866 n19->ReplaceInput(4, n13); | |
| 867 n19->ReplaceInput(5, n15); | |
| 868 n19->ReplaceInput(6, n18); | |
| 869 n21->ReplaceInput(0, n4); | |
| 870 n21->ReplaceInput(1, n4); | |
| 871 n21->ReplaceInput(2, n7); | |
| 872 n21->ReplaceInput(3, n13); | |
| 873 n21->ReplaceInput(4, n13); | |
| 874 n21->ReplaceInput(5, n19); | |
| 875 n21->ReplaceInput(6, n20); | |
| 876 n22->ReplaceInput(0, n21); | |
| 877 n3->ReplaceInput(0, n0); | |
| 878 n9->ReplaceInput(0, n7); | |
| 879 n9->ReplaceInput(1, n13); | |
| 880 n9->ReplaceInput(2, n0); | |
| 881 n9->ReplaceInput(3, n0); | |
| 882 n10->ReplaceInput(0, n9); | |
| 883 n17->ReplaceInput(0, n15); | |
| 884 n17->ReplaceInput(1, n16); | |
| 885 n18->ReplaceInput(0, n17); | |
| 886 n20->ReplaceInput(0, n19); | |
| 887 n16->ReplaceInput(0, n15); | |
| 888 | |
| 889 graph()->SetStart(n0); | |
| 890 graph()->SetEnd(n39); | |
| 891 | |
| 892 ComputeAndVerifySchedule(34); | |
| 893 } | |
| 894 | |
| 895 | |
| 896 TEST_F(SchedulerTest, BuildScheduleSimpleLoop) { | |
| 897 const Operator* op; | |
| 898 Unique<HeapObject> unique_constant = | |
| 899 Unique<HeapObject>::CreateImmovable(factory()->undefined_value()); | |
| 900 | |
| 901 // Manually transcripted code for: | |
| 902 // function turbo_fan_test(a, b) { | |
| 903 // while (a < b) { | |
| 904 // a++; | |
| 905 // } | |
| 906 // return a; | |
| 907 // } | |
| 908 Node* nil = graph()->NewNode(common()->Dead()); | |
| 909 op = common()->End(); | |
| 910 Node* n34 = graph()->NewNode(op, nil); | |
| 911 USE(n34); | |
| 912 op = common()->Return(); | |
| 913 Node* n32 = graph()->NewNode(op, nil, nil, nil); | |
| 914 USE(n32); | |
| 915 op = common()->Phi(kMachAnyTagged, 2); | |
| 916 Node* n13 = graph()->NewNode(op, nil, nil, nil); | |
| 917 USE(n13); | |
| 918 op = js()->LessThan(LanguageMode::SLOPPY); | |
| 919 Node* n16 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil); | |
| 920 USE(n16); | |
| 921 op = common()->IfFalse(); | |
| 922 Node* n22 = graph()->NewNode(op, nil); | |
| 923 USE(n22); | |
| 924 op = common()->Parameter(1); | |
| 925 Node* n2 = graph()->NewNode(op, nil); | |
| 926 USE(n2); | |
| 927 op = js()->Add(LanguageMode::SLOPPY); | |
| 928 Node* n29 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 929 USE(n29); | |
| 930 op = common()->Loop(2); | |
| 931 Node* n12 = graph()->NewNode(op, nil, nil); | |
| 932 USE(n12); | |
| 933 op = common()->Parameter(2); | |
| 934 Node* n3 = graph()->NewNode(op, nil); | |
| 935 USE(n3); | |
| 936 op = common()->Parameter(3); | |
| 937 Node* n5 = graph()->NewNode(op, nil); | |
| 938 USE(n5); | |
| 939 op = common()->FrameState(JS_FRAME, BailoutId(-1), | |
| 940 OutputFrameStateCombine::Ignore()); | |
| 941 Node* n11 = graph()->NewNode(op, nil, nil, nil, nil, nil); | |
| 942 USE(n11); | |
| 943 op = common()->EffectPhi(2); | |
| 944 Node* n14 = graph()->NewNode(op, nil, nil, nil); | |
| 945 USE(n14); | |
| 946 op = common()->Branch(); | |
| 947 Node* n19 = graph()->NewNode(op, nil, nil); | |
| 948 USE(n19); | |
| 949 op = common()->Start(2); | |
| 950 Node* n0 = graph()->NewNode(op); | |
| 951 USE(n0); | |
| 952 op = js()->ToNumber(); | |
| 953 Node* n26 = graph()->NewNode(op, nil, nil, nil, nil, nil); | |
| 954 USE(n26); | |
| 955 op = common()->NumberConstant(1); | |
| 956 Node* n28 = graph()->NewNode(op); | |
| 957 USE(n28); | |
| 958 op = common()->IfSuccess(); | |
| 959 Node* n27 = graph()->NewNode(op, nil); | |
| 960 USE(n27); | |
| 961 op = common()->IfSuccess(); | |
| 962 Node* n8 = graph()->NewNode(op, nil); | |
| 963 USE(n8); | |
| 964 op = common()->IfSuccess(); | |
| 965 Node* n30 = graph()->NewNode(op, nil); | |
| 966 USE(n30); | |
| 967 op = common()->StateValues(0); | |
| 968 Node* n9 = graph()->NewNode(op); | |
| 969 USE(n9); | |
| 970 op = common()->NumberConstant(0); | |
| 971 Node* n10 = graph()->NewNode(op); | |
| 972 USE(n10); | |
| 973 op = common()->HeapConstant(unique_constant); | |
| 974 Node* n4 = graph()->NewNode(op); | |
| 975 USE(n4); | |
| 976 op = js()->StackCheck(); | |
| 977 Node* n7 = graph()->NewNode(op, nil, nil, nil, nil); | |
| 978 USE(n7); | |
| 979 op = js()->ToBoolean(); | |
| 980 Node* n18 = graph()->NewNode(op, nil, nil); | |
| 981 USE(n18); | |
| 982 op = common()->IfSuccess(); | |
| 983 Node* n17 = graph()->NewNode(op, nil); | |
| 984 USE(n17); | |
| 985 op = js()->StackCheck(); | |
| 986 Node* n24 = graph()->NewNode(op, nil, nil, nil, nil); | |
| 987 USE(n24); | |
| 988 op = common()->IfSuccess(); | |
| 989 Node* n25 = graph()->NewNode(op, nil); | |
| 990 USE(n25); | |
| 991 op = common()->IfTrue(); | |
| 992 Node* n20 = graph()->NewNode(op, nil); | |
| 993 USE(n20); | |
| 994 n34->ReplaceInput(0, n32); | |
| 995 n32->ReplaceInput(0, n13); | |
| 996 n32->ReplaceInput(1, n16); | |
| 997 n32->ReplaceInput(2, n22); | |
| 998 n13->ReplaceInput(0, n2); | |
| 999 n13->ReplaceInput(1, n29); | |
| 1000 n13->ReplaceInput(2, n12); | |
| 1001 n16->ReplaceInput(0, n13); | |
| 1002 n16->ReplaceInput(1, n3); | |
| 1003 n16->ReplaceInput(2, n5); | |
| 1004 n16->ReplaceInput(3, n11); | |
| 1005 n16->ReplaceInput(4, n14); | |
| 1006 n16->ReplaceInput(5, n12); | |
| 1007 n22->ReplaceInput(0, n19); | |
| 1008 n2->ReplaceInput(0, n0); | |
| 1009 n29->ReplaceInput(0, n26); | |
| 1010 n29->ReplaceInput(1, n28); | |
| 1011 n29->ReplaceInput(2, n5); | |
| 1012 n29->ReplaceInput(3, n11); | |
| 1013 n29->ReplaceInput(4, n11); | |
| 1014 n29->ReplaceInput(5, n26); | |
| 1015 n29->ReplaceInput(6, n27); | |
| 1016 n12->ReplaceInput(0, n8); | |
| 1017 n12->ReplaceInput(1, n30); | |
| 1018 n3->ReplaceInput(0, n0); | |
| 1019 n5->ReplaceInput(0, n0); | |
| 1020 n11->ReplaceInput(0, n9); | |
| 1021 n11->ReplaceInput(1, n9); | |
| 1022 n11->ReplaceInput(2, n9); | |
| 1023 n11->ReplaceInput(3, n10); | |
| 1024 n11->ReplaceInput(4, n4); | |
| 1025 n14->ReplaceInput(0, n7); | |
| 1026 n14->ReplaceInput(1, n29); | |
| 1027 n14->ReplaceInput(2, n12); | |
| 1028 n19->ReplaceInput(0, n18); | |
| 1029 n19->ReplaceInput(1, n17); | |
| 1030 n26->ReplaceInput(0, n13); | |
| 1031 n26->ReplaceInput(1, n5); | |
| 1032 n26->ReplaceInput(2, n11); | |
| 1033 n26->ReplaceInput(3, n24); | |
| 1034 n26->ReplaceInput(4, n25); | |
| 1035 n27->ReplaceInput(0, n26); | |
| 1036 n8->ReplaceInput(0, n7); | |
| 1037 n30->ReplaceInput(0, n29); | |
| 1038 n7->ReplaceInput(0, n5); | |
| 1039 n7->ReplaceInput(1, n11); | |
| 1040 n7->ReplaceInput(2, n0); | |
| 1041 n7->ReplaceInput(3, n0); | |
| 1042 n18->ReplaceInput(0, n16); | |
| 1043 n18->ReplaceInput(1, n5); | |
| 1044 n17->ReplaceInput(0, n16); | |
| 1045 n24->ReplaceInput(0, n5); | |
| 1046 n24->ReplaceInput(1, n11); | |
| 1047 n24->ReplaceInput(2, n16); | |
| 1048 n24->ReplaceInput(3, n20); | |
| 1049 n25->ReplaceInput(0, n24); | |
| 1050 n20->ReplaceInput(0, n19); | |
| 1051 | |
| 1052 graph()->SetStart(n0); | |
| 1053 graph()->SetEnd(n34); | |
| 1054 | |
| 1055 ComputeAndVerifySchedule(30); | |
| 1056 } | |
| 1057 | |
| 1058 | |
| 1059 TEST_F(SchedulerTest, BuildScheduleComplexLoops) { | |
| 1060 const Operator* op; | |
| 1061 Unique<HeapObject> unique_constant = | |
| 1062 Unique<HeapObject>::CreateImmovable(factory()->undefined_value()); | |
| 1063 | |
| 1064 // Manually transcripted code for: | |
| 1065 // function turbo_fan_test(a, b, c) { | |
| 1066 // while (a < b) { | |
| 1067 // a++; | |
| 1068 // while (c < b) { | |
| 1069 // c++; | |
| 1070 // } | |
| 1071 // } | |
| 1072 // while (a < b) { | |
| 1073 // a += 2; | |
| 1074 // } | |
| 1075 // return a; | |
| 1076 // } | |
| 1077 Node* nil = graph()->NewNode(common()->Dead()); | |
| 1078 op = common()->End(); | |
| 1079 Node* n71 = graph()->NewNode(op, nil); | |
| 1080 USE(n71); | |
| 1081 op = common()->Return(); | |
| 1082 Node* n69 = graph()->NewNode(op, nil, nil, nil); | |
| 1083 USE(n69); | |
| 1084 op = common()->Phi(kMachAnyTagged, 2); | |
| 1085 Node* n53 = graph()->NewNode(op, nil, nil, nil); | |
| 1086 USE(n53); | |
| 1087 op = js()->LessThan(LanguageMode::SLOPPY); | |
| 1088 Node* n55 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil); | |
| 1089 USE(n55); | |
| 1090 op = common()->IfFalse(); | |
| 1091 Node* n61 = graph()->NewNode(op, nil); | |
| 1092 USE(n61); | |
| 1093 op = common()->Phi(kMachAnyTagged, 2); | |
| 1094 Node* n14 = graph()->NewNode(op, nil, nil, nil); | |
| 1095 USE(n14); | |
| 1096 op = js()->Add(LanguageMode::SLOPPY); | |
| 1097 Node* n66 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 1098 USE(n66); | |
| 1099 op = common()->Loop(2); | |
| 1100 Node* n52 = graph()->NewNode(op, nil, nil); | |
| 1101 USE(n52); | |
| 1102 op = common()->Parameter(2); | |
| 1103 Node* n3 = graph()->NewNode(op, nil); | |
| 1104 USE(n3); | |
| 1105 op = common()->Parameter(4); | |
| 1106 Node* n6 = graph()->NewNode(op, nil); | |
| 1107 USE(n6); | |
| 1108 op = common()->FrameState(JS_FRAME, BailoutId(-1), | |
| 1109 OutputFrameStateCombine::Ignore()); | |
| 1110 Node* n12 = graph()->NewNode(op, nil, nil, nil, nil, nil); | |
| 1111 USE(n12); | |
| 1112 op = common()->EffectPhi(2); | |
| 1113 Node* n54 = graph()->NewNode(op, nil, nil, nil); | |
| 1114 USE(n54); | |
| 1115 op = common()->Branch(); | |
| 1116 Node* n58 = graph()->NewNode(op, nil, nil); | |
| 1117 USE(n58); | |
| 1118 op = common()->Parameter(1); | |
| 1119 Node* n2 = graph()->NewNode(op, nil); | |
| 1120 USE(n2); | |
| 1121 op = js()->Add(LanguageMode::SLOPPY); | |
| 1122 Node* n31 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 1123 USE(n31); | |
| 1124 op = common()->Loop(2); | |
| 1125 Node* n13 = graph()->NewNode(op, nil, nil); | |
| 1126 USE(n13); | |
| 1127 op = common()->NumberConstant(2); | |
| 1128 Node* n65 = graph()->NewNode(op); | |
| 1129 USE(n65); | |
| 1130 op = js()->StackCheck(); | |
| 1131 Node* n63 = graph()->NewNode(op, nil, nil, nil, nil); | |
| 1132 USE(n63); | |
| 1133 op = common()->IfSuccess(); | |
| 1134 Node* n64 = graph()->NewNode(op, nil); | |
| 1135 USE(n64); | |
| 1136 op = common()->IfFalse(); | |
| 1137 Node* n24 = graph()->NewNode(op, nil); | |
| 1138 USE(n24); | |
| 1139 op = common()->IfSuccess(); | |
| 1140 Node* n67 = graph()->NewNode(op, nil); | |
| 1141 USE(n67); | |
| 1142 op = common()->Start(3); | |
| 1143 Node* n0 = graph()->NewNode(op); | |
| 1144 USE(n0); | |
| 1145 op = common()->StateValues(0); | |
| 1146 Node* n10 = graph()->NewNode(op); | |
| 1147 USE(n10); | |
| 1148 op = common()->NumberConstant(0); | |
| 1149 Node* n11 = graph()->NewNode(op); | |
| 1150 USE(n11); | |
| 1151 op = common()->HeapConstant(unique_constant); | |
| 1152 Node* n5 = graph()->NewNode(op); | |
| 1153 USE(n5); | |
| 1154 op = js()->LessThan(LanguageMode::SLOPPY); | |
| 1155 Node* n18 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil); | |
| 1156 USE(n18); | |
| 1157 op = js()->ToBoolean(); | |
| 1158 Node* n57 = graph()->NewNode(op, nil, nil); | |
| 1159 USE(n57); | |
| 1160 op = common()->IfSuccess(); | |
| 1161 Node* n56 = graph()->NewNode(op, nil); | |
| 1162 USE(n56); | |
| 1163 op = js()->ToNumber(); | |
| 1164 Node* n28 = graph()->NewNode(op, nil, nil, nil, nil, nil); | |
| 1165 USE(n28); | |
| 1166 op = common()->NumberConstant(1); | |
| 1167 Node* n30 = graph()->NewNode(op); | |
| 1168 USE(n30); | |
| 1169 op = common()->IfSuccess(); | |
| 1170 Node* n29 = graph()->NewNode(op, nil); | |
| 1171 USE(n29); | |
| 1172 op = common()->IfSuccess(); | |
| 1173 Node* n9 = graph()->NewNode(op, nil); | |
| 1174 USE(n9); | |
| 1175 op = common()->IfFalse(); | |
| 1176 Node* n42 = graph()->NewNode(op, nil); | |
| 1177 USE(n42); | |
| 1178 op = common()->IfTrue(); | |
| 1179 Node* n59 = graph()->NewNode(op, nil); | |
| 1180 USE(n59); | |
| 1181 op = common()->Branch(); | |
| 1182 Node* n21 = graph()->NewNode(op, nil, nil); | |
| 1183 USE(n21); | |
| 1184 op = common()->EffectPhi(2); | |
| 1185 Node* n16 = graph()->NewNode(op, nil, nil, nil); | |
| 1186 USE(n16); | |
| 1187 op = js()->StackCheck(); | |
| 1188 Node* n26 = graph()->NewNode(op, nil, nil, nil, nil); | |
| 1189 USE(n26); | |
| 1190 op = common()->IfSuccess(); | |
| 1191 Node* n27 = graph()->NewNode(op, nil); | |
| 1192 USE(n27); | |
| 1193 op = js()->StackCheck(); | |
| 1194 Node* n8 = graph()->NewNode(op, nil, nil, nil, nil); | |
| 1195 USE(n8); | |
| 1196 op = common()->Branch(); | |
| 1197 Node* n39 = graph()->NewNode(op, nil, nil); | |
| 1198 USE(n39); | |
| 1199 op = js()->ToBoolean(); | |
| 1200 Node* n20 = graph()->NewNode(op, nil, nil); | |
| 1201 USE(n20); | |
| 1202 op = common()->IfSuccess(); | |
| 1203 Node* n19 = graph()->NewNode(op, nil); | |
| 1204 USE(n19); | |
| 1205 op = js()->LessThan(LanguageMode::SLOPPY); | |
| 1206 Node* n36 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil); | |
| 1207 USE(n36); | |
| 1208 op = common()->IfTrue(); | |
| 1209 Node* n22 = graph()->NewNode(op, nil); | |
| 1210 USE(n22); | |
| 1211 op = js()->ToBoolean(); | |
| 1212 Node* n38 = graph()->NewNode(op, nil, nil); | |
| 1213 USE(n38); | |
| 1214 op = common()->IfSuccess(); | |
| 1215 Node* n37 = graph()->NewNode(op, nil); | |
| 1216 USE(n37); | |
| 1217 op = common()->Phi(kMachAnyTagged, 2); | |
| 1218 Node* n34 = graph()->NewNode(op, nil, nil, nil); | |
| 1219 USE(n34); | |
| 1220 op = common()->EffectPhi(2); | |
| 1221 Node* n35 = graph()->NewNode(op, nil, nil, nil); | |
| 1222 USE(n35); | |
| 1223 op = common()->Loop(2); | |
| 1224 Node* n33 = graph()->NewNode(op, nil, nil); | |
| 1225 USE(n33); | |
| 1226 op = common()->Phi(kMachAnyTagged, 2); | |
| 1227 Node* n15 = graph()->NewNode(op, nil, nil, nil); | |
| 1228 USE(n15); | |
| 1229 op = js()->Add(LanguageMode::SLOPPY); | |
| 1230 Node* n48 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 1231 USE(n48); | |
| 1232 op = common()->IfSuccess(); | |
| 1233 Node* n32 = graph()->NewNode(op, nil); | |
| 1234 USE(n32); | |
| 1235 op = common()->IfSuccess(); | |
| 1236 Node* n49 = graph()->NewNode(op, nil); | |
| 1237 USE(n49); | |
| 1238 op = common()->Parameter(3); | |
| 1239 Node* n4 = graph()->NewNode(op, nil); | |
| 1240 USE(n4); | |
| 1241 op = js()->ToNumber(); | |
| 1242 Node* n46 = graph()->NewNode(op, nil, nil, nil, nil, nil); | |
| 1243 USE(n46); | |
| 1244 op = common()->IfSuccess(); | |
| 1245 Node* n47 = graph()->NewNode(op, nil); | |
| 1246 USE(n47); | |
| 1247 op = js()->StackCheck(); | |
| 1248 Node* n44 = graph()->NewNode(op, nil, nil, nil, nil); | |
| 1249 USE(n44); | |
| 1250 op = common()->IfSuccess(); | |
| 1251 Node* n45 = graph()->NewNode(op, nil); | |
| 1252 USE(n45); | |
| 1253 op = common()->IfTrue(); | |
| 1254 Node* n40 = graph()->NewNode(op, nil); | |
| 1255 USE(n40); | |
| 1256 n71->ReplaceInput(0, n69); | |
| 1257 n69->ReplaceInput(0, n53); | |
| 1258 n69->ReplaceInput(1, n55); | |
| 1259 n69->ReplaceInput(2, n61); | |
| 1260 n53->ReplaceInput(0, n14); | |
| 1261 n53->ReplaceInput(1, n66); | |
| 1262 n53->ReplaceInput(2, n52); | |
| 1263 n55->ReplaceInput(0, n53); | |
| 1264 n55->ReplaceInput(1, n3); | |
| 1265 n55->ReplaceInput(2, n6); | |
| 1266 n55->ReplaceInput(3, n12); | |
| 1267 n55->ReplaceInput(4, n54); | |
| 1268 n55->ReplaceInput(5, n52); | |
| 1269 n61->ReplaceInput(0, n58); | |
| 1270 n14->ReplaceInput(0, n2); | |
| 1271 n14->ReplaceInput(1, n31); | |
| 1272 n14->ReplaceInput(2, n13); | |
| 1273 n66->ReplaceInput(0, n53); | |
| 1274 n66->ReplaceInput(1, n65); | |
| 1275 n66->ReplaceInput(2, n6); | |
| 1276 n66->ReplaceInput(3, n12); | |
| 1277 n66->ReplaceInput(4, n12); | |
| 1278 n66->ReplaceInput(5, n63); | |
| 1279 n66->ReplaceInput(6, n64); | |
| 1280 n52->ReplaceInput(0, n24); | |
| 1281 n52->ReplaceInput(1, n67); | |
| 1282 n3->ReplaceInput(0, n0); | |
| 1283 n6->ReplaceInput(0, n0); | |
| 1284 n12->ReplaceInput(0, n10); | |
| 1285 n12->ReplaceInput(1, n10); | |
| 1286 n12->ReplaceInput(2, n10); | |
| 1287 n12->ReplaceInput(3, n11); | |
| 1288 n12->ReplaceInput(4, n5); | |
| 1289 n54->ReplaceInput(0, n18); | |
| 1290 n54->ReplaceInput(1, n66); | |
| 1291 n54->ReplaceInput(2, n52); | |
| 1292 n58->ReplaceInput(0, n57); | |
| 1293 n58->ReplaceInput(1, n56); | |
| 1294 n2->ReplaceInput(0, n0); | |
| 1295 n31->ReplaceInput(0, n28); | |
| 1296 n31->ReplaceInput(1, n30); | |
| 1297 n31->ReplaceInput(2, n6); | |
| 1298 n31->ReplaceInput(3, n12); | |
| 1299 n31->ReplaceInput(4, n12); | |
| 1300 n31->ReplaceInput(5, n28); | |
| 1301 n31->ReplaceInput(6, n29); | |
| 1302 n13->ReplaceInput(0, n9); | |
| 1303 n13->ReplaceInput(1, n42); | |
| 1304 n63->ReplaceInput(0, n6); | |
| 1305 n63->ReplaceInput(1, n12); | |
| 1306 n63->ReplaceInput(2, n55); | |
| 1307 n63->ReplaceInput(3, n59); | |
| 1308 n64->ReplaceInput(0, n63); | |
| 1309 n24->ReplaceInput(0, n21); | |
| 1310 n67->ReplaceInput(0, n66); | |
| 1311 n18->ReplaceInput(0, n14); | |
| 1312 n18->ReplaceInput(1, n3); | |
| 1313 n18->ReplaceInput(2, n6); | |
| 1314 n18->ReplaceInput(3, n12); | |
| 1315 n18->ReplaceInput(4, n16); | |
| 1316 n18->ReplaceInput(5, n13); | |
| 1317 n57->ReplaceInput(0, n55); | |
| 1318 n57->ReplaceInput(1, n6); | |
| 1319 n56->ReplaceInput(0, n55); | |
| 1320 n28->ReplaceInput(0, n14); | |
| 1321 n28->ReplaceInput(1, n6); | |
| 1322 n28->ReplaceInput(2, n12); | |
| 1323 n28->ReplaceInput(3, n26); | |
| 1324 n28->ReplaceInput(4, n27); | |
| 1325 n29->ReplaceInput(0, n28); | |
| 1326 n9->ReplaceInput(0, n8); | |
| 1327 n42->ReplaceInput(0, n39); | |
| 1328 n59->ReplaceInput(0, n58); | |
| 1329 n21->ReplaceInput(0, n20); | |
| 1330 n21->ReplaceInput(1, n19); | |
| 1331 n16->ReplaceInput(0, n8); | |
| 1332 n16->ReplaceInput(1, n36); | |
| 1333 n16->ReplaceInput(2, n13); | |
| 1334 n26->ReplaceInput(0, n6); | |
| 1335 n26->ReplaceInput(1, n12); | |
| 1336 n26->ReplaceInput(2, n18); | |
| 1337 n26->ReplaceInput(3, n22); | |
| 1338 n27->ReplaceInput(0, n26); | |
| 1339 n8->ReplaceInput(0, n6); | |
| 1340 n8->ReplaceInput(1, n12); | |
| 1341 n8->ReplaceInput(2, n0); | |
| 1342 n8->ReplaceInput(3, n0); | |
| 1343 n39->ReplaceInput(0, n38); | |
| 1344 n39->ReplaceInput(1, n37); | |
| 1345 n20->ReplaceInput(0, n18); | |
| 1346 n20->ReplaceInput(1, n6); | |
| 1347 n19->ReplaceInput(0, n18); | |
| 1348 n36->ReplaceInput(0, n34); | |
| 1349 n36->ReplaceInput(1, n3); | |
| 1350 n36->ReplaceInput(2, n6); | |
| 1351 n36->ReplaceInput(3, n12); | |
| 1352 n36->ReplaceInput(4, n35); | |
| 1353 n36->ReplaceInput(5, n33); | |
| 1354 n22->ReplaceInput(0, n21); | |
| 1355 n38->ReplaceInput(0, n36); | |
| 1356 n38->ReplaceInput(1, n6); | |
| 1357 n37->ReplaceInput(0, n36); | |
| 1358 n34->ReplaceInput(0, n15); | |
| 1359 n34->ReplaceInput(1, n48); | |
| 1360 n34->ReplaceInput(2, n33); | |
| 1361 n35->ReplaceInput(0, n31); | |
| 1362 n35->ReplaceInput(1, n48); | |
| 1363 n35->ReplaceInput(2, n33); | |
| 1364 n33->ReplaceInput(0, n32); | |
| 1365 n33->ReplaceInput(1, n49); | |
| 1366 n15->ReplaceInput(0, n4); | |
| 1367 n15->ReplaceInput(1, n34); | |
| 1368 n15->ReplaceInput(2, n13); | |
| 1369 n48->ReplaceInput(0, n46); | |
| 1370 n48->ReplaceInput(1, n30); | |
| 1371 n48->ReplaceInput(2, n6); | |
| 1372 n48->ReplaceInput(3, n12); | |
| 1373 n48->ReplaceInput(4, n12); | |
| 1374 n48->ReplaceInput(5, n46); | |
| 1375 n48->ReplaceInput(6, n47); | |
| 1376 n32->ReplaceInput(0, n31); | |
| 1377 n49->ReplaceInput(0, n48); | |
| 1378 n4->ReplaceInput(0, n0); | |
| 1379 n46->ReplaceInput(0, n34); | |
| 1380 n46->ReplaceInput(1, n6); | |
| 1381 n46->ReplaceInput(2, n12); | |
| 1382 n46->ReplaceInput(3, n44); | |
| 1383 n46->ReplaceInput(4, n45); | |
| 1384 n47->ReplaceInput(0, n46); | |
| 1385 n44->ReplaceInput(0, n6); | |
| 1386 n44->ReplaceInput(1, n12); | |
| 1387 n44->ReplaceInput(2, n36); | |
| 1388 n44->ReplaceInput(3, n40); | |
| 1389 n45->ReplaceInput(0, n44); | |
| 1390 n40->ReplaceInput(0, n39); | |
| 1391 | |
| 1392 graph()->SetStart(n0); | |
| 1393 graph()->SetEnd(n71); | |
| 1394 | |
| 1395 ComputeAndVerifySchedule(65); | |
| 1396 } | |
| 1397 | |
| 1398 | |
| 1399 TEST_F(SchedulerTest, BuildScheduleBreakAndContinue) { | |
| 1400 const Operator* op; | |
| 1401 Unique<HeapObject> unique_constant = | |
| 1402 Unique<HeapObject>::CreateImmovable(factory()->undefined_value()); | |
| 1403 | |
| 1404 // Manually transcripted code for: | |
| 1405 // function turbo_fan_test(a, b, c) { | |
| 1406 // var d = 0; | |
| 1407 // while (a < b) { | |
| 1408 // a++; | |
| 1409 // while (c < b) { | |
| 1410 // c++; | |
| 1411 // if (d == 0) break; | |
| 1412 // a++; | |
| 1413 // } | |
| 1414 // if (a == 1) continue; | |
| 1415 // d++; | |
| 1416 // } | |
| 1417 // return a + d; | |
| 1418 // } | |
| 1419 Node* nil = graph()->NewNode(common()->Dead()); | |
| 1420 op = common()->End(); | |
| 1421 Node* n86 = graph()->NewNode(op, nil); | |
| 1422 USE(n86); | |
| 1423 op = common()->Return(); | |
| 1424 Node* n84 = graph()->NewNode(op, nil, nil, nil); | |
| 1425 USE(n84); | |
| 1426 op = js()->Add(LanguageMode::SLOPPY); | |
| 1427 Node* n82 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 1428 USE(n82); | |
| 1429 op = common()->IfSuccess(); | |
| 1430 Node* n83 = graph()->NewNode(op, nil); | |
| 1431 USE(n83); | |
| 1432 op = common()->Phi(kMachAnyTagged, 2); | |
| 1433 Node* n15 = graph()->NewNode(op, nil, nil, nil); | |
| 1434 USE(n15); | |
| 1435 op = common()->Phi(kMachAnyTagged, 2); | |
| 1436 Node* n17 = graph()->NewNode(op, nil, nil, nil); | |
| 1437 USE(n17); | |
| 1438 op = common()->Parameter(4); | |
| 1439 Node* n6 = graph()->NewNode(op, nil); | |
| 1440 USE(n6); | |
| 1441 op = common()->FrameState(JS_FRAME, BailoutId(-1), | |
| 1442 OutputFrameStateCombine::Ignore()); | |
| 1443 Node* n12 = graph()->NewNode(op, nil, nil, nil, nil, nil); | |
| 1444 USE(n12); | |
| 1445 op = js()->LessThan(LanguageMode::SLOPPY); | |
| 1446 Node* n19 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil); | |
| 1447 USE(n19); | |
| 1448 op = common()->IfFalse(); | |
| 1449 Node* n25 = graph()->NewNode(op, nil); | |
| 1450 USE(n25); | |
| 1451 op = common()->Parameter(1); | |
| 1452 Node* n2 = graph()->NewNode(op, nil); | |
| 1453 USE(n2); | |
| 1454 op = common()->Phi(kMachAnyTagged, 2); | |
| 1455 Node* n35 = graph()->NewNode(op, nil, nil, nil); | |
| 1456 USE(n35); | |
| 1457 op = common()->Loop(2); | |
| 1458 Node* n14 = graph()->NewNode(op, nil, nil); | |
| 1459 USE(n14); | |
| 1460 op = common()->NumberConstant(0); | |
| 1461 Node* n11 = graph()->NewNode(op); | |
| 1462 USE(n11); | |
| 1463 op = common()->Phi(kMachAnyTagged, 2); | |
| 1464 Node* n81 = graph()->NewNode(op, nil, nil, nil); | |
| 1465 USE(n81); | |
| 1466 op = common()->Start(3); | |
| 1467 Node* n0 = graph()->NewNode(op); | |
| 1468 USE(n0); | |
| 1469 op = common()->StateValues(0); | |
| 1470 Node* n10 = graph()->NewNode(op); | |
| 1471 USE(n10); | |
| 1472 op = common()->HeapConstant(unique_constant); | |
| 1473 Node* n5 = graph()->NewNode(op); | |
| 1474 USE(n5); | |
| 1475 op = common()->Parameter(2); | |
| 1476 Node* n3 = graph()->NewNode(op, nil); | |
| 1477 USE(n3); | |
| 1478 op = common()->EffectPhi(2); | |
| 1479 Node* n18 = graph()->NewNode(op, nil, nil, nil); | |
| 1480 USE(n18); | |
| 1481 op = common()->Branch(); | |
| 1482 Node* n22 = graph()->NewNode(op, nil, nil); | |
| 1483 USE(n22); | |
| 1484 op = js()->Add(LanguageMode::SLOPPY); | |
| 1485 Node* n32 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 1486 USE(n32); | |
| 1487 op = js()->Add(LanguageMode::SLOPPY); | |
| 1488 Node* n64 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 1489 USE(n64); | |
| 1490 op = common()->Loop(2); | |
| 1491 Node* n34 = graph()->NewNode(op, nil, nil); | |
| 1492 USE(n34); | |
| 1493 op = common()->IfSuccess(); | |
| 1494 Node* n9 = graph()->NewNode(op, nil); | |
| 1495 USE(n9); | |
| 1496 op = common()->Merge(2); | |
| 1497 Node* n72 = graph()->NewNode(op, nil, nil); | |
| 1498 USE(n72); | |
| 1499 op = js()->Add(LanguageMode::SLOPPY); | |
| 1500 Node* n78 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 1501 USE(n78); | |
| 1502 op = js()->StackCheck(); | |
| 1503 Node* n8 = graph()->NewNode(op, nil, nil, nil, nil); | |
| 1504 USE(n8); | |
| 1505 op = common()->EffectPhi(2); | |
| 1506 Node* n80 = graph()->NewNode(op, nil, nil, nil); | |
| 1507 USE(n80); | |
| 1508 op = js()->ToBoolean(); | |
| 1509 Node* n21 = graph()->NewNode(op, nil, nil); | |
| 1510 USE(n21); | |
| 1511 op = common()->IfSuccess(); | |
| 1512 Node* n20 = graph()->NewNode(op, nil); | |
| 1513 USE(n20); | |
| 1514 op = js()->ToNumber(); | |
| 1515 Node* n29 = graph()->NewNode(op, nil, nil, nil, nil, nil); | |
| 1516 USE(n29); | |
| 1517 op = common()->NumberConstant(1); | |
| 1518 Node* n31 = graph()->NewNode(op); | |
| 1519 USE(n31); | |
| 1520 op = common()->IfSuccess(); | |
| 1521 Node* n30 = graph()->NewNode(op, nil); | |
| 1522 USE(n30); | |
| 1523 op = js()->ToNumber(); | |
| 1524 Node* n62 = graph()->NewNode(op, nil, nil, nil, nil, nil); | |
| 1525 USE(n62); | |
| 1526 op = common()->IfSuccess(); | |
| 1527 Node* n63 = graph()->NewNode(op, nil); | |
| 1528 USE(n63); | |
| 1529 op = common()->IfSuccess(); | |
| 1530 Node* n33 = graph()->NewNode(op, nil); | |
| 1531 USE(n33); | |
| 1532 op = common()->IfSuccess(); | |
| 1533 Node* n65 = graph()->NewNode(op, nil); | |
| 1534 USE(n65); | |
| 1535 op = common()->IfTrue(); | |
| 1536 Node* n71 = graph()->NewNode(op, nil); | |
| 1537 USE(n71); | |
| 1538 op = common()->IfSuccess(); | |
| 1539 Node* n79 = graph()->NewNode(op, nil); | |
| 1540 USE(n79); | |
| 1541 op = js()->ToNumber(); | |
| 1542 Node* n76 = graph()->NewNode(op, nil, nil, nil, nil, nil); | |
| 1543 USE(n76); | |
| 1544 op = common()->IfSuccess(); | |
| 1545 Node* n77 = graph()->NewNode(op, nil); | |
| 1546 USE(n77); | |
| 1547 op = js()->Equal(); | |
| 1548 Node* n67 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil); | |
| 1549 USE(n67); | |
| 1550 op = js()->StackCheck(); | |
| 1551 Node* n27 = graph()->NewNode(op, nil, nil, nil, nil); | |
| 1552 USE(n27); | |
| 1553 op = common()->IfSuccess(); | |
| 1554 Node* n28 = graph()->NewNode(op, nil); | |
| 1555 USE(n28); | |
| 1556 op = js()->Equal(); | |
| 1557 Node* n52 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil); | |
| 1558 USE(n52); | |
| 1559 op = common()->IfFalse(); | |
| 1560 Node* n60 = graph()->NewNode(op, nil); | |
| 1561 USE(n60); | |
| 1562 op = common()->Branch(); | |
| 1563 Node* n70 = graph()->NewNode(op, nil, nil); | |
| 1564 USE(n70); | |
| 1565 op = common()->IfFalse(); | |
| 1566 Node* n74 = graph()->NewNode(op, nil); | |
| 1567 USE(n74); | |
| 1568 op = common()->EffectPhi(2); | |
| 1569 Node* n57 = graph()->NewNode(op, nil, nil, nil); | |
| 1570 USE(n57); | |
| 1571 op = common()->Merge(2); | |
| 1572 Node* n45 = graph()->NewNode(op, nil, nil); | |
| 1573 USE(n45); | |
| 1574 op = common()->IfTrue(); | |
| 1575 Node* n23 = graph()->NewNode(op, nil); | |
| 1576 USE(n23); | |
| 1577 op = js()->Add(LanguageMode::SLOPPY); | |
| 1578 Node* n50 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 1579 USE(n50); | |
| 1580 op = common()->IfSuccess(); | |
| 1581 Node* n51 = graph()->NewNode(op, nil); | |
| 1582 USE(n51); | |
| 1583 op = common()->Branch(); | |
| 1584 Node* n55 = graph()->NewNode(op, nil, nil); | |
| 1585 USE(n55); | |
| 1586 op = js()->ToBoolean(); | |
| 1587 Node* n69 = graph()->NewNode(op, nil, nil); | |
| 1588 USE(n69); | |
| 1589 op = common()->IfSuccess(); | |
| 1590 Node* n68 = graph()->NewNode(op, nil); | |
| 1591 USE(n68); | |
| 1592 op = js()->LessThan(LanguageMode::SLOPPY); | |
| 1593 Node* n38 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil); | |
| 1594 USE(n38); | |
| 1595 op = common()->IfFalse(); | |
| 1596 Node* n44 = graph()->NewNode(op, nil); | |
| 1597 USE(n44); | |
| 1598 op = common()->IfTrue(); | |
| 1599 Node* n56 = graph()->NewNode(op, nil); | |
| 1600 USE(n56); | |
| 1601 op = js()->ToNumber(); | |
| 1602 Node* n48 = graph()->NewNode(op, nil, nil, nil, nil, nil); | |
| 1603 USE(n48); | |
| 1604 op = common()->IfSuccess(); | |
| 1605 Node* n49 = graph()->NewNode(op, nil); | |
| 1606 USE(n49); | |
| 1607 op = js()->ToBoolean(); | |
| 1608 Node* n54 = graph()->NewNode(op, nil, nil); | |
| 1609 USE(n54); | |
| 1610 op = common()->IfSuccess(); | |
| 1611 Node* n53 = graph()->NewNode(op, nil); | |
| 1612 USE(n53); | |
| 1613 op = common()->Phi(kMachAnyTagged, 2); | |
| 1614 Node* n36 = graph()->NewNode(op, nil, nil, nil); | |
| 1615 USE(n36); | |
| 1616 op = common()->EffectPhi(2); | |
| 1617 Node* n37 = graph()->NewNode(op, nil, nil, nil); | |
| 1618 USE(n37); | |
| 1619 op = common()->Branch(); | |
| 1620 Node* n41 = graph()->NewNode(op, nil, nil); | |
| 1621 USE(n41); | |
| 1622 op = js()->StackCheck(); | |
| 1623 Node* n46 = graph()->NewNode(op, nil, nil, nil, nil); | |
| 1624 USE(n46); | |
| 1625 op = common()->IfSuccess(); | |
| 1626 Node* n47 = graph()->NewNode(op, nil); | |
| 1627 USE(n47); | |
| 1628 op = common()->Phi(kMachAnyTagged, 2); | |
| 1629 Node* n16 = graph()->NewNode(op, nil, nil, nil); | |
| 1630 USE(n16); | |
| 1631 op = js()->ToBoolean(); | |
| 1632 Node* n40 = graph()->NewNode(op, nil, nil); | |
| 1633 USE(n40); | |
| 1634 op = common()->IfSuccess(); | |
| 1635 Node* n39 = graph()->NewNode(op, nil); | |
| 1636 USE(n39); | |
| 1637 op = common()->IfTrue(); | |
| 1638 Node* n42 = graph()->NewNode(op, nil); | |
| 1639 USE(n42); | |
| 1640 op = common()->Parameter(3); | |
| 1641 Node* n4 = graph()->NewNode(op, nil); | |
| 1642 USE(n4); | |
| 1643 op = common()->Phi(kMachAnyTagged, 2); | |
| 1644 Node* n58 = graph()->NewNode(op, nil, nil, nil); | |
| 1645 USE(n58); | |
| 1646 n86->ReplaceInput(0, n84); | |
| 1647 n84->ReplaceInput(0, n82); | |
| 1648 n84->ReplaceInput(1, n82); | |
| 1649 n84->ReplaceInput(2, n83); | |
| 1650 n82->ReplaceInput(0, n15); | |
| 1651 n82->ReplaceInput(1, n17); | |
| 1652 n82->ReplaceInput(2, n6); | |
| 1653 n82->ReplaceInput(3, n12); | |
| 1654 n82->ReplaceInput(4, n12); | |
| 1655 n82->ReplaceInput(5, n19); | |
| 1656 n82->ReplaceInput(6, n25); | |
| 1657 n83->ReplaceInput(0, n82); | |
| 1658 n15->ReplaceInput(0, n2); | |
| 1659 n15->ReplaceInput(1, n35); | |
| 1660 n15->ReplaceInput(2, n14); | |
| 1661 n17->ReplaceInput(0, n11); | |
| 1662 n17->ReplaceInput(1, n81); | |
| 1663 n17->ReplaceInput(2, n14); | |
| 1664 n6->ReplaceInput(0, n0); | |
| 1665 n12->ReplaceInput(0, n10); | |
| 1666 n12->ReplaceInput(1, n10); | |
| 1667 n12->ReplaceInput(2, n10); | |
| 1668 n12->ReplaceInput(3, n11); | |
| 1669 n12->ReplaceInput(4, n5); | |
| 1670 n19->ReplaceInput(0, n15); | |
| 1671 n19->ReplaceInput(1, n3); | |
| 1672 n19->ReplaceInput(2, n6); | |
| 1673 n19->ReplaceInput(3, n12); | |
| 1674 n19->ReplaceInput(4, n18); | |
| 1675 n19->ReplaceInput(5, n14); | |
| 1676 n25->ReplaceInput(0, n22); | |
| 1677 n2->ReplaceInput(0, n0); | |
| 1678 n35->ReplaceInput(0, n32); | |
| 1679 n35->ReplaceInput(1, n64); | |
| 1680 n35->ReplaceInput(2, n34); | |
| 1681 n14->ReplaceInput(0, n9); | |
| 1682 n14->ReplaceInput(1, n72); | |
| 1683 n81->ReplaceInput(0, n17); | |
| 1684 n81->ReplaceInput(1, n78); | |
| 1685 n81->ReplaceInput(2, n72); | |
| 1686 n3->ReplaceInput(0, n0); | |
| 1687 n18->ReplaceInput(0, n8); | |
| 1688 n18->ReplaceInput(1, n80); | |
| 1689 n18->ReplaceInput(2, n14); | |
| 1690 n22->ReplaceInput(0, n21); | |
| 1691 n22->ReplaceInput(1, n20); | |
| 1692 n32->ReplaceInput(0, n29); | |
| 1693 n32->ReplaceInput(1, n31); | |
| 1694 n32->ReplaceInput(2, n6); | |
| 1695 n32->ReplaceInput(3, n12); | |
| 1696 n32->ReplaceInput(4, n12); | |
| 1697 n32->ReplaceInput(5, n29); | |
| 1698 n32->ReplaceInput(6, n30); | |
| 1699 n64->ReplaceInput(0, n62); | |
| 1700 n64->ReplaceInput(1, n31); | |
| 1701 n64->ReplaceInput(2, n6); | |
| 1702 n64->ReplaceInput(3, n12); | |
| 1703 n64->ReplaceInput(4, n12); | |
| 1704 n64->ReplaceInput(5, n62); | |
| 1705 n64->ReplaceInput(6, n63); | |
| 1706 n34->ReplaceInput(0, n33); | |
| 1707 n34->ReplaceInput(1, n65); | |
| 1708 n9->ReplaceInput(0, n8); | |
| 1709 n72->ReplaceInput(0, n71); | |
| 1710 n72->ReplaceInput(1, n79); | |
| 1711 n78->ReplaceInput(0, n76); | |
| 1712 n78->ReplaceInput(1, n31); | |
| 1713 n78->ReplaceInput(2, n6); | |
| 1714 n78->ReplaceInput(3, n12); | |
| 1715 n78->ReplaceInput(4, n12); | |
| 1716 n78->ReplaceInput(5, n76); | |
| 1717 n78->ReplaceInput(6, n77); | |
| 1718 n8->ReplaceInput(0, n6); | |
| 1719 n8->ReplaceInput(1, n12); | |
| 1720 n8->ReplaceInput(2, n0); | |
| 1721 n8->ReplaceInput(3, n0); | |
| 1722 n80->ReplaceInput(0, n67); | |
| 1723 n80->ReplaceInput(1, n78); | |
| 1724 n80->ReplaceInput(2, n72); | |
| 1725 n21->ReplaceInput(0, n19); | |
| 1726 n21->ReplaceInput(1, n6); | |
| 1727 n20->ReplaceInput(0, n19); | |
| 1728 n29->ReplaceInput(0, n15); | |
| 1729 n29->ReplaceInput(1, n6); | |
| 1730 n29->ReplaceInput(2, n12); | |
| 1731 n29->ReplaceInput(3, n27); | |
| 1732 n29->ReplaceInput(4, n28); | |
| 1733 n30->ReplaceInput(0, n29); | |
| 1734 n62->ReplaceInput(0, n35); | |
| 1735 n62->ReplaceInput(1, n6); | |
| 1736 n62->ReplaceInput(2, n12); | |
| 1737 n62->ReplaceInput(3, n52); | |
| 1738 n62->ReplaceInput(4, n60); | |
| 1739 n63->ReplaceInput(0, n62); | |
| 1740 n33->ReplaceInput(0, n32); | |
| 1741 n65->ReplaceInput(0, n64); | |
| 1742 n71->ReplaceInput(0, n70); | |
| 1743 n79->ReplaceInput(0, n78); | |
| 1744 n76->ReplaceInput(0, n17); | |
| 1745 n76->ReplaceInput(1, n6); | |
| 1746 n76->ReplaceInput(2, n12); | |
| 1747 n76->ReplaceInput(3, n67); | |
| 1748 n76->ReplaceInput(4, n74); | |
| 1749 n77->ReplaceInput(0, n76); | |
| 1750 n67->ReplaceInput(0, n35); | |
| 1751 n67->ReplaceInput(1, n31); | |
| 1752 n67->ReplaceInput(2, n6); | |
| 1753 n67->ReplaceInput(3, n12); | |
| 1754 n67->ReplaceInput(4, n57); | |
| 1755 n67->ReplaceInput(5, n45); | |
| 1756 n27->ReplaceInput(0, n6); | |
| 1757 n27->ReplaceInput(1, n12); | |
| 1758 n27->ReplaceInput(2, n19); | |
| 1759 n27->ReplaceInput(3, n23); | |
| 1760 n28->ReplaceInput(0, n27); | |
| 1761 n52->ReplaceInput(0, n17); | |
| 1762 n52->ReplaceInput(1, n11); | |
| 1763 n52->ReplaceInput(2, n6); | |
| 1764 n52->ReplaceInput(3, n12); | |
| 1765 n52->ReplaceInput(4, n50); | |
| 1766 n52->ReplaceInput(5, n51); | |
| 1767 n60->ReplaceInput(0, n55); | |
| 1768 n70->ReplaceInput(0, n69); | |
| 1769 n70->ReplaceInput(1, n68); | |
| 1770 n74->ReplaceInput(0, n70); | |
| 1771 n57->ReplaceInput(0, n38); | |
| 1772 n57->ReplaceInput(1, n52); | |
| 1773 n57->ReplaceInput(2, n45); | |
| 1774 n45->ReplaceInput(0, n44); | |
| 1775 n45->ReplaceInput(1, n56); | |
| 1776 n23->ReplaceInput(0, n22); | |
| 1777 n50->ReplaceInput(0, n48); | |
| 1778 n50->ReplaceInput(1, n31); | |
| 1779 n50->ReplaceInput(2, n6); | |
| 1780 n50->ReplaceInput(3, n12); | |
| 1781 n50->ReplaceInput(4, n12); | |
| 1782 n50->ReplaceInput(5, n48); | |
| 1783 n50->ReplaceInput(6, n49); | |
| 1784 n51->ReplaceInput(0, n50); | |
| 1785 n55->ReplaceInput(0, n54); | |
| 1786 n55->ReplaceInput(1, n53); | |
| 1787 n69->ReplaceInput(0, n67); | |
| 1788 n69->ReplaceInput(1, n6); | |
| 1789 n68->ReplaceInput(0, n67); | |
| 1790 n38->ReplaceInput(0, n36); | |
| 1791 n38->ReplaceInput(1, n3); | |
| 1792 n38->ReplaceInput(2, n6); | |
| 1793 n38->ReplaceInput(3, n12); | |
| 1794 n38->ReplaceInput(4, n37); | |
| 1795 n38->ReplaceInput(5, n34); | |
| 1796 n44->ReplaceInput(0, n41); | |
| 1797 n56->ReplaceInput(0, n55); | |
| 1798 n48->ReplaceInput(0, n36); | |
| 1799 n48->ReplaceInput(1, n6); | |
| 1800 n48->ReplaceInput(2, n12); | |
| 1801 n48->ReplaceInput(3, n46); | |
| 1802 n48->ReplaceInput(4, n47); | |
| 1803 n49->ReplaceInput(0, n48); | |
| 1804 n54->ReplaceInput(0, n52); | |
| 1805 n54->ReplaceInput(1, n6); | |
| 1806 n53->ReplaceInput(0, n52); | |
| 1807 n36->ReplaceInput(0, n16); | |
| 1808 n36->ReplaceInput(1, n50); | |
| 1809 n36->ReplaceInput(2, n34); | |
| 1810 n37->ReplaceInput(0, n32); | |
| 1811 n37->ReplaceInput(1, n64); | |
| 1812 n37->ReplaceInput(2, n34); | |
| 1813 n41->ReplaceInput(0, n40); | |
| 1814 n41->ReplaceInput(1, n39); | |
| 1815 n46->ReplaceInput(0, n6); | |
| 1816 n46->ReplaceInput(1, n12); | |
| 1817 n46->ReplaceInput(2, n38); | |
| 1818 n46->ReplaceInput(3, n42); | |
| 1819 n47->ReplaceInput(0, n46); | |
| 1820 n16->ReplaceInput(0, n4); | |
| 1821 n16->ReplaceInput(1, n58); | |
| 1822 n16->ReplaceInput(2, n14); | |
| 1823 n40->ReplaceInput(0, n38); | |
| 1824 n40->ReplaceInput(1, n6); | |
| 1825 n39->ReplaceInput(0, n38); | |
| 1826 n42->ReplaceInput(0, n41); | |
| 1827 n4->ReplaceInput(0, n0); | |
| 1828 n58->ReplaceInput(0, n36); | |
| 1829 n58->ReplaceInput(1, n50); | |
| 1830 n58->ReplaceInput(2, n45); | |
| 1831 | |
| 1832 graph()->SetStart(n0); | |
| 1833 graph()->SetEnd(n86); | |
| 1834 | |
| 1835 ComputeAndVerifySchedule(83); | |
| 1836 } | |
| 1837 | |
| 1838 | |
| 1839 TEST_F(SchedulerTest, BuildScheduleSimpleLoopWithCodeMotion) { | |
| 1840 const Operator* op; | |
| 1841 Unique<HeapObject> unique_constant = | |
| 1842 Unique<HeapObject>::CreateImmovable(factory()->undefined_value()); | |
| 1843 | |
| 1844 // Manually transcripted code for: | |
| 1845 // function turbo_fan_test(a, b, c) { | |
| 1846 // while (a < b) { | |
| 1847 // a += b + c; | |
| 1848 // } | |
| 1849 // return a; | |
| 1850 // } | |
| 1851 Node* nil = graph()->NewNode(common()->Dead()); | |
| 1852 op = common()->End(); | |
| 1853 Node* n34 = graph()->NewNode(op, nil); | |
| 1854 USE(n34); | |
| 1855 op = common()->Return(); | |
| 1856 Node* n32 = graph()->NewNode(op, nil, nil, nil); | |
| 1857 USE(n32); | |
| 1858 op = common()->Phi(kMachAnyTagged, 2); | |
| 1859 Node* n14 = graph()->NewNode(op, nil, nil, nil); | |
| 1860 USE(n14); | |
| 1861 op = js()->LessThan(LanguageMode::SLOPPY); | |
| 1862 Node* n17 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil); | |
| 1863 USE(n17); | |
| 1864 op = common()->IfFalse(); | |
| 1865 Node* n23 = graph()->NewNode(op, nil); | |
| 1866 USE(n23); | |
| 1867 op = common()->Parameter(1); | |
| 1868 Node* n2 = graph()->NewNode(op, nil); | |
| 1869 USE(n2); | |
| 1870 op = js()->Add(LanguageMode::SLOPPY); | |
| 1871 Node* n29 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 1872 USE(n29); | |
| 1873 op = common()->Loop(2); | |
| 1874 Node* n13 = graph()->NewNode(op, nil, nil); | |
| 1875 USE(n13); | |
| 1876 op = common()->Parameter(2); | |
| 1877 Node* n3 = graph()->NewNode(op, nil); | |
| 1878 USE(n3); | |
| 1879 op = common()->Parameter(4); | |
| 1880 Node* n6 = graph()->NewNode(op, nil); | |
| 1881 USE(n6); | |
| 1882 op = common()->FrameState(JS_FRAME, BailoutId(-1), | |
| 1883 OutputFrameStateCombine::Ignore()); | |
| 1884 Node* n12 = graph()->NewNode(op, nil, nil, nil, nil, nil); | |
| 1885 USE(n12); | |
| 1886 op = common()->EffectPhi(2); | |
| 1887 Node* n15 = graph()->NewNode(op, nil, nil, nil); | |
| 1888 USE(n15); | |
| 1889 op = common()->Branch(); | |
| 1890 Node* n20 = graph()->NewNode(op, nil, nil); | |
| 1891 USE(n20); | |
| 1892 op = common()->Start(3); | |
| 1893 Node* n0 = graph()->NewNode(op); | |
| 1894 USE(n0); | |
| 1895 op = js()->Add(LanguageMode::SLOPPY); | |
| 1896 Node* n27 = graph()->NewNode(op, nil, nil, nil, nil, nil, nil, nil); | |
| 1897 USE(n27); | |
| 1898 op = common()->IfSuccess(); | |
| 1899 Node* n28 = graph()->NewNode(op, nil); | |
| 1900 USE(n28); | |
| 1901 op = common()->IfSuccess(); | |
| 1902 Node* n9 = graph()->NewNode(op, nil); | |
| 1903 USE(n9); | |
| 1904 op = common()->IfSuccess(); | |
| 1905 Node* n30 = graph()->NewNode(op, nil); | |
| 1906 USE(n30); | |
| 1907 op = common()->StateValues(0); | |
| 1908 Node* n10 = graph()->NewNode(op); | |
| 1909 USE(n10); | |
| 1910 op = common()->NumberConstant(0); | |
| 1911 Node* n11 = graph()->NewNode(op); | |
| 1912 USE(n11); | |
| 1913 op = common()->HeapConstant(unique_constant); | |
| 1914 Node* n5 = graph()->NewNode(op); | |
| 1915 USE(n5); | |
| 1916 op = js()->StackCheck(); | |
| 1917 Node* n8 = graph()->NewNode(op, nil, nil, nil, nil); | |
| 1918 USE(n8); | |
| 1919 op = js()->ToBoolean(); | |
| 1920 Node* n19 = graph()->NewNode(op, nil, nil); | |
| 1921 USE(n19); | |
| 1922 op = common()->IfSuccess(); | |
| 1923 Node* n18 = graph()->NewNode(op, nil); | |
| 1924 USE(n18); | |
| 1925 op = common()->Parameter(3); | |
| 1926 Node* n4 = graph()->NewNode(op, nil); | |
| 1927 USE(n4); | |
| 1928 op = js()->StackCheck(); | |
| 1929 Node* n25 = graph()->NewNode(op, nil, nil, nil, nil); | |
| 1930 USE(n25); | |
| 1931 op = common()->IfSuccess(); | |
| 1932 Node* n26 = graph()->NewNode(op, nil); | |
| 1933 USE(n26); | |
| 1934 op = common()->IfTrue(); | |
| 1935 Node* n21 = graph()->NewNode(op, nil); | |
| 1936 USE(n21); | |
| 1937 n34->ReplaceInput(0, n32); | |
| 1938 n32->ReplaceInput(0, n14); | |
| 1939 n32->ReplaceInput(1, n17); | |
| 1940 n32->ReplaceInput(2, n23); | |
| 1941 n14->ReplaceInput(0, n2); | |
| 1942 n14->ReplaceInput(1, n29); | |
| 1943 n14->ReplaceInput(2, n13); | |
| 1944 n17->ReplaceInput(0, n14); | |
| 1945 n17->ReplaceInput(1, n3); | |
| 1946 n17->ReplaceInput(2, n6); | |
| 1947 n17->ReplaceInput(3, n12); | |
| 1948 n17->ReplaceInput(4, n15); | |
| 1949 n17->ReplaceInput(5, n13); | |
| 1950 n23->ReplaceInput(0, n20); | |
| 1951 n2->ReplaceInput(0, n0); | |
| 1952 n29->ReplaceInput(0, n14); | |
| 1953 n29->ReplaceInput(1, n27); | |
| 1954 n29->ReplaceInput(2, n6); | |
| 1955 n29->ReplaceInput(3, n12); | |
| 1956 n29->ReplaceInput(4, n12); | |
| 1957 n29->ReplaceInput(5, n27); | |
| 1958 n29->ReplaceInput(6, n28); | |
| 1959 n13->ReplaceInput(0, n9); | |
| 1960 n13->ReplaceInput(1, n30); | |
| 1961 n3->ReplaceInput(0, n0); | |
| 1962 n6->ReplaceInput(0, n0); | |
| 1963 n12->ReplaceInput(0, n10); | |
| 1964 n12->ReplaceInput(1, n10); | |
| 1965 n12->ReplaceInput(2, n10); | |
| 1966 n12->ReplaceInput(3, n11); | |
| 1967 n12->ReplaceInput(4, n5); | |
| 1968 n15->ReplaceInput(0, n8); | |
| 1969 n15->ReplaceInput(1, n29); | |
| 1970 n15->ReplaceInput(2, n13); | |
| 1971 n20->ReplaceInput(0, n19); | |
| 1972 n20->ReplaceInput(1, n18); | |
| 1973 n27->ReplaceInput(0, n3); | |
| 1974 n27->ReplaceInput(1, n4); | |
| 1975 n27->ReplaceInput(2, n6); | |
| 1976 n27->ReplaceInput(3, n12); | |
| 1977 n27->ReplaceInput(4, n12); | |
| 1978 n27->ReplaceInput(5, n25); | |
| 1979 n27->ReplaceInput(6, n26); | |
| 1980 n28->ReplaceInput(0, n27); | |
| 1981 n9->ReplaceInput(0, n8); | |
| 1982 n30->ReplaceInput(0, n29); | |
| 1983 n8->ReplaceInput(0, n6); | |
| 1984 n8->ReplaceInput(1, n12); | |
| 1985 n8->ReplaceInput(2, n0); | |
| 1986 n8->ReplaceInput(3, n0); | |
| 1987 n19->ReplaceInput(0, n17); | |
| 1988 n19->ReplaceInput(1, n6); | |
| 1989 n18->ReplaceInput(0, n17); | |
| 1990 n4->ReplaceInput(0, n0); | |
| 1991 n25->ReplaceInput(0, n6); | |
| 1992 n25->ReplaceInput(1, n12); | |
| 1993 n25->ReplaceInput(2, n17); | |
| 1994 n25->ReplaceInput(3, n21); | |
| 1995 n26->ReplaceInput(0, n25); | |
| 1996 n21->ReplaceInput(0, n20); | |
| 1997 | |
| 1998 graph()->SetStart(n0); | |
| 1999 graph()->SetEnd(n34); | |
| 2000 | |
| 2001 ComputeAndVerifySchedule(30); | |
| 2002 } | |
| 2003 | |
| 2004 | |
| 2005 namespace { | 677 namespace { |
| 2006 | 678 |
| 2007 Node* CreateDiamond(Graph* graph, CommonOperatorBuilder* common, Node* cond) { | 679 Node* CreateDiamond(Graph* graph, CommonOperatorBuilder* common, Node* cond) { |
| 2008 Node* tv = graph->NewNode(common->Int32Constant(6)); | 680 Node* tv = graph->NewNode(common->Int32Constant(6)); |
| 2009 Node* fv = graph->NewNode(common->Int32Constant(7)); | 681 Node* fv = graph->NewNode(common->Int32Constant(7)); |
| 2010 Node* br = graph->NewNode(common->Branch(), cond, graph->start()); | 682 Node* br = graph->NewNode(common->Branch(), cond, graph->start()); |
| 2011 Node* t = graph->NewNode(common->IfTrue(), br); | 683 Node* t = graph->NewNode(common->IfTrue(), br); |
| 2012 Node* f = graph->NewNode(common->IfFalse(), br); | 684 Node* f = graph->NewNode(common->IfFalse(), br); |
| 2013 Node* m = graph->NewNode(common->Merge(2), t, f); | 685 Node* m = graph->NewNode(common->Merge(2), t, f); |
| 2014 Node* phi = graph->NewNode(common->Phi(kMachAnyTagged, 2), tv, fv, m); | 686 Node* phi = graph->NewNode(common->Phi(kMachAnyTagged, 2), tv, fv, m); |
| (...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2486 | 1158 |
| 2487 Schedule* schedule = ComputeAndVerifySchedule(6); | 1159 Schedule* schedule = ComputeAndVerifySchedule(6); |
| 2488 BasicBlock* block = schedule->block(loop); | 1160 BasicBlock* block = schedule->block(loop); |
| 2489 EXPECT_EQ(block, schedule->block(effect)); | 1161 EXPECT_EQ(block, schedule->block(effect)); |
| 2490 EXPECT_GE(block->rpo_number(), 0); | 1162 EXPECT_GE(block->rpo_number(), 0); |
| 2491 } | 1163 } |
| 2492 | 1164 |
| 2493 } // namespace compiler | 1165 } // namespace compiler |
| 2494 } // namespace internal | 1166 } // namespace internal |
| 2495 } // namespace v8 | 1167 } // namespace v8 |
| OLD | NEW |