OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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_COMPILER_H_ | 5 #ifndef VM_FLOW_GRAPH_COMPILER_H_ |
6 #define VM_FLOW_GRAPH_COMPILER_H_ | 6 #define VM_FLOW_GRAPH_COMPILER_H_ |
7 | 7 |
8 #include "vm/allocation.h" | 8 #include "vm/allocation.h" |
9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
10 #include "vm/code_descriptors.h" | 10 #include "vm/code_descriptors.h" |
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 intptr_t index_scale, | 445 intptr_t index_scale, |
446 Register array, | 446 Register array, |
447 Register index); | 447 Register index); |
448 static Address ExternalElementAddressForIntIndex(intptr_t index_scale, | 448 static Address ExternalElementAddressForIntIndex(intptr_t index_scale, |
449 Register array, | 449 Register array, |
450 intptr_t offset); | 450 intptr_t offset); |
451 static Address ExternalElementAddressForRegIndex(intptr_t index_scale, | 451 static Address ExternalElementAddressForRegIndex(intptr_t index_scale, |
452 Register array, | 452 Register array, |
453 Register index); | 453 Register index); |
454 | 454 |
| 455 // Returns 'sorted' array in decreasing count order. |
| 456 static void SortICDataByCount(const ICData& ic_data, |
| 457 GrowableArray<CidTarget>* sorted); |
| 458 |
455 private: | 459 private: |
456 friend class CheckStackOverflowSlowPath; // For pending_deoptimization_env_. | 460 friend class CheckStackOverflowSlowPath; // For pending_deoptimization_env_. |
457 | 461 |
458 void EmitFrameEntry(); | 462 void EmitFrameEntry(); |
459 | 463 |
460 void AddStaticCallTarget(const Function& function); | 464 void AddStaticCallTarget(const Function& function); |
461 | 465 |
462 void GenerateDeferredCode(); | 466 void GenerateDeferredCode(); |
463 | 467 |
464 void EmitInstructionPrologue(Instruction* instr); | 468 void EmitInstructionPrologue(Instruction* instr); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
534 // Perform a greedy local register allocation. Consider all registers free. | 538 // Perform a greedy local register allocation. Consider all registers free. |
535 void AllocateRegistersLocally(Instruction* instr); | 539 void AllocateRegistersLocally(Instruction* instr); |
536 | 540 |
537 // Map a block number in a forward iteration into the block number in the | 541 // Map a block number in a forward iteration into the block number in the |
538 // corresponding reverse iteration. Used to obtain an index into | 542 // corresponding reverse iteration. Used to obtain an index into |
539 // block_order for reverse iterations. | 543 // block_order for reverse iterations. |
540 intptr_t reverse_index(intptr_t index) const { | 544 intptr_t reverse_index(intptr_t index) const { |
541 return block_order_.length() - index - 1; | 545 return block_order_.length() - index - 1; |
542 } | 546 } |
543 | 547 |
544 // Returns 'sorted' array in decreasing count order. | |
545 // The expected number of elements to sort is less than 10. | |
546 static void SortICDataByCount(const ICData& ic_data, | |
547 GrowableArray<CidTarget>* sorted); | |
548 | |
549 void CompactBlock(BlockEntryInstr* block); | 548 void CompactBlock(BlockEntryInstr* block); |
550 void CompactBlocks(); | 549 void CompactBlocks(); |
551 | 550 |
552 class Assembler* assembler_; | 551 class Assembler* assembler_; |
553 const ParsedFunction& parsed_function_; | 552 const ParsedFunction& parsed_function_; |
554 const FlowGraph& flow_graph_; | 553 const FlowGraph& flow_graph_; |
555 const GrowableArray<BlockEntryInstr*>& block_order_; | 554 const GrowableArray<BlockEntryInstr*>& block_order_; |
556 | 555 |
557 // Compiler specific per-block state. Indexed by postorder block number | 556 // Compiler specific per-block state. Indexed by postorder block number |
558 // for convenience. This is not the block's index in the block order, | 557 // for convenience. This is not the block's index in the block order, |
(...skipping 22 matching lines...) Expand all Loading... |
581 // that should be used when deoptimizing we store it in this variable. | 580 // that should be used when deoptimizing we store it in this variable. |
582 // In future AddDeoptStub should be moved out of the instruction template. | 581 // In future AddDeoptStub should be moved out of the instruction template. |
583 Environment* pending_deoptimization_env_; | 582 Environment* pending_deoptimization_env_; |
584 | 583 |
585 DISALLOW_COPY_AND_ASSIGN(FlowGraphCompiler); | 584 DISALLOW_COPY_AND_ASSIGN(FlowGraphCompiler); |
586 }; | 585 }; |
587 | 586 |
588 } // namespace dart | 587 } // namespace dart |
589 | 588 |
590 #endif // VM_FLOW_GRAPH_COMPILER_H_ | 589 #endif // VM_FLOW_GRAPH_COMPILER_H_ |
OLD | NEW |