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

Side by Side Diff: src/compiler/js-typed-lowering.cc

Issue 2780953003: [turbofan] Remove typeof optimization from typed lowering. (Closed)
Patch Set: Created 3 years, 8 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
« no previous file with comments | « src/compiler/js-typed-lowering.h ('k') | 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/js-typed-lowering.h" 5 #include "src/compiler/js-typed-lowering.h"
6 6
7 #include "src/ast/modules.h" 7 #include "src/ast/modules.h"
8 #include "src/builtins/builtins-utils.h" 8 #include "src/builtins/builtins-utils.h"
9 #include "src/code-factory.h" 9 #include "src/code-factory.h"
10 #include "src/compilation-dependencies.h" 10 #include "src/compilation-dependencies.h"
(...skipping 824 matching lines...) Expand 10 before | Expand all | Expand 10 after
835 } else if (type->Is(Type::Function())) { 835 } else if (type->Is(Type::Function())) {
836 return Replace(jsgraph()->Constant(f->function_string())); 836 return Replace(jsgraph()->Constant(f->function_string()));
837 } else if (type->IsHeapConstant()) { 837 } else if (type->IsHeapConstant()) {
838 return Replace(jsgraph()->Constant( 838 return Replace(jsgraph()->Constant(
839 Object::TypeOf(isolate(), type->AsHeapConstant()->Value()))); 839 Object::TypeOf(isolate(), type->AsHeapConstant()->Value())));
840 } 840 }
841 841
842 return NoChange(); 842 return NoChange();
843 } 843 }
844 844
845 Reduction JSTypedLowering::ReduceJSEqualTypeOf(Node* node) {
846 Node* input;
847 Handle<String> type;
848 HeapObjectBinopMatcher m(node);
849 if (m.left().IsJSTypeOf() && m.right().HasValue() &&
850 m.right().Value()->IsString()) {
851 input = m.left().InputAt(0);
852 type = Handle<String>::cast(m.right().Value());
853 } else if (m.right().IsJSTypeOf() && m.left().HasValue() &&
854 m.left().Value()->IsString()) {
855 input = m.right().InputAt(0);
856 type = Handle<String>::cast(m.left().Value());
857 } else {
858 return NoChange();
859 }
860 Node* value;
861 if (String::Equals(type, factory()->boolean_string())) {
862 value =
863 graph()->NewNode(common()->Select(MachineRepresentation::kTagged),
864 graph()->NewNode(simplified()->ReferenceEqual(), input,
865 jsgraph()->TrueConstant()),
866 jsgraph()->TrueConstant(),
867 graph()->NewNode(simplified()->ReferenceEqual(), input,
868 jsgraph()->FalseConstant()));
869 } else if (String::Equals(type, factory()->function_string())) {
870 value = graph()->NewNode(simplified()->ObjectIsDetectableCallable(), input);
871 } else if (String::Equals(type, factory()->number_string())) {
872 value = graph()->NewNode(simplified()->ObjectIsNumber(), input);
873 } else if (String::Equals(type, factory()->object_string())) {
874 value = graph()->NewNode(
875 common()->Select(MachineRepresentation::kTagged),
876 graph()->NewNode(simplified()->ObjectIsNonCallable(), input),
877 jsgraph()->TrueConstant(),
878 graph()->NewNode(simplified()->ReferenceEqual(), input,
879 jsgraph()->NullConstant()));
880 } else if (String::Equals(type, factory()->string_string())) {
881 value = graph()->NewNode(simplified()->ObjectIsString(), input);
882 } else if (String::Equals(type, factory()->symbol_string())) {
883 value = graph()->NewNode(simplified()->ObjectIsSymbol(), input);
884 } else if (String::Equals(type, factory()->undefined_string())) {
885 value = graph()->NewNode(
886 common()->Select(MachineRepresentation::kTagged),
887 graph()->NewNode(simplified()->ReferenceEqual(), input,
888 jsgraph()->NullConstant()),
889 jsgraph()->FalseConstant(),
890 graph()->NewNode(simplified()->ObjectIsUndetectable(), input));
891 } else {
892 return NoChange();
893 }
894 ReplaceWithValue(node, value);
895 return Replace(value);
896 }
897
898 Reduction JSTypedLowering::ReduceJSEqual(Node* node) { 845 Reduction JSTypedLowering::ReduceJSEqual(Node* node) {
899 Reduction const reduction = ReduceJSEqualTypeOf(node);
900 if (reduction.Changed()) return reduction;
901
902 JSBinopReduction r(this, node); 846 JSBinopReduction r(this, node);
903 847
904 if (r.BothInputsAre(Type::UniqueName())) { 848 if (r.BothInputsAre(Type::UniqueName())) {
905 return r.ChangeToPureOperator(simplified()->ReferenceEqual()); 849 return r.ChangeToPureOperator(simplified()->ReferenceEqual());
906 } 850 }
907 if (r.IsInternalizedStringCompareOperation()) { 851 if (r.IsInternalizedStringCompareOperation()) {
908 r.CheckInputsToInternalizedString(); 852 r.CheckInputsToInternalizedString();
909 return r.ChangeToPureOperator(simplified()->ReferenceEqual()); 853 return r.ChangeToPureOperator(simplified()->ReferenceEqual());
910 } 854 }
911 if (r.BothInputsAre(Type::String())) { 855 if (r.BothInputsAre(Type::String())) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
954 // For values with canonical representation (i.e. neither String, nor 898 // For values with canonical representation (i.e. neither String, nor
955 // Number) an empty type intersection means the values cannot be strictly 899 // Number) an empty type intersection means the values cannot be strictly
956 // equal. 900 // equal.
957 if (!r.left_type()->Maybe(r.right_type())) { 901 if (!r.left_type()->Maybe(r.right_type())) {
958 Node* replacement = jsgraph()->FalseConstant(); 902 Node* replacement = jsgraph()->FalseConstant();
959 ReplaceWithValue(node, replacement); 903 ReplaceWithValue(node, replacement);
960 return Replace(replacement); 904 return Replace(replacement);
961 } 905 }
962 } 906 }
963 907
964 Reduction const reduction = ReduceJSEqualTypeOf(node);
965 if (reduction.Changed()) return reduction;
966
967 if (r.BothInputsAre(Type::Unique())) { 908 if (r.BothInputsAre(Type::Unique())) {
968 return r.ChangeToPureOperator(simplified()->ReferenceEqual()); 909 return r.ChangeToPureOperator(simplified()->ReferenceEqual());
969 } 910 }
970 if (r.OneInputIs(pointer_comparable_type_)) { 911 if (r.OneInputIs(pointer_comparable_type_)) {
971 return r.ChangeToPureOperator(simplified()->ReferenceEqual()); 912 return r.ChangeToPureOperator(simplified()->ReferenceEqual());
972 } 913 }
973 if (r.IsInternalizedStringCompareOperation()) { 914 if (r.IsInternalizedStringCompareOperation()) {
974 r.CheckInputsToInternalizedString(); 915 r.CheckInputsToInternalizedString();
975 return r.ChangeToPureOperator(simplified()->ReferenceEqual()); 916 return r.ChangeToPureOperator(simplified()->ReferenceEqual());
976 } 917 }
(...skipping 1471 matching lines...) Expand 10 before | Expand all | Expand 10 after
2448 } 2389 }
2449 2390
2450 2391
2451 CompilationDependencies* JSTypedLowering::dependencies() const { 2392 CompilationDependencies* JSTypedLowering::dependencies() const {
2452 return dependencies_; 2393 return dependencies_;
2453 } 2394 }
2454 2395
2455 } // namespace compiler 2396 } // namespace compiler
2456 } // namespace internal 2397 } // namespace internal
2457 } // namespace v8 2398 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/js-typed-lowering.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698