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

Side by Side Diff: runtime/vm/flow_graph_compiler.h

Issue 2739663002: Revert "Replacing TrySync with Metadata" (Closed)
Patch Set: Created 3 years, 9 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 | « runtime/vm/exceptions.cc ('k') | runtime/vm/flow_graph_compiler.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 (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 RUNTIME_VM_FLOW_GRAPH_COMPILER_H_ 5 #ifndef RUNTIME_VM_FLOW_GRAPH_COMPILER_H_
6 #define RUNTIME_VM_FLOW_GRAPH_COMPILER_H_ 6 #define RUNTIME_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"
11 #include "vm/code_generator.h" 11 #include "vm/code_generator.h"
12 #include "vm/intermediate_language.h" 12 #include "vm/intermediate_language.h"
13 13
14 namespace dart { 14 namespace dart {
15 15
16 // Forward declarations. 16 // Forward declarations.
17 class Code; 17 class Code;
18 class DeoptInfoBuilder; 18 class DeoptInfoBuilder;
19 class FlowGraph; 19 class FlowGraph;
20 class FlowGraphCompiler; 20 class FlowGraphCompiler;
21 class Function; 21 class Function;
22 template <typename T> 22 template <typename T>
23 class GrowableArray; 23 class GrowableArray;
24 class ParsedFunction; 24 class ParsedFunction;
25 25
26
27 class ParallelMoveResolver : public ValueObject { 26 class ParallelMoveResolver : public ValueObject {
28 public: 27 public:
29 explicit ParallelMoveResolver(FlowGraphCompiler* compiler); 28 explicit ParallelMoveResolver(FlowGraphCompiler* compiler);
30 29
31 // Resolve a set of parallel moves, emitting assembler instructions. 30 // Resolve a set of parallel moves, emitting assembler instructions.
32 void EmitNativeCode(ParallelMoveInstr* parallel_move); 31 void EmitNativeCode(ParallelMoveInstr* parallel_move);
33 32
34 private: 33 private:
35 class ScratchFpuRegisterScope : public ValueObject { 34 class ScratchFpuRegisterScope : public ValueObject {
36 public: 35 public:
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 intptr_t deopt_id, 354 intptr_t deopt_id,
356 const RuntimeEntry& entry, 355 const RuntimeEntry& entry,
357 intptr_t argument_count, 356 intptr_t argument_count,
358 LocationSummary* locs); 357 LocationSummary* locs);
359 358
360 void GenerateCall(TokenPosition token_pos, 359 void GenerateCall(TokenPosition token_pos,
361 const StubEntry& stub_entry, 360 const StubEntry& stub_entry,
362 RawPcDescriptors::Kind kind, 361 RawPcDescriptors::Kind kind,
363 LocationSummary* locs); 362 LocationSummary* locs);
364 363
365 void GenerateCallWithDeopt(TokenPosition token_pos,
366 intptr_t deopt_id,
367 const StubEntry& stub_entry,
368 RawPcDescriptors::Kind kind,
369 LocationSummary* locs);
370
371 void GeneratePatchableCall(TokenPosition token_pos, 364 void GeneratePatchableCall(TokenPosition token_pos,
372 const StubEntry& stub_entry, 365 const StubEntry& stub_entry,
373 RawPcDescriptors::Kind kind, 366 RawPcDescriptors::Kind kind,
374 LocationSummary* locs); 367 LocationSummary* locs);
375 368
376 void GenerateDartCall(intptr_t deopt_id, 369 void GenerateDartCall(intptr_t deopt_id,
377 TokenPosition token_pos, 370 TokenPosition token_pos,
378 const StubEntry& stub_entry, 371 const StubEntry& stub_entry,
379 RawPcDescriptors::Kind kind, 372 RawPcDescriptors::Kind kind,
380 LocationSummary* locs); 373 LocationSummary* locs);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 TokenPosition token_pos); 460 TokenPosition token_pos);
468 Condition EmitEqualityRegRegCompare(Register left, 461 Condition EmitEqualityRegRegCompare(Register left,
469 Register right, 462 Register right,
470 bool needs_number_check, 463 bool needs_number_check,
471 TokenPosition token_pos); 464 TokenPosition token_pos);
472 465
473 bool NeedsEdgeCounter(TargetEntryInstr* block); 466 bool NeedsEdgeCounter(TargetEntryInstr* block);
474 467
475 void EmitEdgeCounter(intptr_t edge_id); 468 void EmitEdgeCounter(intptr_t edge_id);
476 #endif // !defined(TARGET_ARCH_DBC) 469 #endif // !defined(TARGET_ARCH_DBC)
477 void EmitCatchEntryState(
478 Environment* env = NULL,
479 intptr_t try_index = CatchClauseNode::kInvalidTryIndex);
480 470
481 void EmitCallsiteMetaData(TokenPosition token_pos, 471 void EmitTrySync(Instruction* instr, intptr_t try_index);
482 intptr_t deopt_id,
483 RawPcDescriptors::Kind kind,
484 LocationSummary* locs);
485 472
486 void EmitComment(Instruction* instr); 473 void EmitComment(Instruction* instr);
487 474
488 intptr_t StackSize() const; 475 intptr_t StackSize() const;
489 476
490 // Returns assembler label associated with the given block entry. 477 // Returns assembler label associated with the given block entry.
491 Label* GetJumpLabel(BlockEntryInstr* block_entry) const; 478 Label* GetJumpLabel(BlockEntryInstr* block_entry) const;
492 bool WasCompacted(BlockEntryInstr* block_entry) const; 479 bool WasCompacted(BlockEntryInstr* block_entry) const;
493 480
494 // Returns the label of the fall-through of the current block. 481 // Returns the label of the fall-through of the current block.
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 523
537 CompilerDeoptInfo* AddDeoptIndexAtCall(intptr_t deopt_id); 524 CompilerDeoptInfo* AddDeoptIndexAtCall(intptr_t deopt_id);
538 525
539 void AddSlowPathCode(SlowPathCode* slow_path); 526 void AddSlowPathCode(SlowPathCode* slow_path);
540 527
541 void FinalizeExceptionHandlers(const Code& code); 528 void FinalizeExceptionHandlers(const Code& code);
542 void FinalizePcDescriptors(const Code& code); 529 void FinalizePcDescriptors(const Code& code);
543 RawArray* CreateDeoptInfo(Assembler* assembler); 530 RawArray* CreateDeoptInfo(Assembler* assembler);
544 void FinalizeStackMaps(const Code& code); 531 void FinalizeStackMaps(const Code& code);
545 void FinalizeVarDescriptors(const Code& code); 532 void FinalizeVarDescriptors(const Code& code);
546 void FinalizeCatchEntryStateMap(const Code& code);
547 void FinalizeStaticCallTargetsTable(const Code& code); 533 void FinalizeStaticCallTargetsTable(const Code& code);
548 void FinalizeCodeSourceMap(const Code& code); 534 void FinalizeCodeSourceMap(const Code& code);
549 535
550 const Class& double_class() const { return double_class_; } 536 const Class& double_class() const { return double_class_; }
551 const Class& mint_class() const { return mint_class_; } 537 const Class& mint_class() const { return mint_class_; }
552 const Class& float32x4_class() const { return float32x4_class_; } 538 const Class& float32x4_class() const { return float32x4_class_; }
553 const Class& float64x2_class() const { return float64x2_class_; } 539 const Class& float64x2_class() const { return float64x2_class_; }
554 const Class& int32x4_class() const { return int32x4_class_; } 540 const Class& int32x4_class() const { return int32x4_class_; }
555 541
556 const Class& BoxClassFor(Representation rep); 542 const Class& BoxClassFor(Representation rep);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 void RecordAfterCallHelper(TokenPosition token_pos, 602 void RecordAfterCallHelper(TokenPosition token_pos,
617 intptr_t deopt_id, 603 intptr_t deopt_id,
618 intptr_t argument_count, 604 intptr_t argument_count,
619 CallResult result, 605 CallResult result,
620 LocationSummary* locs); 606 LocationSummary* locs);
621 void RecordAfterCall(Instruction* instr, CallResult result); 607 void RecordAfterCall(Instruction* instr, CallResult result);
622 #endif 608 #endif
623 609
624 private: 610 private:
625 friend class CheckStackOverflowSlowPath; // For pending_deoptimization_env_. 611 friend class CheckStackOverflowSlowPath; // For pending_deoptimization_env_.
626 friend class CheckedSmiSlowPath; // Same.
627 friend class CheckedSmiComparisonSlowPath; // Same.
628 612
629 static bool ShouldInlineSmiStringHashCode(const ICData& ic_data); 613 static bool ShouldInlineSmiStringHashCode(const ICData& ic_data);
630 614
631 void EmitFrameEntry(); 615 void EmitFrameEntry();
632 616
633 void AddStaticCallTarget(const Function& function); 617 void AddStaticCallTarget(const Function& function);
634 618
635 void GenerateDeferredCode(); 619 void GenerateDeferredCode();
636 620
637 void EmitInstructionPrologue(Instruction* instr); 621 void EmitInstructionPrologue(Instruction* instr);
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 #endif 764 #endif
781 765
782 // Compiler specific per-block state. Indexed by postorder block number 766 // Compiler specific per-block state. Indexed by postorder block number
783 // for convenience. This is not the block's index in the block order, 767 // for convenience. This is not the block's index in the block order,
784 // which is reverse postorder. 768 // which is reverse postorder.
785 BlockEntryInstr* current_block_; 769 BlockEntryInstr* current_block_;
786 ExceptionHandlerList* exception_handlers_list_; 770 ExceptionHandlerList* exception_handlers_list_;
787 DescriptorList* pc_descriptors_list_; 771 DescriptorList* pc_descriptors_list_;
788 StackMapTableBuilder* stackmap_table_builder_; 772 StackMapTableBuilder* stackmap_table_builder_;
789 CodeSourceMapBuilder* code_source_map_builder_; 773 CodeSourceMapBuilder* code_source_map_builder_;
790 CatchEntryStateMapBuilder* catch_entry_state_maps_builder_;
791 GrowableArray<BlockInfo*> block_info_; 774 GrowableArray<BlockInfo*> block_info_;
792 GrowableArray<CompilerDeoptInfo*> deopt_infos_; 775 GrowableArray<CompilerDeoptInfo*> deopt_infos_;
793 GrowableArray<SlowPathCode*> slow_path_code_; 776 GrowableArray<SlowPathCode*> slow_path_code_;
794 // Stores static call targets as well as stub targets. 777 // Stores static call targets as well as stub targets.
795 // TODO(srdjan): Evaluate if we should store allocation stub targets into a 778 // TODO(srdjan): Evaluate if we should store allocation stub targets into a
796 // separate table? 779 // separate table?
797 GrowableArray<StaticCallsStruct*> static_calls_target_table_; 780 GrowableArray<StaticCallsStruct*> static_calls_target_table_;
798 const bool is_optimizing_; 781 const bool is_optimizing_;
799 // Set to true if optimized code has IC calls. 782 // Set to true if optimized code has IC calls.
800 bool may_reoptimize_; 783 bool may_reoptimize_;
(...skipping 19 matching lines...) Expand all
820 ZoneGrowableArray<const ICData*>* deopt_id_to_ic_data_; 803 ZoneGrowableArray<const ICData*>* deopt_id_to_ic_data_;
821 804
822 Array& edge_counters_array_; 805 Array& edge_counters_array_;
823 806
824 DISALLOW_COPY_AND_ASSIGN(FlowGraphCompiler); 807 DISALLOW_COPY_AND_ASSIGN(FlowGraphCompiler);
825 }; 808 };
826 809
827 } // namespace dart 810 } // namespace dart
828 811
829 #endif // RUNTIME_VM_FLOW_GRAPH_COMPILER_H_ 812 #endif // RUNTIME_VM_FLOW_GRAPH_COMPILER_H_
OLDNEW
« no previous file with comments | « runtime/vm/exceptions.cc ('k') | runtime/vm/flow_graph_compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698