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.h

Issue 2631123002: [crankshaft][runtime] Initialize uninitialized double fields with hole NaN value instead of 0.0. (Closed)
Patch Set: Addressing comments Created 3 years, 11 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 | src/crankshaft/hydrogen.cc » ('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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 #ifndef V8_CRANKSHAFT_HYDROGEN_H_ 5 #ifndef V8_CRANKSHAFT_HYDROGEN_H_
6 #define V8_CRANKSHAFT_HYDROGEN_H_ 6 #define V8_CRANKSHAFT_HYDROGEN_H_
7 7
8 #include "src/accessors.h" 8 #include "src/accessors.h"
9 #include "src/allocation.h" 9 #include "src/allocation.h"
10 #include "src/ast/ast-type-bounds.h" 10 #include "src/ast/ast-type-bounds.h"
(...skipping 2438 matching lines...) Expand 10 before | Expand all | Expand 10 after
2449 PropertyAccessInfo(HOptimizedGraphBuilder* builder, 2449 PropertyAccessInfo(HOptimizedGraphBuilder* builder,
2450 PropertyAccessType access_type, Handle<Map> map, 2450 PropertyAccessType access_type, Handle<Map> map,
2451 Handle<Name> name) 2451 Handle<Name> name)
2452 : builder_(builder), 2452 : builder_(builder),
2453 access_type_(access_type), 2453 access_type_(access_type),
2454 map_(map), 2454 map_(map),
2455 name_(isolate()->factory()->InternalizeName(name)), 2455 name_(isolate()->factory()->InternalizeName(name)),
2456 field_type_(HType::Tagged()), 2456 field_type_(HType::Tagged()),
2457 access_(HObjectAccess::ForMap()), 2457 access_(HObjectAccess::ForMap()),
2458 lookup_type_(NOT_FOUND), 2458 lookup_type_(NOT_FOUND),
2459 details_(PropertyDetails::Empty()) {} 2459 details_(PropertyDetails::Empty()),
2460 store_mode_(STORE_TO_INITIALIZED_ENTRY) {}
2461
2462 // Ensure the full store is performed.
2463 void MarkAsInitializingStore() {
2464 DCHECK_EQ(STORE, access_type_);
2465 store_mode_ = INITIALIZING_STORE;
2466 }
2467
2468 StoreFieldOrKeyedMode StoreMode() {
2469 DCHECK_EQ(STORE, access_type_);
2470 return store_mode_;
2471 }
2460 2472
2461 // Checkes whether this PropertyAccessInfo can be handled as a monomorphic 2473 // Checkes whether this PropertyAccessInfo can be handled as a monomorphic
2462 // load named. It additionally fills in the fields necessary to generate the 2474 // load named. It additionally fills in the fields necessary to generate the
2463 // lookup code. 2475 // lookup code.
2464 bool CanAccessMonomorphic(); 2476 bool CanAccessMonomorphic();
2465 2477
2466 // Checks whether all types behave uniform when loading name. If all maps 2478 // Checks whether all types behave uniform when loading name. If all maps
2467 // behave the same, a single monomorphic load instruction can be emitted, 2479 // behave the same, a single monomorphic load instruction can be emitted,
2468 // guarded by a single map-checks instruction that whether the receiver is 2480 // guarded by a single map-checks instruction that whether the receiver is
2469 // an instance of any of the types. 2481 // an instance of any of the types.
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
2565 number_ = number; 2577 number_ = number;
2566 } 2578 }
2567 void LookupTransition(Map* map, Name* name, PropertyAttributes attributes) { 2579 void LookupTransition(Map* map, Name* name, PropertyAttributes attributes) {
2568 Map* target = 2580 Map* target =
2569 TransitionArray::SearchTransition(map, kData, name, attributes); 2581 TransitionArray::SearchTransition(map, kData, name, attributes);
2570 if (target == NULL) return NotFound(); 2582 if (target == NULL) return NotFound();
2571 lookup_type_ = TRANSITION_TYPE; 2583 lookup_type_ = TRANSITION_TYPE;
2572 transition_ = handle(target); 2584 transition_ = handle(target);
2573 number_ = transition_->LastAdded(); 2585 number_ = transition_->LastAdded();
2574 details_ = transition_->instance_descriptors()->GetDetails(number_); 2586 details_ = transition_->instance_descriptors()->GetDetails(number_);
2587 MarkAsInitializingStore();
2575 } 2588 }
2576 void NotFound() { 2589 void NotFound() {
2577 lookup_type_ = NOT_FOUND; 2590 lookup_type_ = NOT_FOUND;
2578 details_ = PropertyDetails::Empty(); 2591 details_ = PropertyDetails::Empty();
2579 } 2592 }
2580 Representation representation() const { 2593 Representation representation() const {
2581 DCHECK(IsFound()); 2594 DCHECK(IsFound());
2582 return details_.representation(); 2595 return details_.representation();
2583 } 2596 }
2584 bool IsTransitionToData() const { 2597 bool IsTransitionToData() const {
(...skipping 26 matching lines...) Expand all
2611 Handle<JSObject> api_holder_; 2624 Handle<JSObject> api_holder_;
2612 Handle<Object> constant_; 2625 Handle<Object> constant_;
2613 SmallMapList field_maps_; 2626 SmallMapList field_maps_;
2614 HType field_type_; 2627 HType field_type_;
2615 HObjectAccess access_; 2628 HObjectAccess access_;
2616 2629
2617 enum { NOT_FOUND, DESCRIPTOR_TYPE, TRANSITION_TYPE } lookup_type_; 2630 enum { NOT_FOUND, DESCRIPTOR_TYPE, TRANSITION_TYPE } lookup_type_;
2618 Handle<Map> transition_; 2631 Handle<Map> transition_;
2619 int number_; 2632 int number_;
2620 PropertyDetails details_; 2633 PropertyDetails details_;
2634 StoreFieldOrKeyedMode store_mode_;
2621 }; 2635 };
2622 2636
2623 HValue* BuildMonomorphicAccess(PropertyAccessInfo* info, HValue* object, 2637 HValue* BuildMonomorphicAccess(PropertyAccessInfo* info, HValue* object,
2624 HValue* checked_object, HValue* value, 2638 HValue* checked_object, HValue* value,
2625 BailoutId ast_id, BailoutId return_id, 2639 BailoutId ast_id, BailoutId return_id,
2626 bool can_inline_accessor = true); 2640 bool can_inline_accessor = true);
2627 2641
2628 HValue* BuildNamedAccess(PropertyAccessType access, BailoutId ast_id, 2642 HValue* BuildNamedAccess(PropertyAccessType access, BailoutId ast_id,
2629 BailoutId reutrn_id, Expression* expr, 2643 BailoutId reutrn_id, Expression* expr,
2630 FeedbackVectorSlot slot, HValue* object, 2644 FeedbackVectorSlot slot, HValue* object,
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after
2982 } 2996 }
2983 2997
2984 private: 2998 private:
2985 HOptimizedGraphBuilder* builder_; 2999 HOptimizedGraphBuilder* builder_;
2986 }; 3000 };
2987 3001
2988 } // namespace internal 3002 } // namespace internal
2989 } // namespace v8 3003 } // namespace v8
2990 3004
2991 #endif // V8_CRANKSHAFT_HYDROGEN_H_ 3005 #endif // V8_CRANKSHAFT_HYDROGEN_H_
OLDNEW
« no previous file with comments | « no previous file | src/crankshaft/hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698