Chromium Code Reviews| Index: runtime/vm/intermediate_language.h |
| diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h |
| index cb50a2a0e0c7dfcea0aa311def2bf8184667eaff..9ef67794abe7d5d43f7e9ff279c92129f0eb271f 100644 |
| --- a/runtime/vm/intermediate_language.h |
| +++ b/runtime/vm/intermediate_language.h |
| @@ -500,7 +500,6 @@ class EmbeddedArray<T, 0> { |
| M(BoxInt32) \ |
| M(UnboxInt32) \ |
| M(UnboxedIntConverter) \ |
| - M(GrowRegExpStack) \ |
| M(Deoptimize) |
| #define FOR_EACH_ABSTRACT_INSTRUCTION(M) \ |
| @@ -1229,13 +1228,6 @@ class BlockEntryInstr : public Instruction { |
| GrowableArray<BlockEntryInstr*>* preorder, |
| GrowableArray<intptr_t>* parent); |
| - // Perform a depth first search to prune code not reachable from an OSR |
| - // entry point. |
| - bool PruneUnreachable(GraphEntryInstr* graph_entry, |
| - Instruction* parent, |
| - intptr_t osr_id, |
| - BitVector* block_marks); |
| - |
| virtual intptr_t InputCount() const { return 0; } |
| virtual Value* InputAt(intptr_t i) const { |
| UNREACHABLE(); |
| @@ -1304,6 +1296,12 @@ class BlockEntryInstr : public Instruction { |
| parallel_move_(NULL), |
| loop_info_(NULL) {} |
| + // Perform a depth first search to prune code not reachable from an OSR |
| + // entry point. |
|
erikcorry
2017/06/22 13:08:06
Perform a depth first search to find the OSR entry
Vyacheslav Egorov (Google)
2017/06/22 14:58:48
Done.
|
| + bool PruneUnreachable(GraphEntryInstr* graph_entry, |
| + Instruction* parent, |
| + BitVector* block_marks); |
| + |
| private: |
| virtual void RawSetInputAt(intptr_t i, Value* value) { UNREACHABLE(); } |
| @@ -1417,7 +1415,9 @@ class GraphEntryInstr : public BlockEntryInstr { |
| } |
| ConstantInstr* constant_null(); |
| + void PruneUnreachableForOSR(Zone* zone, intptr_t max_block_id); |
| bool IsCompiledForOsr() const; |
| + intptr_t osr_id() const { return osr_id_; } |
| intptr_t entry_count() const { return entry_count_; } |
| void set_entry_count(intptr_t count) { entry_count_ = count; } |
| @@ -7287,12 +7287,27 @@ class UnaryDoubleOpInstr : public TemplateDefinition<1, NoThrow, Pure> { |
| class CheckStackOverflowInstr : public TemplateInstruction<0, NoThrow> { |
| public: |
| + enum Kind { |
| + // kOsrAndPreemption stack overflow checks are emitted in both unoptimized |
| + // and optimized versions of the code and they serve as both preemption and |
| + // OSR entry points. |
| + kOsrAndPreemption, |
| + |
| + // kOsrOnly stack overflow checks are only needed in the unoptimized code |
| + // because we can't OSR optimized code. |
| + kOsrOnly, |
| + }; |
| + |
| CheckStackOverflowInstr(TokenPosition token_pos, |
| intptr_t loop_depth, |
| - intptr_t deopt_id) |
| + intptr_t deopt_id, |
| + Kind kind = kOsrAndPreemption) |
| : TemplateInstruction(deopt_id), |
| token_pos_(token_pos), |
| - loop_depth_(loop_depth) {} |
| + loop_depth_(loop_depth), |
| + kind_(kind) { |
| + ASSERT(kind != kOsrOnly || loop_depth > 0); |
| + } |
| virtual TokenPosition token_pos() const { return token_pos_; } |
| bool in_loop() const { return loop_depth_ > 0; } |
| @@ -7302,6 +7317,8 @@ class CheckStackOverflowInstr : public TemplateInstruction<0, NoThrow> { |
| virtual bool ComputeCanDeoptimize() const { return true; } |
| + virtual Instruction* Canonicalize(FlowGraph* flow_graph); |
| + |
| virtual EffectSet Effects() const { return EffectSet::None(); } |
| PRINT_OPERANDS_TO_SUPPORT |
| @@ -7309,6 +7326,7 @@ class CheckStackOverflowInstr : public TemplateInstruction<0, NoThrow> { |
| private: |
| const TokenPosition token_pos_; |
| const intptr_t loop_depth_; |
| + const Kind kind_; |
| DISALLOW_COPY_AND_ASSIGN(CheckStackOverflowInstr); |
| }; |
| @@ -7977,24 +7995,6 @@ class UnboxedIntConverterInstr : public TemplateDefinition<1, NoThrow> { |
| }; |
| -class GrowRegExpStackInstr : public TemplateDefinition<1, Throws> { |
| - public: |
| - explicit GrowRegExpStackInstr(Value* typed_data_cell) { |
| - SetInputAt(0, typed_data_cell); |
| - } |
| - |
| - Value* typed_data_cell() const { return inputs_[0]; } |
| - |
| - virtual bool ComputeCanDeoptimize() const { return MayThrow(); } |
| - virtual EffectSet Effects() const { return EffectSet::None(); } |
| - |
| - DECLARE_INSTRUCTION(GrowRegExpStack); |
| - |
| - private: |
| - DISALLOW_COPY_AND_ASSIGN(GrowRegExpStackInstr); |
| -}; |
| - |
| - |
| #undef DECLARE_INSTRUCTION |
| class Environment : public ZoneAllocated { |