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

Side by Side Diff: src/hydrogen.cc

Issue 1330233004: Fix for v8:4380 introduced a regression in Octane crypto. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 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 | « 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 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/hydrogen.h" 5 #include "src/hydrogen.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/allocation-site-scopes.h" 9 #include "src/allocation-site-scopes.h"
10 #include "src/ast-numbering.h" 10 #include "src/ast-numbering.h"
(...skipping 7434 matching lines...) Expand 10 before | Expand all | Expand 10 after
7445 if (!has_double_maps && !has_smi_or_object_maps) return NULL; 7445 if (!has_double_maps && !has_smi_or_object_maps) return NULL;
7446 7446
7447 HCheckMaps* checked_object = Add<HCheckMaps>(object, maps); 7447 HCheckMaps* checked_object = Add<HCheckMaps>(object, maps);
7448 // FAST_ELEMENTS is considered more general than FAST_HOLEY_SMI_ELEMENTS. 7448 // FAST_ELEMENTS is considered more general than FAST_HOLEY_SMI_ELEMENTS.
7449 // If we've seen both, the consolidated load must use FAST_HOLEY_ELEMENTS. 7449 // If we've seen both, the consolidated load must use FAST_HOLEY_ELEMENTS.
7450 ElementsKind consolidated_elements_kind = has_seen_holey_elements 7450 ElementsKind consolidated_elements_kind = has_seen_holey_elements
7451 ? GetHoleyElementsKind(most_general_consolidated_map->elements_kind()) 7451 ? GetHoleyElementsKind(most_general_consolidated_map->elements_kind())
7452 : most_general_consolidated_map->elements_kind(); 7452 : most_general_consolidated_map->elements_kind();
7453 LoadKeyedHoleMode load_mode = NEVER_RETURN_HOLE; 7453 LoadKeyedHoleMode load_mode = NEVER_RETURN_HOLE;
7454 if (has_seen_holey_elements) { 7454 if (has_seen_holey_elements) {
7455 if (!isolate()->IsFastArrayConstructorPrototypeChainIntact()) {
7456 return NULL;
7457 }
7458
7459 // Make sure that all of the maps we are handling have the initial array 7455 // Make sure that all of the maps we are handling have the initial array
7460 // prototype. 7456 // prototype.
7457 bool saw_non_array_prototype = false;
7461 for (int i = 0; i < maps->length(); ++i) { 7458 for (int i = 0; i < maps->length(); ++i) {
7462 Handle<Map> map = maps->at(i); 7459 Handle<Map> map = maps->at(i);
7463 if (map->prototype() != *isolate()->initial_array_prototype()) { 7460 if (map->prototype() != *isolate()->initial_array_prototype()) {
7464 // We can't guarantee that loading the hole is safe. The prototype may 7461 // We can't guarantee that loading the hole is safe. The prototype may
7465 // have an element at this position. 7462 // have an element at this position.
7466 return NULL; 7463 saw_non_array_prototype = true;
7464 break;
7467 } 7465 }
7468 } 7466 }
7469 7467
7470 Handle<Map> holey_map = 7468 if (!saw_non_array_prototype) {
7471 handle(isolate()->get_initial_js_array_map(consolidated_elements_kind)); 7469 Handle<Map> holey_map = handle(
7472 load_mode = BuildKeyedHoleMode(holey_map); 7470 isolate()->get_initial_js_array_map(consolidated_elements_kind));
7473 if (load_mode == NEVER_RETURN_HOLE) { 7471 load_mode = BuildKeyedHoleMode(holey_map);
7474 return NULL; 7472 if (load_mode != NEVER_RETURN_HOLE) {
7475 } 7473 for (int i = 0; i < maps->length(); ++i) {
7476 7474 Handle<Map> map = maps->at(i);
7477 for (int i = 0; i < maps->length(); ++i) { 7475 // The prototype check was already done for the holey map in
7478 Handle<Map> map = maps->at(i); 7476 // BuildKeyedHoleMode.
7479 // The prototype check was already done for the holey map in 7477 if (!map.is_identical_to(holey_map)) {
7480 // BuildKeyedHoleMode. 7478 Handle<JSObject> prototype(JSObject::cast(map->prototype()),
7481 if (!map.is_identical_to(holey_map)) { 7479 isolate());
7482 Handle<JSObject> prototype(JSObject::cast(map->prototype()), isolate()); 7480 Handle<JSObject> object_prototype =
7483 Handle<JSObject> object_prototype = 7481 isolate()->initial_object_prototype();
7484 isolate()->initial_object_prototype(); 7482 BuildCheckPrototypeMaps(prototype, object_prototype);
7485 BuildCheckPrototypeMaps(prototype, object_prototype); 7483 }
7484 }
7486 } 7485 }
7487 } 7486 }
7488 } 7487 }
7489 HInstruction* instr = BuildUncheckedMonomorphicElementAccess( 7488 HInstruction* instr = BuildUncheckedMonomorphicElementAccess(
7490 checked_object, key, val, 7489 checked_object, key, val,
7491 most_general_consolidated_map->instance_type() == JS_ARRAY_TYPE, 7490 most_general_consolidated_map->instance_type() == JS_ARRAY_TYPE,
7492 consolidated_elements_kind, LOAD, load_mode, STANDARD_STORE); 7491 consolidated_elements_kind, LOAD, load_mode, STANDARD_STORE);
7493 return instr; 7492 return instr;
7494 } 7493 }
7495 7494
(...skipping 6017 matching lines...) Expand 10 before | Expand all | Expand 10 after
13513 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13512 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13514 } 13513 }
13515 13514
13516 #ifdef DEBUG 13515 #ifdef DEBUG
13517 graph_->Verify(false); // No full verify. 13516 graph_->Verify(false); // No full verify.
13518 #endif 13517 #endif
13519 } 13518 }
13520 13519
13521 } // namespace internal 13520 } // namespace internal
13522 } // namespace v8 13521 } // namespace v8
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