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 RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ | 5 #ifndef RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ |
6 #define RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ | 6 #define RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ |
7 | 7 |
8 #include "vm/allocation.h" | 8 #include "vm/allocation.h" |
9 #include "vm/ast.h" | 9 #include "vm/ast.h" |
10 #include "vm/growable_array.h" | 10 #include "vm/growable_array.h" |
(...skipping 7269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7280 | 7280 |
7281 private: | 7281 private: |
7282 const Token::Kind op_kind_; | 7282 const Token::Kind op_kind_; |
7283 | 7283 |
7284 DISALLOW_COPY_AND_ASSIGN(UnaryDoubleOpInstr); | 7284 DISALLOW_COPY_AND_ASSIGN(UnaryDoubleOpInstr); |
7285 }; | 7285 }; |
7286 | 7286 |
7287 | 7287 |
7288 class CheckStackOverflowInstr : public TemplateInstruction<0, NoThrow> { | 7288 class CheckStackOverflowInstr : public TemplateInstruction<0, NoThrow> { |
7289 public: | 7289 public: |
7290 enum Kind { | |
7291 // kOsrAndPreemption stack overflow checks are emitted in both unoptimized | |
7292 // and optimized versions of the code and they serve as both preemption and | |
7293 // OSR entry points. | |
7294 kOsrAndPreemption, | |
7295 | |
7296 // kOsrOnly stack overflow checks are only needed in the unoptimized code | |
7297 // because we can't OSR optimized code. | |
7298 kOsrOnly, | |
7299 }; | |
7300 | |
7301 CheckStackOverflowInstr(TokenPosition token_pos, | 7290 CheckStackOverflowInstr(TokenPosition token_pos, |
7302 intptr_t loop_depth, | 7291 intptr_t loop_depth, |
7303 intptr_t deopt_id, | 7292 intptr_t deopt_id) |
7304 Kind kind = kOsrAndPreemption) | |
7305 : TemplateInstruction(deopt_id), | 7293 : TemplateInstruction(deopt_id), |
7306 token_pos_(token_pos), | 7294 token_pos_(token_pos), |
7307 loop_depth_(loop_depth), | 7295 loop_depth_(loop_depth) {} |
7308 kind_(kind) { | |
7309 ASSERT(kind != kOsrOnly || loop_depth > 0); | |
7310 } | |
7311 | 7296 |
7312 virtual TokenPosition token_pos() const { return token_pos_; } | 7297 virtual TokenPosition token_pos() const { return token_pos_; } |
7313 bool in_loop() const { return loop_depth_ > 0; } | 7298 bool in_loop() const { return loop_depth_ > 0; } |
7314 intptr_t loop_depth() const { return loop_depth_; } | 7299 intptr_t loop_depth() const { return loop_depth_; } |
7315 | 7300 |
7316 DECLARE_INSTRUCTION(CheckStackOverflow) | 7301 DECLARE_INSTRUCTION(CheckStackOverflow) |
7317 | 7302 |
7318 virtual bool ComputeCanDeoptimize() const { return true; } | 7303 virtual bool ComputeCanDeoptimize() const { return true; } |
7319 | 7304 |
7320 virtual Instruction* Canonicalize(FlowGraph* flow_graph); | |
7321 | |
7322 virtual EffectSet Effects() const { return EffectSet::None(); } | 7305 virtual EffectSet Effects() const { return EffectSet::None(); } |
7323 | 7306 |
7324 PRINT_OPERANDS_TO_SUPPORT | 7307 PRINT_OPERANDS_TO_SUPPORT |
7325 | 7308 |
7326 private: | 7309 private: |
7327 const TokenPosition token_pos_; | 7310 const TokenPosition token_pos_; |
7328 const intptr_t loop_depth_; | 7311 const intptr_t loop_depth_; |
7329 const Kind kind_; | |
7330 | 7312 |
7331 DISALLOW_COPY_AND_ASSIGN(CheckStackOverflowInstr); | 7313 DISALLOW_COPY_AND_ASSIGN(CheckStackOverflowInstr); |
7332 }; | 7314 }; |
7333 | 7315 |
7334 | 7316 |
7335 // TODO(vegorov): remove this instruction in favor of Int32ToDouble. | 7317 // TODO(vegorov): remove this instruction in favor of Int32ToDouble. |
7336 class SmiToDoubleInstr : public TemplateDefinition<1, NoThrow, Pure> { | 7318 class SmiToDoubleInstr : public TemplateDefinition<1, NoThrow, Pure> { |
7337 public: | 7319 public: |
7338 SmiToDoubleInstr(Value* value, TokenPosition token_pos) | 7320 SmiToDoubleInstr(Value* value, TokenPosition token_pos) |
7339 : token_pos_(token_pos) { | 7321 : token_pos_(token_pos) { |
(...skipping 934 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8274 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \ | 8256 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \ |
8275 UNIMPLEMENTED(); \ | 8257 UNIMPLEMENTED(); \ |
8276 return NULL; \ | 8258 return NULL; \ |
8277 } \ | 8259 } \ |
8278 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } | 8260 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } |
8279 | 8261 |
8280 | 8262 |
8281 } // namespace dart | 8263 } // namespace dart |
8282 | 8264 |
8283 #endif // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ | 8265 #endif // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ |
OLD | NEW |