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

Side by Side Diff: src/compiler/typer.cc

Issue 658523002: Simple typing of machine operators. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 2 months 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/graph-inl.h" 5 #include "src/compiler/graph-inl.h"
6 #include "src/compiler/js-operator.h" 6 #include "src/compiler/js-operator.h"
7 #include "src/compiler/node.h" 7 #include "src/compiler/node.h"
8 #include "src/compiler/node-properties-inl.h" 8 #include "src/compiler/node-properties-inl.h"
9 #include "src/compiler/node-properties.h" 9 #include "src/compiler/node-properties.h"
10 #include "src/compiler/simplified-operator.h" 10 #include "src/compiler/simplified-operator.h"
(...skipping 796 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 807
808 808
809 Bounds Typer::Visitor::TypeStoreElement(Node* node) { 809 Bounds Typer::Visitor::TypeStoreElement(Node* node) {
810 UNREACHABLE(); 810 UNREACHABLE();
811 return Bounds(); 811 return Bounds();
812 } 812 }
813 813
814 814
815 // Machine operators. 815 // Machine operators.
816 816
817 // TODO(rossberg): implement 817
818 #define DEFINE_METHOD(x) \ 818 Bounds Typer::Visitor::TypeLoad(Node* node) {
819 Bounds Typer::Visitor::Type##x(Node* node) { return Bounds(Type::None()); } 819 return Bounds::Unbounded(zone());
820 MACHINE_OP_LIST(DEFINE_METHOD) 820 }
821 #undef DEFINE_METHOD 821
822
823 Bounds Typer::Visitor::TypeStore(Node* node) {
824 UNREACHABLE();
825 return Bounds();
826 }
827
828
829 Bounds Typer::Visitor::TypeWord32And(Node* node) {
830 return Bounds(Type::Integral32());
831 }
832
833
834 Bounds Typer::Visitor::TypeWord32Or(Node* node) {
835 return Bounds(Type::Integral32());
836 }
837
838
839 Bounds Typer::Visitor::TypeWord32Xor(Node* node) {
840 return Bounds(Type::Integral32());
841 }
842
843
844 Bounds Typer::Visitor::TypeWord32Shl(Node* node) {
845 return Bounds(Type::Integral32());
846 }
847
848
849 Bounds Typer::Visitor::TypeWord32Shr(Node* node) {
850 return Bounds(Type::Integral32());
851 }
852
853
854 Bounds Typer::Visitor::TypeWord32Sar(Node* node) {
855 return Bounds(Type::Integral32());
856 }
857
858
859 Bounds Typer::Visitor::TypeWord32Ror(Node* node) {
860 return Bounds(Type::Integral32());
861 }
862
863
864 Bounds Typer::Visitor::TypeWord32Equal(Node* node) {
865 return Bounds(Type::Boolean());
866 }
867
868
869 Bounds Typer::Visitor::TypeWord64And(Node* node) {
870 return Bounds(Type::Internal());
871 }
872
873
874 Bounds Typer::Visitor::TypeWord64Or(Node* node) {
875 return Bounds(Type::Internal());
876 }
877
878
879 Bounds Typer::Visitor::TypeWord64Xor(Node* node) {
880 return Bounds(Type::Internal());
881 }
882
883
884 Bounds Typer::Visitor::TypeWord64Shl(Node* node) {
885 return Bounds(Type::Internal());
886 }
887
888
889 Bounds Typer::Visitor::TypeWord64Shr(Node* node) {
890 return Bounds(Type::Internal());
891 }
892
893
894 Bounds Typer::Visitor::TypeWord64Sar(Node* node) {
895 return Bounds(Type::Internal());
896 }
897
898
899 Bounds Typer::Visitor::TypeWord64Ror(Node* node) {
900 return Bounds(Type::Internal());
901 }
902
903
904 Bounds Typer::Visitor::TypeWord64Equal(Node* node) {
905 return Bounds(Type::Boolean());
906 }
907
908
909 Bounds Typer::Visitor::TypeInt32Add(Node* node) {
910 return Bounds(Type::Integral32());
911 }
912
913
914 Bounds Typer::Visitor::TypeInt32AddWithOverflow(Node* node) {
915 return Bounds(Type::Internal());
916 }
917
918
919 Bounds Typer::Visitor::TypeInt32Sub(Node* node) {
920 return Bounds(Type::Integral32());
921 }
922
923
924 Bounds Typer::Visitor::TypeInt32SubWithOverflow(Node* node) {
925 return Bounds(Type::Internal());
926 }
927
928
929 Bounds Typer::Visitor::TypeInt32Mul(Node* node) {
930 return Bounds(Type::Integral32());
931 }
932
933
934 Bounds Typer::Visitor::TypeInt32Div(Node* node) {
935 return Bounds(Type::Integral32());
936 }
937
938
939 Bounds Typer::Visitor::TypeInt32Mod(Node* node) {
940 return Bounds(Type::Integral32());
941 }
942
943
944 Bounds Typer::Visitor::TypeInt32LessThan(Node* node) {
945 return Bounds(Type::Boolean());
946 }
947
948
949 Bounds Typer::Visitor::TypeInt32LessThanOrEqual(Node* node) {
950 return Bounds(Type::Boolean());
951 }
952
953
954 Bounds Typer::Visitor::TypeUint32Div(Node* node) {
955 return Bounds(Type::Unsigned32());
956 }
957
958
959 Bounds Typer::Visitor::TypeUint32LessThan(Node* node) {
960 return Bounds(Type::Boolean());
961 }
962
963
964 Bounds Typer::Visitor::TypeUint32LessThanOrEqual(Node* node) {
965 return Bounds(Type::Boolean());
966 }
967
968
969 Bounds Typer::Visitor::TypeUint32Mod(Node* node) {
970 return Bounds(Type::Unsigned32());
971 }
972
973
974 Bounds Typer::Visitor::TypeInt64Add(Node* node) {
975 return Bounds(Type::Internal());
976 }
977
978
979 Bounds Typer::Visitor::TypeInt64Sub(Node* node) {
980 return Bounds(Type::Internal());
981 }
982
983
984 Bounds Typer::Visitor::TypeInt64Mul(Node* node) {
985 return Bounds(Type::Internal());
986 }
987
988
989 Bounds Typer::Visitor::TypeInt64Div(Node* node) {
990 return Bounds(Type::Internal());
991 }
992
993
994 Bounds Typer::Visitor::TypeInt64Mod(Node* node) {
995 return Bounds(Type::Internal());
996 }
997
998
999 Bounds Typer::Visitor::TypeInt64LessThan(Node* node) {
1000 return Bounds(Type::Boolean());
1001 }
1002
1003
1004 Bounds Typer::Visitor::TypeInt64LessThanOrEqual(Node* node) {
1005 return Bounds(Type::Boolean());
1006 }
1007
1008
1009 Bounds Typer::Visitor::TypeUint64Div(Node* node) {
1010 return Bounds(Type::Internal());
1011 }
1012
1013
1014 Bounds Typer::Visitor::TypeUint64LessThan(Node* node) {
1015 return Bounds(Type::Boolean());
1016 }
1017
1018
1019 Bounds Typer::Visitor::TypeUint64Mod(Node* node) {
1020 return Bounds(Type::Internal());
1021 }
1022
1023
1024 Bounds Typer::Visitor::TypeChangeFloat32ToFloat64(Node* node) {
1025 return Bounds(Type::Intersect(
1026 Type::Number(), Type::UntaggedFloat64(), zone()));
1027 }
1028
1029
1030 Bounds Typer::Visitor::TypeChangeFloat64ToInt32(Node* node) {
1031 return Bounds(Type::Intersect(
1032 Type::Signed32(), Type::UntaggedInt32(), zone()));
1033 }
1034
1035
1036 Bounds Typer::Visitor::TypeChangeFloat64ToUint32(Node* node) {
1037 return Bounds(Type::Intersect(
1038 Type::Unsigned32(), Type::UntaggedInt32(), zone()));
1039 }
1040
1041
1042 Bounds Typer::Visitor::TypeChangeInt32ToFloat64(Node* node) {
1043 return Bounds(Type::Intersect(
1044 Type::Signed32(), Type::UntaggedFloat64(), zone()));
1045 }
1046
1047
1048 Bounds Typer::Visitor::TypeChangeInt32ToInt64(Node* node) {
1049 return Bounds(Type::Internal());
1050 }
1051
1052
1053 Bounds Typer::Visitor::TypeChangeUint32ToFloat64(Node* node) {
1054 return Bounds(Type::Intersect(
1055 Type::Unsigned32(), Type::UntaggedFloat64(), zone()));
1056 }
1057
1058
1059 Bounds Typer::Visitor::TypeChangeUint32ToUint64(Node* node) {
1060 return Bounds(Type::Internal());
1061 }
1062
1063
1064 Bounds Typer::Visitor::TypeTruncateFloat64ToFloat32(Node* node) {
1065 return Bounds(Type::Intersect(
1066 Type::Number(), Type::UntaggedFloat32(), zone()));
1067 }
1068
1069
1070 Bounds Typer::Visitor::TypeTruncateFloat64ToInt32(Node* node) {
1071 return Bounds(Type::Intersect(
1072 Type::Signed32(), Type::UntaggedInt32(), zone()));
1073 }
1074
1075
1076 Bounds Typer::Visitor::TypeTruncateInt64ToInt32(Node* node) {
1077 return Bounds(Type::Intersect(
1078 Type::Signed32(), Type::UntaggedInt32(), zone()));
1079 }
1080
1081
1082 Bounds Typer::Visitor::TypeFloat64Add(Node* node) {
1083 return Bounds(Type::Number());
1084 }
1085
1086
1087 Bounds Typer::Visitor::TypeFloat64Sub(Node* node) {
1088 return Bounds(Type::Number());
1089 }
1090
1091
1092 Bounds Typer::Visitor::TypeFloat64Mul(Node* node) {
1093 return Bounds(Type::Number());
1094 }
1095
1096
1097 Bounds Typer::Visitor::TypeFloat64Div(Node* node) {
1098 return Bounds(Type::Number());
1099 }
1100
1101
1102 Bounds Typer::Visitor::TypeFloat64Mod(Node* node) {
1103 return Bounds(Type::Number());
1104 }
1105
1106
1107 Bounds Typer::Visitor::TypeFloat64Sqrt(Node* node) {
1108 return Bounds(Type::Number());
1109 }
1110
1111
1112 Bounds Typer::Visitor::TypeFloat64Equal(Node* node) {
1113 return Bounds(Type::Boolean());
1114 }
1115
1116
1117 Bounds Typer::Visitor::TypeFloat64LessThan(Node* node) {
1118 return Bounds(Type::Boolean());
1119 }
1120
1121
1122 Bounds Typer::Visitor::TypeFloat64LessThanOrEqual(Node* node) {
1123 return Bounds(Type::Boolean());
1124 }
1125
1126
1127 Bounds Typer::Visitor::TypeLoadStackPointer(Node* node) {
1128 return Bounds(Type::Internal());
1129 }
822 1130
823 1131
824 // Heap constants. 1132 // Heap constants.
825 1133
1134
826 Type* Typer::Visitor::TypeConstant(Handle<Object> value) { 1135 Type* Typer::Visitor::TypeConstant(Handle<Object> value) {
827 if (value->IsJSFunction()) { 1136 if (value->IsJSFunction()) {
828 if (JSFunction::cast(*value)->shared()->HasBuiltinFunctionId()) { 1137 if (JSFunction::cast(*value)->shared()->HasBuiltinFunctionId()) {
829 switch (JSFunction::cast(*value)->shared()->builtin_function_id()) { 1138 switch (JSFunction::cast(*value)->shared()->builtin_function_id()) {
830 // TODO(rossberg): can't express overloading 1139 // TODO(rossberg): can't express overloading
831 case kMathAbs: 1140 case kMathAbs:
832 return typer_->number_fun1_; 1141 return typer_->number_fun1_;
833 case kMathAcos: 1142 case kMathAcos:
834 return typer_->number_fun1_; 1143 return typer_->number_fun1_;
835 case kMathAsin: 1144 case kMathAsin:
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
907 } 1216 }
908 1217
909 1218
910 void Typer::DecorateGraph(Graph* graph) { 1219 void Typer::DecorateGraph(Graph* graph) {
911 graph->AddDecorator(new (zone()) TyperDecorator(this)); 1220 graph->AddDecorator(new (zone()) TyperDecorator(this));
912 } 1221 }
913 1222
914 } 1223 }
915 } 1224 }
916 } // namespace v8::internal::compiler 1225 } // namespace v8::internal::compiler
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698