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

Side by Side Diff: test/unittests/compiler/scheduler-unittest.cc

Issue 1513543003: [turbofan] Make MachineType a pair of enums. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Moar rebase Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 640 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 651
652 namespace { 652 namespace {
653 653
654 Node* CreateDiamond(Graph* graph, CommonOperatorBuilder* common, Node* cond) { 654 Node* CreateDiamond(Graph* graph, CommonOperatorBuilder* common, Node* cond) {
655 Node* tv = graph->NewNode(common->Int32Constant(6)); 655 Node* tv = graph->NewNode(common->Int32Constant(6));
656 Node* fv = graph->NewNode(common->Int32Constant(7)); 656 Node* fv = graph->NewNode(common->Int32Constant(7));
657 Node* br = graph->NewNode(common->Branch(), cond, graph->start()); 657 Node* br = graph->NewNode(common->Branch(), cond, graph->start());
658 Node* t = graph->NewNode(common->IfTrue(), br); 658 Node* t = graph->NewNode(common->IfTrue(), br);
659 Node* f = graph->NewNode(common->IfFalse(), br); 659 Node* f = graph->NewNode(common->IfFalse(), br);
660 Node* m = graph->NewNode(common->Merge(2), t, f); 660 Node* m = graph->NewNode(common->Merge(2), t, f);
661 Node* phi = graph->NewNode(common->Phi(kMachAnyTagged, 2), tv, fv, m); 661 Node* phi =
662 graph->NewNode(common->Phi(MachineRepresentation::kTagged, 2), tv, fv, m);
662 return phi; 663 return phi;
663 } 664 }
664 665
665 } // namespace 666 } // namespace
666 667
667 668
668 TARGET_TEST_F(SchedulerTest, FloatingDiamond1) { 669 TARGET_TEST_F(SchedulerTest, FloatingDiamond1) {
669 Node* start = graph()->NewNode(common()->Start(1)); 670 Node* start = graph()->NewNode(common()->Start(1));
670 graph()->SetStart(start); 671 graph()->SetStart(start);
671 672
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
730 731
731 Node* map = graph()->NewNode( 732 Node* map = graph()->NewNode(
732 simplified()->LoadElement(AccessBuilder::ForFixedArrayElement()), p0, p0, 733 simplified()->LoadElement(AccessBuilder::ForFixedArrayElement()), p0, p0,
733 start, f); 734 start, f);
734 Node* br1 = graph()->NewNode(common()->Branch(), map, graph()->start()); 735 Node* br1 = graph()->NewNode(common()->Branch(), map, graph()->start());
735 Node* t1 = graph()->NewNode(common()->IfTrue(), br1); 736 Node* t1 = graph()->NewNode(common()->IfTrue(), br1);
736 Node* f1 = graph()->NewNode(common()->IfFalse(), br1); 737 Node* f1 = graph()->NewNode(common()->IfFalse(), br1);
737 Node* m1 = graph()->NewNode(common()->Merge(2), t1, f1); 738 Node* m1 = graph()->NewNode(common()->Merge(2), t1, f1);
738 Node* ttrue = graph()->NewNode(common()->Int32Constant(1)); 739 Node* ttrue = graph()->NewNode(common()->Int32Constant(1));
739 Node* ffalse = graph()->NewNode(common()->Int32Constant(0)); 740 Node* ffalse = graph()->NewNode(common()->Int32Constant(0));
740 Node* phi1 = 741 Node* phi1 = graph()->NewNode(
741 graph()->NewNode(common()->Phi(kMachAnyTagged, 2), ttrue, ffalse, m1); 742 common()->Phi(MachineRepresentation::kTagged, 2), ttrue, ffalse, m1);
742 743
743 744
744 Node* m = graph()->NewNode(common()->Merge(2), t, f); 745 Node* m = graph()->NewNode(common()->Merge(2), t, f);
745 Node* phi = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), fv, phi1, m); 746 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
747 fv, phi1, m);
746 Node* ephi1 = graph()->NewNode(common()->EffectPhi(2), start, map, m); 748 Node* ephi1 = graph()->NewNode(common()->EffectPhi(2), start, map, m);
747 749
748 Node* ret = graph()->NewNode(common()->Return(), phi, ephi1, start); 750 Node* ret = graph()->NewNode(common()->Return(), phi, ephi1, start);
749 Node* end = graph()->NewNode(common()->End(1), ret); 751 Node* end = graph()->NewNode(common()->End(1), ret);
750 752
751 graph()->SetEnd(end); 753 graph()->SetEnd(end);
752 754
753 ComputeAndVerifySchedule(23); 755 ComputeAndVerifySchedule(23);
754 } 756 }
755 757
756 758
757 TARGET_TEST_F(SchedulerTest, NestedFloatingDiamondWithChain) { 759 TARGET_TEST_F(SchedulerTest, NestedFloatingDiamondWithChain) {
758 Node* start = graph()->NewNode(common()->Start(2)); 760 Node* start = graph()->NewNode(common()->Start(2));
759 graph()->SetStart(start); 761 graph()->SetStart(start);
760 762
761 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 763 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
762 Node* p1 = graph()->NewNode(common()->Parameter(1), start); 764 Node* p1 = graph()->NewNode(common()->Parameter(1), start);
763 Node* c = graph()->NewNode(common()->Int32Constant(7)); 765 Node* c = graph()->NewNode(common()->Int32Constant(7));
764 766
765 Node* brA1 = graph()->NewNode(common()->Branch(), p0, graph()->start()); 767 Node* brA1 = graph()->NewNode(common()->Branch(), p0, graph()->start());
766 Node* tA1 = graph()->NewNode(common()->IfTrue(), brA1); 768 Node* tA1 = graph()->NewNode(common()->IfTrue(), brA1);
767 Node* fA1 = graph()->NewNode(common()->IfFalse(), brA1); 769 Node* fA1 = graph()->NewNode(common()->IfFalse(), brA1);
768 Node* mA1 = graph()->NewNode(common()->Merge(2), tA1, fA1); 770 Node* mA1 = graph()->NewNode(common()->Merge(2), tA1, fA1);
769 Node* phiA1 = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), p0, p1, mA1); 771 Node* phiA1 = graph()->NewNode(
772 common()->Phi(MachineRepresentation::kTagged, 2), p0, p1, mA1);
770 773
771 Node* brB1 = graph()->NewNode(common()->Branch(), p1, graph()->start()); 774 Node* brB1 = graph()->NewNode(common()->Branch(), p1, graph()->start());
772 Node* tB1 = graph()->NewNode(common()->IfTrue(), brB1); 775 Node* tB1 = graph()->NewNode(common()->IfTrue(), brB1);
773 Node* fB1 = graph()->NewNode(common()->IfFalse(), brB1); 776 Node* fB1 = graph()->NewNode(common()->IfFalse(), brB1);
774 Node* mB1 = graph()->NewNode(common()->Merge(2), tB1, fB1); 777 Node* mB1 = graph()->NewNode(common()->Merge(2), tB1, fB1);
775 Node* phiB1 = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), p0, p1, mB1); 778 Node* phiB1 = graph()->NewNode(
779 common()->Phi(MachineRepresentation::kTagged, 2), p0, p1, mB1);
776 780
777 Node* brA2 = graph()->NewNode(common()->Branch(), phiB1, mA1); 781 Node* brA2 = graph()->NewNode(common()->Branch(), phiB1, mA1);
778 Node* tA2 = graph()->NewNode(common()->IfTrue(), brA2); 782 Node* tA2 = graph()->NewNode(common()->IfTrue(), brA2);
779 Node* fA2 = graph()->NewNode(common()->IfFalse(), brA2); 783 Node* fA2 = graph()->NewNode(common()->IfFalse(), brA2);
780 Node* mA2 = graph()->NewNode(common()->Merge(2), tA2, fA2); 784 Node* mA2 = graph()->NewNode(common()->Merge(2), tA2, fA2);
781 Node* phiA2 = 785 Node* phiA2 = graph()->NewNode(
782 graph()->NewNode(common()->Phi(kMachAnyTagged, 2), phiB1, c, mA2); 786 common()->Phi(MachineRepresentation::kTagged, 2), phiB1, c, mA2);
783 787
784 Node* brB2 = graph()->NewNode(common()->Branch(), phiA1, mB1); 788 Node* brB2 = graph()->NewNode(common()->Branch(), phiA1, mB1);
785 Node* tB2 = graph()->NewNode(common()->IfTrue(), brB2); 789 Node* tB2 = graph()->NewNode(common()->IfTrue(), brB2);
786 Node* fB2 = graph()->NewNode(common()->IfFalse(), brB2); 790 Node* fB2 = graph()->NewNode(common()->IfFalse(), brB2);
787 Node* mB2 = graph()->NewNode(common()->Merge(2), tB2, fB2); 791 Node* mB2 = graph()->NewNode(common()->Merge(2), tB2, fB2);
788 Node* phiB2 = 792 Node* phiB2 = graph()->NewNode(
789 graph()->NewNode(common()->Phi(kMachAnyTagged, 2), phiA1, c, mB2); 793 common()->Phi(MachineRepresentation::kTagged, 2), phiA1, c, mB2);
790 794
791 Node* add = graph()->NewNode(&kIntAdd, phiA2, phiB2); 795 Node* add = graph()->NewNode(&kIntAdd, phiA2, phiB2);
792 Node* ret = graph()->NewNode(common()->Return(), add, start, start); 796 Node* ret = graph()->NewNode(common()->Return(), add, start, start);
793 Node* end = graph()->NewNode(common()->End(1), ret); 797 Node* end = graph()->NewNode(common()->End(1), ret);
794 798
795 graph()->SetEnd(end); 799 graph()->SetEnd(end);
796 800
797 ComputeAndVerifySchedule(36); 801 ComputeAndVerifySchedule(36);
798 } 802 }
799 803
800 804
801 TARGET_TEST_F(SchedulerTest, NestedFloatingDiamondWithLoop) { 805 TARGET_TEST_F(SchedulerTest, NestedFloatingDiamondWithLoop) {
802 Node* start = graph()->NewNode(common()->Start(2)); 806 Node* start = graph()->NewNode(common()->Start(2));
803 graph()->SetStart(start); 807 graph()->SetStart(start);
804 808
805 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 809 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
806 810
807 Node* fv = graph()->NewNode(common()->Int32Constant(7)); 811 Node* fv = graph()->NewNode(common()->Int32Constant(7));
808 Node* br = graph()->NewNode(common()->Branch(), p0, graph()->start()); 812 Node* br = graph()->NewNode(common()->Branch(), p0, graph()->start());
809 Node* t = graph()->NewNode(common()->IfTrue(), br); 813 Node* t = graph()->NewNode(common()->IfTrue(), br);
810 Node* f = graph()->NewNode(common()->IfFalse(), br); 814 Node* f = graph()->NewNode(common()->IfFalse(), br);
811 815
812 Node* loop = graph()->NewNode(common()->Loop(2), f, start); 816 Node* loop = graph()->NewNode(common()->Loop(2), f, start);
813 Node* ind = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), p0, p0, loop); 817 Node* ind = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
818 p0, p0, loop);
814 819
815 Node* add = graph()->NewNode(&kIntAdd, ind, fv); 820 Node* add = graph()->NewNode(&kIntAdd, ind, fv);
816 Node* br1 = graph()->NewNode(common()->Branch(), add, loop); 821 Node* br1 = graph()->NewNode(common()->Branch(), add, loop);
817 Node* t1 = graph()->NewNode(common()->IfTrue(), br1); 822 Node* t1 = graph()->NewNode(common()->IfTrue(), br1);
818 Node* f1 = graph()->NewNode(common()->IfFalse(), br1); 823 Node* f1 = graph()->NewNode(common()->IfFalse(), br1);
819 824
820 loop->ReplaceInput(1, t1); // close loop. 825 loop->ReplaceInput(1, t1); // close loop.
821 ind->ReplaceInput(1, ind); // close induction variable. 826 ind->ReplaceInput(1, ind); // close induction variable.
822 827
823 Node* m = graph()->NewNode(common()->Merge(2), t, f1); 828 Node* m = graph()->NewNode(common()->Merge(2), t, f1);
824 Node* phi = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), fv, ind, m); 829 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
830 fv, ind, m);
825 831
826 Node* ret = graph()->NewNode(common()->Return(), phi, start, start); 832 Node* ret = graph()->NewNode(common()->Return(), phi, start, start);
827 Node* end = graph()->NewNode(common()->End(1), ret); 833 Node* end = graph()->NewNode(common()->End(1), ret);
828 834
829 graph()->SetEnd(end); 835 graph()->SetEnd(end);
830 836
831 ComputeAndVerifySchedule(20); 837 ComputeAndVerifySchedule(20);
832 } 838 }
833 839
834 840
835 TARGET_TEST_F(SchedulerTest, LoopedFloatingDiamond1) { 841 TARGET_TEST_F(SchedulerTest, LoopedFloatingDiamond1) {
836 Node* start = graph()->NewNode(common()->Start(2)); 842 Node* start = graph()->NewNode(common()->Start(2));
837 graph()->SetStart(start); 843 graph()->SetStart(start);
838 844
839 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 845 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
840 846
841 Node* c = graph()->NewNode(common()->Int32Constant(7)); 847 Node* c = graph()->NewNode(common()->Int32Constant(7));
842 Node* loop = graph()->NewNode(common()->Loop(2), start, start); 848 Node* loop = graph()->NewNode(common()->Loop(2), start, start);
843 Node* ind = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), p0, p0, loop); 849 Node* ind = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
850 p0, p0, loop);
844 Node* add = graph()->NewNode(&kIntAdd, ind, c); 851 Node* add = graph()->NewNode(&kIntAdd, ind, c);
845 852
846 Node* br = graph()->NewNode(common()->Branch(), add, loop); 853 Node* br = graph()->NewNode(common()->Branch(), add, loop);
847 Node* t = graph()->NewNode(common()->IfTrue(), br); 854 Node* t = graph()->NewNode(common()->IfTrue(), br);
848 Node* f = graph()->NewNode(common()->IfFalse(), br); 855 Node* f = graph()->NewNode(common()->IfFalse(), br);
849 856
850 Node* br1 = graph()->NewNode(common()->Branch(), p0, graph()->start()); 857 Node* br1 = graph()->NewNode(common()->Branch(), p0, graph()->start());
851 Node* t1 = graph()->NewNode(common()->IfTrue(), br1); 858 Node* t1 = graph()->NewNode(common()->IfTrue(), br1);
852 Node* f1 = graph()->NewNode(common()->IfFalse(), br1); 859 Node* f1 = graph()->NewNode(common()->IfFalse(), br1);
853 Node* m1 = graph()->NewNode(common()->Merge(2), t1, f1); 860 Node* m1 = graph()->NewNode(common()->Merge(2), t1, f1);
854 Node* phi1 = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), add, p0, m1); 861 Node* phi1 = graph()->NewNode(
862 common()->Phi(MachineRepresentation::kTagged, 2), add, p0, m1);
855 863
856 loop->ReplaceInput(1, t); // close loop. 864 loop->ReplaceInput(1, t); // close loop.
857 ind->ReplaceInput(1, phi1); // close induction variable. 865 ind->ReplaceInput(1, phi1); // close induction variable.
858 866
859 Node* ret = graph()->NewNode(common()->Return(), ind, start, f); 867 Node* ret = graph()->NewNode(common()->Return(), ind, start, f);
860 Node* end = graph()->NewNode(common()->End(2), ret, f); 868 Node* end = graph()->NewNode(common()->End(2), ret, f);
861 869
862 graph()->SetEnd(end); 870 graph()->SetEnd(end);
863 871
864 ComputeAndVerifySchedule(20); 872 ComputeAndVerifySchedule(20);
865 } 873 }
866 874
867 875
868 TARGET_TEST_F(SchedulerTest, LoopedFloatingDiamond2) { 876 TARGET_TEST_F(SchedulerTest, LoopedFloatingDiamond2) {
869 Node* start = graph()->NewNode(common()->Start(2)); 877 Node* start = graph()->NewNode(common()->Start(2));
870 graph()->SetStart(start); 878 graph()->SetStart(start);
871 879
872 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 880 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
873 881
874 Node* c = graph()->NewNode(common()->Int32Constant(7)); 882 Node* c = graph()->NewNode(common()->Int32Constant(7));
875 Node* loop = graph()->NewNode(common()->Loop(2), start, start); 883 Node* loop = graph()->NewNode(common()->Loop(2), start, start);
876 Node* ind = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), p0, p0, loop); 884 Node* ind = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
885 p0, p0, loop);
877 886
878 Node* br1 = graph()->NewNode(common()->Branch(), p0, graph()->start()); 887 Node* br1 = graph()->NewNode(common()->Branch(), p0, graph()->start());
879 Node* t1 = graph()->NewNode(common()->IfTrue(), br1); 888 Node* t1 = graph()->NewNode(common()->IfTrue(), br1);
880 Node* f1 = graph()->NewNode(common()->IfFalse(), br1); 889 Node* f1 = graph()->NewNode(common()->IfFalse(), br1);
881 Node* m1 = graph()->NewNode(common()->Merge(2), t1, f1); 890 Node* m1 = graph()->NewNode(common()->Merge(2), t1, f1);
882 Node* phi1 = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), c, ind, m1); 891 Node* phi1 = graph()->NewNode(
892 common()->Phi(MachineRepresentation::kTagged, 2), c, ind, m1);
883 893
884 Node* add = graph()->NewNode(&kIntAdd, ind, phi1); 894 Node* add = graph()->NewNode(&kIntAdd, ind, phi1);
885 895
886 Node* br = graph()->NewNode(common()->Branch(), add, loop); 896 Node* br = graph()->NewNode(common()->Branch(), add, loop);
887 Node* t = graph()->NewNode(common()->IfTrue(), br); 897 Node* t = graph()->NewNode(common()->IfTrue(), br);
888 Node* f = graph()->NewNode(common()->IfFalse(), br); 898 Node* f = graph()->NewNode(common()->IfFalse(), br);
889 899
890 loop->ReplaceInput(1, t); // close loop. 900 loop->ReplaceInput(1, t); // close loop.
891 ind->ReplaceInput(1, add); // close induction variable. 901 ind->ReplaceInput(1, add); // close induction variable.
892 902
893 Node* ret = graph()->NewNode(common()->Return(), ind, start, f); 903 Node* ret = graph()->NewNode(common()->Return(), ind, start, f);
894 Node* end = graph()->NewNode(common()->End(2), ret, f); 904 Node* end = graph()->NewNode(common()->End(2), ret, f);
895 905
896 graph()->SetEnd(end); 906 graph()->SetEnd(end);
897 907
898 ComputeAndVerifySchedule(20); 908 ComputeAndVerifySchedule(20);
899 } 909 }
900 910
901 911
902 TARGET_TEST_F(SchedulerTest, LoopedFloatingDiamond3) { 912 TARGET_TEST_F(SchedulerTest, LoopedFloatingDiamond3) {
903 Node* start = graph()->NewNode(common()->Start(2)); 913 Node* start = graph()->NewNode(common()->Start(2));
904 graph()->SetStart(start); 914 graph()->SetStart(start);
905 915
906 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 916 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
907 917
908 Node* c = graph()->NewNode(common()->Int32Constant(7)); 918 Node* c = graph()->NewNode(common()->Int32Constant(7));
909 Node* loop = graph()->NewNode(common()->Loop(2), start, start); 919 Node* loop = graph()->NewNode(common()->Loop(2), start, start);
910 Node* ind = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), p0, p0, loop); 920 Node* ind = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
921 p0, p0, loop);
911 922
912 Node* br1 = graph()->NewNode(common()->Branch(), p0, graph()->start()); 923 Node* br1 = graph()->NewNode(common()->Branch(), p0, graph()->start());
913 Node* t1 = graph()->NewNode(common()->IfTrue(), br1); 924 Node* t1 = graph()->NewNode(common()->IfTrue(), br1);
914 Node* f1 = graph()->NewNode(common()->IfFalse(), br1); 925 Node* f1 = graph()->NewNode(common()->IfFalse(), br1);
915 926
916 Node* loop1 = graph()->NewNode(common()->Loop(2), t1, start); 927 Node* loop1 = graph()->NewNode(common()->Loop(2), t1, start);
917 Node* ind1 = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), p0, p0, loop); 928 Node* ind1 = graph()->NewNode(
929 common()->Phi(MachineRepresentation::kTagged, 2), p0, p0, loop);
918 930
919 Node* add1 = graph()->NewNode(&kIntAdd, ind1, c); 931 Node* add1 = graph()->NewNode(&kIntAdd, ind1, c);
920 Node* br2 = graph()->NewNode(common()->Branch(), add1, loop1); 932 Node* br2 = graph()->NewNode(common()->Branch(), add1, loop1);
921 Node* t2 = graph()->NewNode(common()->IfTrue(), br2); 933 Node* t2 = graph()->NewNode(common()->IfTrue(), br2);
922 Node* f2 = graph()->NewNode(common()->IfFalse(), br2); 934 Node* f2 = graph()->NewNode(common()->IfFalse(), br2);
923 935
924 loop1->ReplaceInput(1, t2); // close inner loop. 936 loop1->ReplaceInput(1, t2); // close inner loop.
925 ind1->ReplaceInput(1, ind1); // close inner induction variable. 937 ind1->ReplaceInput(1, ind1); // close inner induction variable.
926 938
927 Node* m1 = graph()->NewNode(common()->Merge(2), f1, f2); 939 Node* m1 = graph()->NewNode(common()->Merge(2), f1, f2);
928 Node* phi1 = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), c, ind1, m1); 940 Node* phi1 = graph()->NewNode(
941 common()->Phi(MachineRepresentation::kTagged, 2), c, ind1, m1);
929 942
930 Node* add = graph()->NewNode(&kIntAdd, ind, phi1); 943 Node* add = graph()->NewNode(&kIntAdd, ind, phi1);
931 944
932 Node* br = graph()->NewNode(common()->Branch(), add, loop); 945 Node* br = graph()->NewNode(common()->Branch(), add, loop);
933 Node* t = graph()->NewNode(common()->IfTrue(), br); 946 Node* t = graph()->NewNode(common()->IfTrue(), br);
934 Node* f = graph()->NewNode(common()->IfFalse(), br); 947 Node* f = graph()->NewNode(common()->IfFalse(), br);
935 948
936 loop->ReplaceInput(1, t); // close loop. 949 loop->ReplaceInput(1, t); // close loop.
937 ind->ReplaceInput(1, add); // close induction variable. 950 ind->ReplaceInput(1, add); // close induction variable.
938 951
(...skipping 14 matching lines...) Expand all
953 Node* p1 = graph()->NewNode(common()->Parameter(1), start); 966 Node* p1 = graph()->NewNode(common()->Parameter(1), start);
954 967
955 Node* v1 = graph()->NewNode(common()->Int32Constant(1)); 968 Node* v1 = graph()->NewNode(common()->Int32Constant(1));
956 Node* v2 = graph()->NewNode(common()->Int32Constant(2)); 969 Node* v2 = graph()->NewNode(common()->Int32Constant(2));
957 Node* v3 = graph()->NewNode(common()->Int32Constant(3)); 970 Node* v3 = graph()->NewNode(common()->Int32Constant(3));
958 Node* v4 = graph()->NewNode(common()->Int32Constant(4)); 971 Node* v4 = graph()->NewNode(common()->Int32Constant(4));
959 Node* br = graph()->NewNode(common()->Branch(), p0, graph()->start()); 972 Node* br = graph()->NewNode(common()->Branch(), p0, graph()->start());
960 Node* t = graph()->NewNode(common()->IfTrue(), br); 973 Node* t = graph()->NewNode(common()->IfTrue(), br);
961 Node* f = graph()->NewNode(common()->IfFalse(), br); 974 Node* f = graph()->NewNode(common()->IfFalse(), br);
962 Node* m = graph()->NewNode(common()->Merge(2), t, f); 975 Node* m = graph()->NewNode(common()->Merge(2), t, f);
963 Node* phi = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), v1, v2, m); 976 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
964 Node* phi2 = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), v3, v4, m); 977 v1, v2, m);
978 Node* phi2 = graph()->NewNode(
979 common()->Phi(MachineRepresentation::kTagged, 2), v3, v4, m);
965 980
966 Node* br2 = graph()->NewNode(common()->Branch(), p1, graph()->start()); 981 Node* br2 = graph()->NewNode(common()->Branch(), p1, graph()->start());
967 Node* t2 = graph()->NewNode(common()->IfTrue(), br2); 982 Node* t2 = graph()->NewNode(common()->IfTrue(), br2);
968 Node* f2 = graph()->NewNode(common()->IfFalse(), br2); 983 Node* f2 = graph()->NewNode(common()->IfFalse(), br2);
969 Node* m2 = graph()->NewNode(common()->Merge(2), t2, f2); 984 Node* m2 = graph()->NewNode(common()->Merge(2), t2, f2);
970 Node* phi3 = 985 Node* phi3 = graph()->NewNode(
971 graph()->NewNode(common()->Phi(kMachAnyTagged, 2), phi, phi2, m2); 986 common()->Phi(MachineRepresentation::kTagged, 2), phi, phi2, m2);
972 987
973 Node* ret = graph()->NewNode(common()->Return(), phi3, start, start); 988 Node* ret = graph()->NewNode(common()->Return(), phi3, start, start);
974 Node* end = graph()->NewNode(common()->End(1), ret); 989 Node* end = graph()->NewNode(common()->End(1), ret);
975 990
976 graph()->SetEnd(end); 991 graph()->SetEnd(end);
977 992
978 ComputeAndVerifySchedule(24); 993 ComputeAndVerifySchedule(24);
979 } 994 }
980 995
981 996
982 TARGET_TEST_F(SchedulerTest, BranchHintTrue) { 997 TARGET_TEST_F(SchedulerTest, BranchHintTrue) {
983 Node* start = graph()->NewNode(common()->Start(1)); 998 Node* start = graph()->NewNode(common()->Start(1));
984 graph()->SetStart(start); 999 graph()->SetStart(start);
985 1000
986 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 1001 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
987 Node* tv = graph()->NewNode(common()->Int32Constant(6)); 1002 Node* tv = graph()->NewNode(common()->Int32Constant(6));
988 Node* fv = graph()->NewNode(common()->Int32Constant(7)); 1003 Node* fv = graph()->NewNode(common()->Int32Constant(7));
989 Node* br = graph()->NewNode(common()->Branch(BranchHint::kTrue), p0, start); 1004 Node* br = graph()->NewNode(common()->Branch(BranchHint::kTrue), p0, start);
990 Node* t = graph()->NewNode(common()->IfTrue(), br); 1005 Node* t = graph()->NewNode(common()->IfTrue(), br);
991 Node* f = graph()->NewNode(common()->IfFalse(), br); 1006 Node* f = graph()->NewNode(common()->IfFalse(), br);
992 Node* m = graph()->NewNode(common()->Merge(2), t, f); 1007 Node* m = graph()->NewNode(common()->Merge(2), t, f);
993 Node* phi = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), tv, fv, m); 1008 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
1009 tv, fv, m);
994 Node* ret = graph()->NewNode(common()->Return(), phi, start, start); 1010 Node* ret = graph()->NewNode(common()->Return(), phi, start, start);
995 Node* end = graph()->NewNode(common()->End(1), ret); 1011 Node* end = graph()->NewNode(common()->End(1), ret);
996 1012
997 graph()->SetEnd(end); 1013 graph()->SetEnd(end);
998 1014
999 Schedule* schedule = ComputeAndVerifySchedule(13); 1015 Schedule* schedule = ComputeAndVerifySchedule(13);
1000 // Make sure the false block is marked as deferred. 1016 // Make sure the false block is marked as deferred.
1001 EXPECT_FALSE(schedule->block(t)->deferred()); 1017 EXPECT_FALSE(schedule->block(t)->deferred());
1002 EXPECT_TRUE(schedule->block(f)->deferred()); 1018 EXPECT_TRUE(schedule->block(f)->deferred());
1003 } 1019 }
1004 1020
1005 1021
1006 TARGET_TEST_F(SchedulerTest, BranchHintFalse) { 1022 TARGET_TEST_F(SchedulerTest, BranchHintFalse) {
1007 Node* start = graph()->NewNode(common()->Start(1)); 1023 Node* start = graph()->NewNode(common()->Start(1));
1008 graph()->SetStart(start); 1024 graph()->SetStart(start);
1009 1025
1010 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 1026 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
1011 Node* tv = graph()->NewNode(common()->Int32Constant(6)); 1027 Node* tv = graph()->NewNode(common()->Int32Constant(6));
1012 Node* fv = graph()->NewNode(common()->Int32Constant(7)); 1028 Node* fv = graph()->NewNode(common()->Int32Constant(7));
1013 Node* br = graph()->NewNode(common()->Branch(BranchHint::kFalse), p0, start); 1029 Node* br = graph()->NewNode(common()->Branch(BranchHint::kFalse), p0, start);
1014 Node* t = graph()->NewNode(common()->IfTrue(), br); 1030 Node* t = graph()->NewNode(common()->IfTrue(), br);
1015 Node* f = graph()->NewNode(common()->IfFalse(), br); 1031 Node* f = graph()->NewNode(common()->IfFalse(), br);
1016 Node* m = graph()->NewNode(common()->Merge(2), t, f); 1032 Node* m = graph()->NewNode(common()->Merge(2), t, f);
1017 Node* phi = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), tv, fv, m); 1033 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
1034 tv, fv, m);
1018 Node* ret = graph()->NewNode(common()->Return(), phi, start, start); 1035 Node* ret = graph()->NewNode(common()->Return(), phi, start, start);
1019 Node* end = graph()->NewNode(common()->End(1), ret); 1036 Node* end = graph()->NewNode(common()->End(1), ret);
1020 1037
1021 graph()->SetEnd(end); 1038 graph()->SetEnd(end);
1022 1039
1023 Schedule* schedule = ComputeAndVerifySchedule(13); 1040 Schedule* schedule = ComputeAndVerifySchedule(13);
1024 // Make sure the true block is marked as deferred. 1041 // Make sure the true block is marked as deferred.
1025 EXPECT_TRUE(schedule->block(t)->deferred()); 1042 EXPECT_TRUE(schedule->block(t)->deferred());
1026 EXPECT_FALSE(schedule->block(f)->deferred()); 1043 EXPECT_FALSE(schedule->block(f)->deferred());
1027 } 1044 }
1028 1045
1029 1046
1030 TARGET_TEST_F(SchedulerTest, CallException) { 1047 TARGET_TEST_F(SchedulerTest, CallException) {
1031 Node* start = graph()->NewNode(common()->Start(1)); 1048 Node* start = graph()->NewNode(common()->Start(1));
1032 graph()->SetStart(start); 1049 graph()->SetStart(start);
1033 1050
1034 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 1051 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
1035 Node* c1 = graph()->NewNode(&kMockCall, start); 1052 Node* c1 = graph()->NewNode(&kMockCall, start);
1036 Node* ok1 = graph()->NewNode(common()->IfSuccess(), c1); 1053 Node* ok1 = graph()->NewNode(common()->IfSuccess(), c1);
1037 Node* ex1 = graph()->NewNode( 1054 Node* ex1 = graph()->NewNode(
1038 common()->IfException(IfExceptionHint::kLocallyUncaught), c1, c1); 1055 common()->IfException(IfExceptionHint::kLocallyUncaught), c1, c1);
1039 Node* c2 = graph()->NewNode(&kMockCall, ok1); 1056 Node* c2 = graph()->NewNode(&kMockCall, ok1);
1040 Node* ok2 = graph()->NewNode(common()->IfSuccess(), c2); 1057 Node* ok2 = graph()->NewNode(common()->IfSuccess(), c2);
1041 Node* ex2 = graph()->NewNode( 1058 Node* ex2 = graph()->NewNode(
1042 common()->IfException(IfExceptionHint::kLocallyUncaught), c2, c2); 1059 common()->IfException(IfExceptionHint::kLocallyUncaught), c2, c2);
1043 Node* hdl = graph()->NewNode(common()->Merge(2), ex1, ex2); 1060 Node* hdl = graph()->NewNode(common()->Merge(2), ex1, ex2);
1044 Node* m = graph()->NewNode(common()->Merge(2), ok2, hdl); 1061 Node* m = graph()->NewNode(common()->Merge(2), ok2, hdl);
1045 Node* phi = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), c2, p0, m); 1062 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
1063 c2, p0, m);
1046 Node* ret = graph()->NewNode(common()->Return(), phi, start, m); 1064 Node* ret = graph()->NewNode(common()->Return(), phi, start, m);
1047 Node* end = graph()->NewNode(common()->End(1), ret); 1065 Node* end = graph()->NewNode(common()->End(1), ret);
1048 1066
1049 graph()->SetEnd(end); 1067 graph()->SetEnd(end);
1050 1068
1051 Schedule* schedule = ComputeAndVerifySchedule(17); 1069 Schedule* schedule = ComputeAndVerifySchedule(17);
1052 // Make sure the exception blocks as well as the handler are deferred. 1070 // Make sure the exception blocks as well as the handler are deferred.
1053 EXPECT_TRUE(schedule->block(ex1)->deferred()); 1071 EXPECT_TRUE(schedule->block(ex1)->deferred());
1054 EXPECT_TRUE(schedule->block(ex2)->deferred()); 1072 EXPECT_TRUE(schedule->block(ex2)->deferred());
1055 EXPECT_TRUE(schedule->block(hdl)->deferred()); 1073 EXPECT_TRUE(schedule->block(hdl)->deferred());
(...skipping 21 matching lines...) Expand all
1077 1095
1078 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 1096 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
1079 Node* sw = graph()->NewNode(common()->Switch(3), p0, start); 1097 Node* sw = graph()->NewNode(common()->Switch(3), p0, start);
1080 Node* c0 = graph()->NewNode(common()->IfValue(0), sw); 1098 Node* c0 = graph()->NewNode(common()->IfValue(0), sw);
1081 Node* v0 = graph()->NewNode(common()->Int32Constant(11)); 1099 Node* v0 = graph()->NewNode(common()->Int32Constant(11));
1082 Node* c1 = graph()->NewNode(common()->IfValue(1), sw); 1100 Node* c1 = graph()->NewNode(common()->IfValue(1), sw);
1083 Node* v1 = graph()->NewNode(common()->Int32Constant(22)); 1101 Node* v1 = graph()->NewNode(common()->Int32Constant(22));
1084 Node* d = graph()->NewNode(common()->IfDefault(), sw); 1102 Node* d = graph()->NewNode(common()->IfDefault(), sw);
1085 Node* vd = graph()->NewNode(common()->Int32Constant(33)); 1103 Node* vd = graph()->NewNode(common()->Int32Constant(33));
1086 Node* m = graph()->NewNode(common()->Merge(3), c0, c1, d); 1104 Node* m = graph()->NewNode(common()->Merge(3), c0, c1, d);
1087 Node* phi = graph()->NewNode(common()->Phi(kMachInt32, 3), v0, v1, vd, m); 1105 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kWord32, 3),
1106 v0, v1, vd, m);
1088 Node* ret = graph()->NewNode(common()->Return(), phi, start, m); 1107 Node* ret = graph()->NewNode(common()->Return(), phi, start, m);
1089 Node* end = graph()->NewNode(common()->End(1), ret); 1108 Node* end = graph()->NewNode(common()->End(1), ret);
1090 1109
1091 graph()->SetEnd(end); 1110 graph()->SetEnd(end);
1092 1111
1093 ComputeAndVerifySchedule(16); 1112 ComputeAndVerifySchedule(16);
1094 } 1113 }
1095 1114
1096 1115
1097 TARGET_TEST_F(SchedulerTest, FloatingSwitch) { 1116 TARGET_TEST_F(SchedulerTest, FloatingSwitch) {
1098 Node* start = graph()->NewNode(common()->Start(1)); 1117 Node* start = graph()->NewNode(common()->Start(1));
1099 graph()->SetStart(start); 1118 graph()->SetStart(start);
1100 1119
1101 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 1120 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
1102 Node* sw = graph()->NewNode(common()->Switch(3), p0, start); 1121 Node* sw = graph()->NewNode(common()->Switch(3), p0, start);
1103 Node* c0 = graph()->NewNode(common()->IfValue(0), sw); 1122 Node* c0 = graph()->NewNode(common()->IfValue(0), sw);
1104 Node* v0 = graph()->NewNode(common()->Int32Constant(11)); 1123 Node* v0 = graph()->NewNode(common()->Int32Constant(11));
1105 Node* c1 = graph()->NewNode(common()->IfValue(1), sw); 1124 Node* c1 = graph()->NewNode(common()->IfValue(1), sw);
1106 Node* v1 = graph()->NewNode(common()->Int32Constant(22)); 1125 Node* v1 = graph()->NewNode(common()->Int32Constant(22));
1107 Node* d = graph()->NewNode(common()->IfDefault(), sw); 1126 Node* d = graph()->NewNode(common()->IfDefault(), sw);
1108 Node* vd = graph()->NewNode(common()->Int32Constant(33)); 1127 Node* vd = graph()->NewNode(common()->Int32Constant(33));
1109 Node* m = graph()->NewNode(common()->Merge(3), c0, c1, d); 1128 Node* m = graph()->NewNode(common()->Merge(3), c0, c1, d);
1110 Node* phi = graph()->NewNode(common()->Phi(kMachInt32, 3), v0, v1, vd, m); 1129 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kWord32, 3),
1130 v0, v1, vd, m);
1111 Node* ret = graph()->NewNode(common()->Return(), phi, start, start); 1131 Node* ret = graph()->NewNode(common()->Return(), phi, start, start);
1112 Node* end = graph()->NewNode(common()->End(1), ret); 1132 Node* end = graph()->NewNode(common()->End(1), ret);
1113 1133
1114 graph()->SetEnd(end); 1134 graph()->SetEnd(end);
1115 1135
1116 ComputeAndVerifySchedule(16); 1136 ComputeAndVerifySchedule(16);
1117 } 1137 }
1118 1138
1119 1139
1120 TARGET_TEST_F(SchedulerTest, Terminate) { 1140 TARGET_TEST_F(SchedulerTest, Terminate) {
(...skipping 12 matching lines...) Expand all
1133 1153
1134 Schedule* schedule = ComputeAndVerifySchedule(6); 1154 Schedule* schedule = ComputeAndVerifySchedule(6);
1135 BasicBlock* block = schedule->block(loop); 1155 BasicBlock* block = schedule->block(loop);
1136 EXPECT_EQ(block, schedule->block(effect)); 1156 EXPECT_EQ(block, schedule->block(effect));
1137 EXPECT_GE(block->rpo_number(), 0); 1157 EXPECT_GE(block->rpo_number(), 0);
1138 } 1158 }
1139 1159
1140 } // namespace compiler 1160 } // namespace compiler
1141 } // namespace internal 1161 } // namespace internal
1142 } // namespace v8 1162 } // namespace v8
OLDNEW
« no previous file with comments | « test/unittests/compiler/node-test-utils.cc ('k') | test/unittests/compiler/select-lowering-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698