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

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

Issue 635323002: Remove premordial math functions from native context. (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 | « src/bootstrapper.cc ('k') | src/contexts.h » ('j') | 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 806 matching lines...) Expand 10 before | Expand all | Expand 10 after
817 // TODO(rossberg): implement 817 // TODO(rossberg): implement
818 #define DEFINE_METHOD(x) \ 818 #define DEFINE_METHOD(x) \
819 Bounds Typer::Visitor::Type##x(Node* node) { return Bounds(Type::None()); } 819 Bounds Typer::Visitor::Type##x(Node* node) { return Bounds(Type::None()); }
820 MACHINE_OP_LIST(DEFINE_METHOD) 820 MACHINE_OP_LIST(DEFINE_METHOD)
821 #undef DEFINE_METHOD 821 #undef DEFINE_METHOD
822 822
823 823
824 // Heap constants. 824 // Heap constants.
825 825
826 Type* Typer::Visitor::TypeConstant(Handle<Object> value) { 826 Type* Typer::Visitor::TypeConstant(Handle<Object> value) {
827 if (value->IsJSFunction() && JSFunction::cast(*value)->IsBuiltin() && 827 if (value->IsJSFunction()) {
828 !context().is_null()) { 828 if (JSFunction::cast(*value)->shared()->HasBuiltinFunctionId()) {
829 Handle<Context> native = 829 switch (JSFunction::cast(*value)->shared()->builtin_function_id()) {
830 handle(context().ToHandleChecked()->native_context(), isolate()); 830 // TODO(rossberg): can't express overloading
831 if (*value == native->math_abs_fun()) { 831 case kMathAbs:
832 return typer_->number_fun1_; // TODO(rossberg): can't express overloading 832 return typer_->number_fun1_;
833 } else if (*value == native->math_acos_fun()) { 833 case kMathAcos:
834 return typer_->number_fun1_; 834 return typer_->number_fun1_;
835 } else if (*value == native->math_asin_fun()) { 835 case kMathAsin:
836 return typer_->number_fun1_; 836 return typer_->number_fun1_;
837 } else if (*value == native->math_atan_fun()) { 837 case kMathAtan:
838 return typer_->number_fun1_; 838 return typer_->number_fun1_;
839 } else if (*value == native->math_atan2_fun()) { 839 case kMathAtan2:
840 return typer_->number_fun2_; 840 return typer_->number_fun2_;
841 } else if (*value == native->math_ceil_fun()) { 841 case kMathCeil:
842 return typer_->weakint_fun1_; 842 return typer_->weakint_fun1_;
843 } else if (*value == native->math_cos_fun()) { 843 case kMathCos:
844 return typer_->number_fun1_; 844 return typer_->number_fun1_;
845 } else if (*value == native->math_exp_fun()) { 845 case kMathExp:
846 return typer_->number_fun1_; 846 return typer_->number_fun1_;
847 } else if (*value == native->math_floor_fun()) { 847 case kMathFloor:
848 return typer_->weakint_fun1_; 848 return typer_->weakint_fun1_;
849 } else if (*value == native->math_imul_fun()) { 849 case kMathImul:
850 return typer_->imul_fun_; 850 return typer_->imul_fun_;
851 } else if (*value == native->math_log_fun()) { 851 case kMathLog:
852 return typer_->number_fun1_; 852 return typer_->number_fun1_;
853 } else if (*value == native->math_pow_fun()) { 853 case kMathPow:
854 return typer_->number_fun2_; 854 return typer_->number_fun2_;
855 } else if (*value == native->math_random_fun()) { 855 case kMathRandom:
856 return typer_->random_fun_; 856 return typer_->random_fun_;
857 } else if (*value == native->math_round_fun()) { 857 case kMathRound:
858 return typer_->weakint_fun1_; 858 return typer_->weakint_fun1_;
859 } else if (*value == native->math_sin_fun()) { 859 case kMathSin:
860 return typer_->number_fun1_; 860 return typer_->number_fun1_;
861 } else if (*value == native->math_sqrt_fun()) { 861 case kMathSqrt:
862 return typer_->number_fun1_; 862 return typer_->number_fun1_;
863 } else if (*value == native->math_tan_fun()) { 863 case kMathTan:
864 return typer_->number_fun1_; 864 return typer_->number_fun1_;
865 } else if (*value == native->array_buffer_fun()) { 865 default:
866 return typer_->array_buffer_fun_; 866 break;
867 } else if (*value == native->int8_array_fun()) { 867 }
868 return typer_->int8_array_fun_; 868 } else if (JSFunction::cast(*value)->IsBuiltin() && !context().is_null()) {
869 } else if (*value == native->int16_array_fun()) { 869 Handle<Context> native =
870 return typer_->int16_array_fun_; 870 handle(context().ToHandleChecked()->native_context(), isolate());
871 } else if (*value == native->int32_array_fun()) { 871 if (*value == native->array_buffer_fun()) {
872 return typer_->int32_array_fun_; 872 return typer_->array_buffer_fun_;
873 } else if (*value == native->uint8_array_fun()) { 873 } else if (*value == native->int8_array_fun()) {
874 return typer_->uint8_array_fun_; 874 return typer_->int8_array_fun_;
875 } else if (*value == native->uint16_array_fun()) { 875 } else if (*value == native->int16_array_fun()) {
876 return typer_->uint16_array_fun_; 876 return typer_->int16_array_fun_;
877 } else if (*value == native->uint32_array_fun()) { 877 } else if (*value == native->int32_array_fun()) {
878 return typer_->uint32_array_fun_; 878 return typer_->int32_array_fun_;
879 } else if (*value == native->float32_array_fun()) { 879 } else if (*value == native->uint8_array_fun()) {
880 return typer_->float32_array_fun_; 880 return typer_->uint8_array_fun_;
881 } else if (*value == native->float64_array_fun()) { 881 } else if (*value == native->uint16_array_fun()) {
882 return typer_->float64_array_fun_; 882 return typer_->uint16_array_fun_;
883 } else if (*value == native->uint32_array_fun()) {
884 return typer_->uint32_array_fun_;
885 } else if (*value == native->float32_array_fun()) {
886 return typer_->float32_array_fun_;
887 } else if (*value == native->float64_array_fun()) {
888 return typer_->float64_array_fun_;
889 }
883 } 890 }
884 } 891 }
885 return Type::Constant(value, zone()); 892 return Type::Constant(value, zone());
886 } 893 }
887 894
888 895
889 namespace { 896 namespace {
890 897
891 class TyperDecorator : public GraphDecorator { 898 class TyperDecorator : public GraphDecorator {
892 public: 899 public:
893 explicit TyperDecorator(Typer* typer) : typer_(typer) {} 900 explicit TyperDecorator(Typer* typer) : typer_(typer) {}
894 virtual void Decorate(Node* node) { typer_->Init(node); } 901 virtual void Decorate(Node* node) { typer_->Init(node); }
895 902
896 private: 903 private:
897 Typer* typer_; 904 Typer* typer_;
898 }; 905 };
899 906
900 } 907 }
901 908
902 909
903 void Typer::DecorateGraph(Graph* graph) { 910 void Typer::DecorateGraph(Graph* graph) {
904 graph->AddDecorator(new (zone()) TyperDecorator(this)); 911 graph->AddDecorator(new (zone()) TyperDecorator(this));
905 } 912 }
906 913
907 } 914 }
908 } 915 }
909 } // namespace v8::internal::compiler 916 } // namespace v8::internal::compiler
OLDNEW
« no previous file with comments | « src/bootstrapper.cc ('k') | src/contexts.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698