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

Side by Side Diff: test/unittests/compiler/js-typed-lowering-unittest.cc

Issue 2263273003: [turbofan] Improve fast case of JSInstanceOf lowering. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Renaming based on comment Created 4 years, 3 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.cc ('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 #include "src/code-factory.h" 6 #include "src/code-factory.h"
7 #include "src/compilation-dependencies.h" 7 #include "src/compilation-dependencies.h"
8 #include "src/compiler/access-builder.h" 8 #include "src/compiler/access-builder.h"
9 #include "src/compiler/js-graph.h" 9 #include "src/compiler/js-graph.h"
10 #include "src/compiler/js-operator.h" 10 #include "src/compiler/js-operator.h"
(...skipping 1008 matching lines...) Expand 10 before | Expand all | Expand 10 after
1019 EXPECT_THAT(r.replacement(), 1019 EXPECT_THAT(r.replacement(),
1020 IsSpeculativeNumberSubtract(NumberOperationHint::kSignedSmall, 1020 IsSpeculativeNumberSubtract(NumberOperationHint::kSignedSmall,
1021 lhs, rhs, effect, control)); 1021 lhs, rhs, effect, control));
1022 } 1022 }
1023 1023
1024 // ----------------------------------------------------------------------------- 1024 // -----------------------------------------------------------------------------
1025 // JSInstanceOf 1025 // JSInstanceOf
1026 // Test that instanceOf is reduced if and only if the right-hand side is a 1026 // Test that instanceOf is reduced if and only if the right-hand side is a
1027 // function constant. Functional correctness is ensured elsewhere. 1027 // function constant. Functional correctness is ensured elsewhere.
1028 1028
1029 TEST_F(JSTypedLoweringTest, JSInstanceOfSpecializationWithoutSmiCheck) { 1029 TEST_F(JSTypedLoweringTest, JSInstanceOfSpecialization) {
1030 Node* const context = Parameter(Type::Any()); 1030 Node* const context = Parameter(Type::Any());
1031 Node* const frame_state = EmptyFrameState(); 1031 Node* const frame_state = EmptyFrameState();
1032 Node* const effect = graph()->start(); 1032 Node* const effect = graph()->start();
1033 Node* const control = graph()->start(); 1033 Node* const control = graph()->start();
1034 1034
1035 // Reduce if left-hand side is known to be an object.
1036 Node* instanceOf =
1037 graph()->NewNode(javascript()->InstanceOf(), Parameter(Type::Object(), 0),
1038 HeapConstant(isolate()->object_function()), context,
1039 frame_state, effect, control);
1040 Node* dummy = graph()->NewNode(javascript()->ToObject(), instanceOf, context,
1041 frame_state, effect, control);
1042 Reduction r = Reduce(instanceOf);
1043 ASSERT_TRUE(r.Changed());
1044 ASSERT_EQ(r.replacement(), dummy->InputAt(0));
1045 ASSERT_NE(instanceOf, dummy->InputAt(0));
1046 }
1047
1048
1049 TEST_F(JSTypedLoweringTest, JSInstanceOfSpecializationWithSmiCheck) {
1050 Node* const context = Parameter(Type::Any());
1051 Node* const frame_state = EmptyFrameState();
1052 Node* const effect = graph()->start();
1053 Node* const control = graph()->start();
1054
1055 // Reduce if left-hand side could be a Smi.
1056 Node* instanceOf = 1035 Node* instanceOf =
1057 graph()->NewNode(javascript()->InstanceOf(), Parameter(Type::Any(), 0), 1036 graph()->NewNode(javascript()->InstanceOf(), Parameter(Type::Any(), 0),
1058 HeapConstant(isolate()->object_function()), context, 1037 HeapConstant(isolate()->object_function()), context,
1059 frame_state, effect, control); 1038 frame_state, effect, control);
1060 Node* dummy = graph()->NewNode(javascript()->ToObject(), instanceOf, context,
1061 frame_state, effect, control);
1062 Reduction r = Reduce(instanceOf); 1039 Reduction r = Reduce(instanceOf);
1063 ASSERT_TRUE(r.Changed()); 1040 ASSERT_TRUE(r.Changed());
1064 ASSERT_EQ(r.replacement(), dummy->InputAt(0));
1065 ASSERT_NE(instanceOf, dummy->InputAt(0));
1066 } 1041 }
1067 1042
1068 1043
1069 TEST_F(JSTypedLoweringTest, JSInstanceOfNoSpecialization) { 1044 TEST_F(JSTypedLoweringTest, JSInstanceOfNoSpecialization) {
1070 Node* const context = Parameter(Type::Any()); 1045 Node* const context = Parameter(Type::Any());
1071 Node* const frame_state = EmptyFrameState(); 1046 Node* const frame_state = EmptyFrameState();
1072 Node* const effect = graph()->start(); 1047 Node* const effect = graph()->start();
1073 Node* const control = graph()->start(); 1048 Node* const control = graph()->start();
1074 1049
1075 // Do not reduce if right-hand side is not a function constant. 1050 // Do not reduce if right-hand side is not a function constant.
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
1223 EmptyFrameState(), effect, control)); 1198 EmptyFrameState(), effect, control));
1224 ASSERT_TRUE(r.Changed()); 1199 ASSERT_TRUE(r.Changed());
1225 EXPECT_THAT(r.replacement(), IsSpeculativeNumberBitwiseXor( 1200 EXPECT_THAT(r.replacement(), IsSpeculativeNumberBitwiseXor(
1226 NumberOperationHint::kNumberOrOddball, lhs, 1201 NumberOperationHint::kNumberOrOddball, lhs,
1227 rhs, effect, control)); 1202 rhs, effect, control));
1228 } 1203 }
1229 1204
1230 } // namespace compiler 1205 } // namespace compiler
1231 } // namespace internal 1206 } // namespace internal
1232 } // namespace v8 1207 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/js-typed-lowering.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698