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

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

Issue 254723003: Remember all deopt reasons in ic_data, not just the last one. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/deopt_instructions.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 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 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 // List of moves not yet resolved. 103 // List of moves not yet resolved.
104 GrowableArray<MoveOperands*> moves_; 104 GrowableArray<MoveOperands*> moves_;
105 }; 105 };
106 106
107 107
108 // Used for describing a deoptimization point after call (lazy deoptimization). 108 // Used for describing a deoptimization point after call (lazy deoptimization).
109 // For deoptimization before instruction use class CompilerDeoptInfoWithStub. 109 // For deoptimization before instruction use class CompilerDeoptInfoWithStub.
110 class CompilerDeoptInfo : public ZoneAllocated { 110 class CompilerDeoptInfo : public ZoneAllocated {
111 public: 111 public:
112 CompilerDeoptInfo(intptr_t deopt_id, 112 CompilerDeoptInfo(intptr_t deopt_id,
113 DeoptReasonId reason, 113 ICData::DeoptReasonId reason,
114 Environment* deopt_env) 114 Environment* deopt_env)
115 : pc_offset_(-1), 115 : pc_offset_(-1),
116 deopt_id_(deopt_id), 116 deopt_id_(deopt_id),
117 reason_(reason), 117 reason_(reason),
118 deopt_env_(deopt_env) { 118 deopt_env_(deopt_env) {
119 ASSERT(deopt_env != NULL); 119 ASSERT(deopt_env != NULL);
120 } 120 }
121 121
122 RawDeoptInfo* CreateDeoptInfo(FlowGraphCompiler* compiler, 122 RawDeoptInfo* CreateDeoptInfo(FlowGraphCompiler* compiler,
123 DeoptInfoBuilder* builder, 123 DeoptInfoBuilder* builder,
124 const Array& deopt_table); 124 const Array& deopt_table);
125 125
126 126
127 // No code needs to be generated. 127 // No code needs to be generated.
128 virtual void GenerateCode(FlowGraphCompiler* compiler, intptr_t stub_ix) {} 128 virtual void GenerateCode(FlowGraphCompiler* compiler, intptr_t stub_ix) {}
129 129
130 intptr_t pc_offset() const { return pc_offset_; } 130 intptr_t pc_offset() const { return pc_offset_; }
131 void set_pc_offset(intptr_t offset) { pc_offset_ = offset; } 131 void set_pc_offset(intptr_t offset) { pc_offset_ = offset; }
132 132
133 intptr_t deopt_id() const { return deopt_id_; } 133 intptr_t deopt_id() const { return deopt_id_; }
134 DeoptReasonId reason() const { return reason_; } 134 ICData::DeoptReasonId reason() const { return reason_; }
135 const Environment* deopt_env() const { return deopt_env_; } 135 const Environment* deopt_env() const { return deopt_env_; }
136 136
137 private: 137 private:
138 void EmitMaterializations(Environment* env, DeoptInfoBuilder* builder); 138 void EmitMaterializations(Environment* env, DeoptInfoBuilder* builder);
139 139
140 void AllocateIncomingParametersRecursive(Environment* env, 140 void AllocateIncomingParametersRecursive(Environment* env,
141 intptr_t* stack_height); 141 intptr_t* stack_height);
142 142
143 intptr_t pc_offset_; 143 intptr_t pc_offset_;
144 const intptr_t deopt_id_; 144 const intptr_t deopt_id_;
145 const DeoptReasonId reason_; 145 const ICData::DeoptReasonId reason_;
146 Environment* deopt_env_; 146 Environment* deopt_env_;
147 147
148 DISALLOW_COPY_AND_ASSIGN(CompilerDeoptInfo); 148 DISALLOW_COPY_AND_ASSIGN(CompilerDeoptInfo);
149 }; 149 };
150 150
151 151
152 class CompilerDeoptInfoWithStub : public CompilerDeoptInfo { 152 class CompilerDeoptInfoWithStub : public CompilerDeoptInfo {
153 public: 153 public:
154 CompilerDeoptInfoWithStub(intptr_t deopt_id, 154 CompilerDeoptInfoWithStub(intptr_t deopt_id,
155 DeoptReasonId reason, 155 ICData::DeoptReasonId reason,
156 Environment* deopt_env) 156 Environment* deopt_env)
157 : CompilerDeoptInfo(deopt_id, reason, deopt_env), entry_label_() { 157 : CompilerDeoptInfo(deopt_id, reason, deopt_env), entry_label_() {
158 ASSERT(reason != kDeoptAtCall); 158 ASSERT(reason != ICData::kDeoptAtCall);
159 } 159 }
160 160
161 Label* entry_label() { return &entry_label_; } 161 Label* entry_label() { return &entry_label_; }
162 162
163 // Implementation is in architecture specific file. 163 // Implementation is in architecture specific file.
164 virtual void GenerateCode(FlowGraphCompiler* compiler, intptr_t stub_ix); 164 virtual void GenerateCode(FlowGraphCompiler* compiler, intptr_t stub_ix);
165 165
166 private: 166 private:
167 Label entry_label_; 167 Label entry_label_;
168 168
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 intptr_t pc_offset, 407 intptr_t pc_offset,
408 const Array& handler_types, 408 const Array& handler_types,
409 bool needs_stacktrace); 409 bool needs_stacktrace);
410 void SetNeedsStacktrace(intptr_t try_index); 410 void SetNeedsStacktrace(intptr_t try_index);
411 void AddCurrentDescriptor(PcDescriptors::Kind kind, 411 void AddCurrentDescriptor(PcDescriptors::Kind kind,
412 intptr_t deopt_id, 412 intptr_t deopt_id,
413 intptr_t token_pos); 413 intptr_t token_pos);
414 414
415 void RecordSafepoint(LocationSummary* locs); 415 void RecordSafepoint(LocationSummary* locs);
416 416
417 Label* AddDeoptStub(intptr_t deopt_id, DeoptReasonId reason); 417 Label* AddDeoptStub(intptr_t deopt_id, ICData::DeoptReasonId reason);
418 418
419 void AddDeoptIndexAtCall(intptr_t deopt_id, intptr_t token_pos); 419 void AddDeoptIndexAtCall(intptr_t deopt_id, intptr_t token_pos);
420 420
421 void AddSlowPathCode(SlowPathCode* slow_path); 421 void AddSlowPathCode(SlowPathCode* slow_path);
422 422
423 void FinalizeExceptionHandlers(const Code& code); 423 void FinalizeExceptionHandlers(const Code& code);
424 void FinalizePcDescriptors(const Code& code); 424 void FinalizePcDescriptors(const Code& code);
425 void FinalizeDeoptInfo(const Code& code); 425 void FinalizeDeoptInfo(const Code& code);
426 void FinalizeStackmaps(const Code& code); 426 void FinalizeStackmaps(const Code& code);
427 void FinalizeVarDescriptors(const Code& code); 427 void FinalizeVarDescriptors(const Code& code);
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 // that should be used when deoptimizing we store it in this variable. 605 // that should be used when deoptimizing we store it in this variable.
606 // In future AddDeoptStub should be moved out of the instruction template. 606 // In future AddDeoptStub should be moved out of the instruction template.
607 Environment* pending_deoptimization_env_; 607 Environment* pending_deoptimization_env_;
608 608
609 DISALLOW_COPY_AND_ASSIGN(FlowGraphCompiler); 609 DISALLOW_COPY_AND_ASSIGN(FlowGraphCompiler);
610 }; 610 };
611 611
612 } // namespace dart 612 } // namespace dart
613 613
614 #endif // VM_FLOW_GRAPH_COMPILER_H_ 614 #endif // VM_FLOW_GRAPH_COMPILER_H_
OLDNEW
« no previous file with comments | « runtime/vm/deopt_instructions.cc ('k') | runtime/vm/flow_graph_compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698