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

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

Issue 2950783003: VM(RegExp): Allow OSR optimization of RegExp :matcher functions. (Closed)
Patch Set: Created 3 years, 6 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
OLDNEW
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 7248 matching lines...) Expand 10 before | Expand all | Expand 10 after
7259 7259
7260 private: 7260 private:
7261 const Token::Kind op_kind_; 7261 const Token::Kind op_kind_;
7262 7262
7263 DISALLOW_COPY_AND_ASSIGN(UnaryDoubleOpInstr); 7263 DISALLOW_COPY_AND_ASSIGN(UnaryDoubleOpInstr);
7264 }; 7264 };
7265 7265
7266 7266
7267 class CheckStackOverflowInstr : public TemplateInstruction<0, NoThrow> { 7267 class CheckStackOverflowInstr : public TemplateInstruction<0, NoThrow> {
7268 public: 7268 public:
7269 enum Kind {
7270 // Full stack overflow checks are emitted in both unoptimized and
7271 // optimized versions of the code.
7272 kFull,
7273
7274 // OsrEntry stack overflow checks are only needed in the unoptimized code
7275 // because we can't OSR optimized code.
7276 kOsrEntry,
7277 };
7278
7269 CheckStackOverflowInstr(TokenPosition token_pos, 7279 CheckStackOverflowInstr(TokenPosition token_pos,
7270 intptr_t loop_depth, 7280 intptr_t loop_depth,
7271 intptr_t deopt_id) 7281 intptr_t deopt_id,
7282 Kind kind = kFull)
7272 : TemplateInstruction(deopt_id), 7283 : TemplateInstruction(deopt_id),
7273 token_pos_(token_pos), 7284 token_pos_(token_pos),
7274 loop_depth_(loop_depth) {} 7285 loop_depth_(loop_depth),
7286 kind_(kind) {
7287 ASSERT(kind != kOsrEntry || loop_depth > 0);
7288 }
7275 7289
7276 virtual TokenPosition token_pos() const { return token_pos_; } 7290 virtual TokenPosition token_pos() const { return token_pos_; }
7277 bool in_loop() const { return loop_depth_ > 0; } 7291 bool in_loop() const { return loop_depth_ > 0; }
7278 intptr_t loop_depth() const { return loop_depth_; } 7292 intptr_t loop_depth() const { return loop_depth_; }
7279 7293
7280 DECLARE_INSTRUCTION(CheckStackOverflow) 7294 DECLARE_INSTRUCTION(CheckStackOverflow)
7281 7295
7282 virtual bool ComputeCanDeoptimize() const { return true; } 7296 virtual bool ComputeCanDeoptimize() const { return true; }
7283 7297
7298 virtual Instruction* Canonicalize(FlowGraph* flow_graph);
7299
7284 virtual EffectSet Effects() const { return EffectSet::None(); } 7300 virtual EffectSet Effects() const { return EffectSet::None(); }
7285 7301
7286 PRINT_OPERANDS_TO_SUPPORT 7302 PRINT_OPERANDS_TO_SUPPORT
7287 7303
7288 private: 7304 private:
7289 const TokenPosition token_pos_; 7305 const TokenPosition token_pos_;
7290 const intptr_t loop_depth_; 7306 const intptr_t loop_depth_;
7307 const Kind kind_;
7291 7308
7292 DISALLOW_COPY_AND_ASSIGN(CheckStackOverflowInstr); 7309 DISALLOW_COPY_AND_ASSIGN(CheckStackOverflowInstr);
7293 }; 7310 };
7294 7311
7295 7312
7296 // TODO(vegorov): remove this instruction in favor of Int32ToDouble. 7313 // TODO(vegorov): remove this instruction in favor of Int32ToDouble.
7297 class SmiToDoubleInstr : public TemplateDefinition<1, NoThrow, Pure> { 7314 class SmiToDoubleInstr : public TemplateDefinition<1, NoThrow, Pure> {
7298 public: 7315 public:
7299 SmiToDoubleInstr(Value* value, TokenPosition token_pos) 7316 SmiToDoubleInstr(Value* value, TokenPosition token_pos)
7300 : token_pos_(token_pos) { 7317 : token_pos_(token_pos) {
(...skipping 934 matching lines...) Expand 10 before | Expand all | Expand 10 after
8235 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \ 8252 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \
8236 UNIMPLEMENTED(); \ 8253 UNIMPLEMENTED(); \
8237 return NULL; \ 8254 return NULL; \
8238 } \ 8255 } \
8239 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } 8256 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); }
8240 8257
8241 8258
8242 } // namespace dart 8259 } // namespace dart
8243 8260
8244 #endif // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ 8261 #endif // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698