| OLD | NEW | 
|---|
| 1 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 #ifndef VM_FLOW_GRAPH_ALLOCATOR_H_ | 5 #ifndef VM_FLOW_GRAPH_ALLOCATOR_H_ | 
| 6 #define VM_FLOW_GRAPH_ALLOCATOR_H_ | 6 #define VM_FLOW_GRAPH_ALLOCATOR_H_ | 
| 7 | 7 | 
| 8 #include "vm/flow_graph.h" | 8 #include "vm/flow_graph.h" | 
| 9 #include "vm/growable_array.h" | 9 #include "vm/growable_array.h" | 
| 10 #include "vm/intermediate_language.h" | 10 #include "vm/intermediate_language.h" | 
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 106                                        BitVector* interference_set); | 106                                        BitVector* interference_set); | 
| 107   void ProcessEnvironmentUses(BlockEntryInstr* block, Instruction* current); | 107   void ProcessEnvironmentUses(BlockEntryInstr* block, Instruction* current); | 
| 108   void ProcessMaterializationUses(BlockEntryInstr* block, | 108   void ProcessMaterializationUses(BlockEntryInstr* block, | 
| 109                                   const intptr_t block_start_pos, | 109                                   const intptr_t block_start_pos, | 
| 110                                   const intptr_t use_pos, | 110                                   const intptr_t use_pos, | 
| 111                                   MaterializeObjectInstr* mat); | 111                                   MaterializeObjectInstr* mat); | 
| 112   void ProcessOneInput(BlockEntryInstr* block, | 112   void ProcessOneInput(BlockEntryInstr* block, | 
| 113                        intptr_t pos, | 113                        intptr_t pos, | 
| 114                        Location* in_ref, | 114                        Location* in_ref, | 
| 115                        Value* input, | 115                        Value* input, | 
| 116                        intptr_t vreg); | 116                        intptr_t vreg, | 
|  | 117                        RegisterSet* live_registers); | 
| 117   void ProcessOneOutput(BlockEntryInstr* block, | 118   void ProcessOneOutput(BlockEntryInstr* block, | 
| 118                         Instruction* current, | 119                         Instruction* current, | 
| 119                         intptr_t pos, | 120                         intptr_t pos, | 
| 120                         Location* out, | 121                         Location* out, | 
| 121                         Definition* def, | 122                         Definition* def, | 
| 122                         intptr_t vreg, | 123                         intptr_t vreg, | 
| 123                         bool output_same_as_first_input, | 124                         bool output_same_as_first_input, | 
| 124                         Location* in_ref, | 125                         Location* in_ref, | 
| 125                         Definition* input, | 126                         Definition* input, | 
| 126                         intptr_t input_vreg, | 127                         intptr_t input_vreg, | 
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 310 | 311 | 
| 311   // List of used spill slots. Contains positions after which spill slots | 312   // List of used spill slots. Contains positions after which spill slots | 
| 312   // become free and can be reused for allocation. | 313   // become free and can be reused for allocation. | 
| 313   GrowableArray<intptr_t> spill_slots_; | 314   GrowableArray<intptr_t> spill_slots_; | 
| 314 | 315 | 
| 315   // For every used spill slot contains a flag determines whether it is | 316   // For every used spill slot contains a flag determines whether it is | 
| 316   // QuadSpillSlot to ensure that indexes of quad and double spill slots | 317   // QuadSpillSlot to ensure that indexes of quad and double spill slots | 
| 317   // are disjoint. | 318   // are disjoint. | 
| 318   GrowableArray<bool> quad_spill_slots_; | 319   GrowableArray<bool> quad_spill_slots_; | 
| 319 | 320 | 
|  | 321   // Track whether a spill slot is expected to hold a tagged or untagged value. | 
|  | 322   // This is used to keep tagged and untagged spill slots disjoint. See bug | 
|  | 323   // #18955 for details. | 
|  | 324   GrowableArray<bool> untagged_spill_slots_; | 
|  | 325 | 
| 320   intptr_t cpu_spill_slot_count_; | 326   intptr_t cpu_spill_slot_count_; | 
| 321 | 327 | 
| 322   DISALLOW_COPY_AND_ASSIGN(FlowGraphAllocator); | 328   DISALLOW_COPY_AND_ASSIGN(FlowGraphAllocator); | 
| 323 }; | 329 }; | 
| 324 | 330 | 
| 325 | 331 | 
| 326 // Additional information about a block that is not contained in a | 332 // Additional information about a block that is not contained in a | 
| 327 // block entry. | 333 // block entry. | 
| 328 class BlockInfo : public ZoneAllocated { | 334 class BlockInfo : public ZoneAllocated { | 
| 329  public: | 335  public: | 
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 491   void UpdateAfterSplit(intptr_t first_use_after_split_pos); | 497   void UpdateAfterSplit(intptr_t first_use_after_split_pos); | 
| 492   bool Advance(intptr_t start); | 498   bool Advance(intptr_t start); | 
| 493 | 499 | 
| 494   UseInterval* first_pending_use_interval() const { | 500   UseInterval* first_pending_use_interval() const { | 
| 495     return first_pending_use_interval_; | 501     return first_pending_use_interval_; | 
| 496   } | 502   } | 
| 497 | 503 | 
| 498   Location FirstHint(); | 504   Location FirstHint(); | 
| 499   UsePosition* FirstRegisterUse(intptr_t after_pos); | 505   UsePosition* FirstRegisterUse(intptr_t after_pos); | 
| 500   UsePosition* FirstRegisterBeneficialUse(intptr_t after_pos); | 506   UsePosition* FirstRegisterBeneficialUse(intptr_t after_pos); | 
|  | 507   UsePosition* FirstInterferingUse(intptr_t after_pos); | 
| 501 | 508 | 
| 502  private: | 509  private: | 
| 503   UseInterval* first_pending_use_interval_; | 510   UseInterval* first_pending_use_interval_; | 
| 504   UsePosition* first_register_use_; | 511   UsePosition* first_register_use_; | 
| 505   UsePosition* first_register_beneficial_use_; | 512   UsePosition* first_register_beneficial_use_; | 
| 506   UsePosition* first_hinted_use_; | 513   UsePosition* first_hinted_use_; | 
| 507 | 514 | 
| 508   DISALLOW_COPY_AND_ASSIGN(AllocationFinger); | 515   DISALLOW_COPY_AND_ASSIGN(AllocationFinger); | 
| 509 }; | 516 }; | 
| 510 | 517 | 
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 663 | 670 | 
| 664   AllocationFinger finger_; | 671   AllocationFinger finger_; | 
| 665 | 672 | 
| 666   DISALLOW_COPY_AND_ASSIGN(LiveRange); | 673   DISALLOW_COPY_AND_ASSIGN(LiveRange); | 
| 667 }; | 674 }; | 
| 668 | 675 | 
| 669 | 676 | 
| 670 }  // namespace dart | 677 }  // namespace dart | 
| 671 | 678 | 
| 672 #endif  // VM_FLOW_GRAPH_ALLOCATOR_H_ | 679 #endif  // VM_FLOW_GRAPH_ALLOCATOR_H_ | 
| OLD | NEW | 
|---|