OLD | NEW |
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_LITHIUM_H_ | 5 #ifndef V8_LITHIUM_H_ |
6 #define V8_LITHIUM_H_ | 6 #define V8_LITHIUM_H_ |
7 | 7 |
8 #include <set> | 8 #include <set> |
9 | 9 |
10 #include "allocation.h" | 10 #include "allocation.h" |
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
645 inlined_closures_.Add(closure, zone()); | 645 inlined_closures_.Add(closure, zone()); |
646 } | 646 } |
647 | 647 |
648 void AddDeprecationDependency(Handle<Map> map) { | 648 void AddDeprecationDependency(Handle<Map> map) { |
649 ASSERT(!map->is_deprecated()); | 649 ASSERT(!map->is_deprecated()); |
650 if (!map->CanBeDeprecated()) return; | 650 if (!map->CanBeDeprecated()) return; |
651 ASSERT(!info_->IsStub()); | 651 ASSERT(!info_->IsStub()); |
652 deprecation_dependencies_.insert(map); | 652 deprecation_dependencies_.insert(map); |
653 } | 653 } |
654 | 654 |
| 655 void AddStabilityDependency(Handle<Map> map) { |
| 656 ASSERT(map->is_stable()); |
| 657 if (!map->CanTransition()) return; |
| 658 ASSERT(!info_->IsStub()); |
| 659 stability_dependencies_.insert(map); |
| 660 } |
| 661 |
655 Zone* zone() const { return info_->zone(); } | 662 Zone* zone() const { return info_->zone(); } |
656 | 663 |
657 Handle<Code> Codegen(); | 664 Handle<Code> Codegen(); |
658 | 665 |
659 void set_allocated_double_registers(BitVector* allocated_registers); | 666 void set_allocated_double_registers(BitVector* allocated_registers); |
660 BitVector* allocated_double_registers() { | 667 BitVector* allocated_double_registers() { |
661 return allocated_double_registers_; | 668 return allocated_double_registers_; |
662 } | 669 } |
663 | 670 |
664 protected: | 671 protected: |
665 LChunk(CompilationInfo* info, HGraph* graph); | 672 LChunk(CompilationInfo* info, HGraph* graph); |
666 | 673 |
667 int spill_slot_count_; | 674 int spill_slot_count_; |
668 | 675 |
669 private: | 676 private: |
670 typedef std::less<Handle<Map> > MapLess; | 677 typedef std::less<Handle<Map> > MapLess; |
671 typedef zone_allocator<Handle<Map> > MapAllocator; | 678 typedef zone_allocator<Handle<Map> > MapAllocator; |
672 typedef std::set<Handle<Map>, MapLess, MapAllocator> MapSet; | 679 typedef std::set<Handle<Map>, MapLess, MapAllocator> MapSet; |
673 | 680 |
674 void CommitDependencies(Handle<Code> code) const; | 681 void CommitDependencies(Handle<Code> code) const; |
675 | 682 |
676 CompilationInfo* info_; | 683 CompilationInfo* info_; |
677 HGraph* const graph_; | 684 HGraph* const graph_; |
678 BitVector* allocated_double_registers_; | 685 BitVector* allocated_double_registers_; |
679 ZoneList<LInstruction*> instructions_; | 686 ZoneList<LInstruction*> instructions_; |
680 ZoneList<LPointerMap*> pointer_maps_; | 687 ZoneList<LPointerMap*> pointer_maps_; |
681 ZoneList<Handle<JSFunction> > inlined_closures_; | 688 ZoneList<Handle<JSFunction> > inlined_closures_; |
682 MapSet deprecation_dependencies_; | 689 MapSet deprecation_dependencies_; |
| 690 MapSet stability_dependencies_; |
683 }; | 691 }; |
684 | 692 |
685 | 693 |
686 class LChunkBuilderBase BASE_EMBEDDED { | 694 class LChunkBuilderBase BASE_EMBEDDED { |
687 public: | 695 public: |
688 explicit LChunkBuilderBase(Zone* zone) | 696 explicit LChunkBuilderBase(Zone* zone) |
689 : argument_count_(0), | 697 : argument_count_(0), |
690 zone_(zone) { } | 698 zone_(zone) { } |
691 | 699 |
692 virtual ~LChunkBuilderBase() { } | 700 virtual ~LChunkBuilderBase() { } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
730 private: | 738 private: |
731 LChunk* chunk_; | 739 LChunk* chunk_; |
732 | 740 |
733 DISALLOW_COPY_AND_ASSIGN(LPhase); | 741 DISALLOW_COPY_AND_ASSIGN(LPhase); |
734 }; | 742 }; |
735 | 743 |
736 | 744 |
737 } } // namespace v8::internal | 745 } } // namespace v8::internal |
738 | 746 |
739 #endif // V8_LITHIUM_H_ | 747 #endif // V8_LITHIUM_H_ |
OLD | NEW |