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

Side by Side Diff: src/crankshaft/hydrogen.cc

Issue 2516603002: [crankshaft] Don't inline the fast path for instanceof if the function has a non-instance .prototype (Closed)
Patch Set: Created 4 years, 1 month 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 | « no previous file | test/mjsunit/regress/regress-crbug-666308.js » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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/crankshaft/hydrogen.h" 5 #include "src/crankshaft/hydrogen.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <sstream> 8 #include <sstream>
9 9
10 #include "src/allocation-site-scopes.h" 10 #include "src/allocation-site-scopes.h"
(...skipping 11191 matching lines...) Expand 10 before | Expand all | Expand 10 after
11202 } 11202 }
11203 11203
11204 if (op == Token::INSTANCEOF) { 11204 if (op == Token::INSTANCEOF) {
11205 // Check to see if the rhs of the instanceof is a known function. 11205 // Check to see if the rhs of the instanceof is a known function.
11206 if (right->IsConstant() && 11206 if (right->IsConstant() &&
11207 HConstant::cast(right)->handle(isolate())->IsJSFunction()) { 11207 HConstant::cast(right)->handle(isolate())->IsJSFunction()) {
11208 Handle<JSFunction> function = 11208 Handle<JSFunction> function =
11209 Handle<JSFunction>::cast(HConstant::cast(right)->handle(isolate())); 11209 Handle<JSFunction>::cast(HConstant::cast(right)->handle(isolate()));
11210 // Make sure that the {function} already has a meaningful initial map 11210 // Make sure that the {function} already has a meaningful initial map
11211 // (i.e. we constructed at least one instance using the constructor 11211 // (i.e. we constructed at least one instance using the constructor
11212 // {function}). 11212 // {function}), and has an instance as .prototype.
11213 if (function->has_initial_map()) { 11213 if (function->has_initial_map() &&
11214 !function->map()->has_non_instance_prototype()) {
11214 // Lookup @@hasInstance on the {function}. 11215 // Lookup @@hasInstance on the {function}.
11215 Handle<Map> function_map(function->map(), isolate()); 11216 Handle<Map> function_map(function->map(), isolate());
11216 PropertyAccessInfo has_instance( 11217 PropertyAccessInfo has_instance(
11217 this, LOAD, function_map, 11218 this, LOAD, function_map,
11218 isolate()->factory()->has_instance_symbol()); 11219 isolate()->factory()->has_instance_symbol());
11219 // Check if we are using the Function.prototype[@@hasInstance]. 11220 // Check if we are using the Function.prototype[@@hasInstance].
11220 if (has_instance.CanAccessMonomorphic() && 11221 if (has_instance.CanAccessMonomorphic() &&
11221 has_instance.IsDataConstant() && 11222 has_instance.IsDataConstant() &&
11222 has_instance.constant().is_identical_to( 11223 has_instance.constant().is_identical_to(
11223 isolate()->function_has_instance())) { 11224 isolate()->function_has_instance())) {
(...skipping 1799 matching lines...) Expand 10 before | Expand all | Expand 10 after
13023 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13024 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13024 } 13025 }
13025 13026
13026 #ifdef DEBUG 13027 #ifdef DEBUG
13027 graph_->Verify(false); // No full verify. 13028 graph_->Verify(false); // No full verify.
13028 #endif 13029 #endif
13029 } 13030 }
13030 13031
13031 } // namespace internal 13032 } // namespace internal
13032 } // namespace v8 13033 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/regress/regress-crbug-666308.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698