| Index: runtime/vm/intermediate_language.h
|
| ===================================================================
|
| --- runtime/vm/intermediate_language.h (revision 17448)
|
| +++ runtime/vm/intermediate_language.h (working copy)
|
| @@ -518,6 +518,7 @@
|
| friend class DoubleToSmiInstr;
|
| friend class DoubleToDoubleInstr;
|
| friend class InvokeMathCFunctionInstr;
|
| + friend class FlowGraphOptimizer;
|
|
|
| intptr_t deopt_id_;
|
| intptr_t lifetime_position_; // Position used by register allocator.
|
| @@ -1397,7 +1398,7 @@
|
|
|
| intptr_t token_pos() const { return token_pos_; }
|
|
|
| - virtual bool CanDeoptimize() const { return false; }
|
| + virtual bool CanDeoptimize() const { return true; }
|
|
|
| virtual bool HasSideEffect() const { return true; }
|
|
|
| @@ -1418,7 +1419,7 @@
|
|
|
| intptr_t token_pos() const { return token_pos_; }
|
|
|
| - virtual bool CanDeoptimize() const { return false; }
|
| + virtual bool CanDeoptimize() const { return true; }
|
|
|
| virtual bool HasSideEffect() const { return true; }
|
|
|
| @@ -1895,7 +1896,7 @@
|
|
|
| virtual void PrintOperandsTo(BufferFormatter* f) const;
|
|
|
| - virtual bool CanDeoptimize() const { return false; }
|
| + virtual bool CanDeoptimize() const { return true; }
|
|
|
| virtual bool HasSideEffect() const { return false; }
|
|
|
| @@ -1942,7 +1943,7 @@
|
|
|
| virtual void PrintOperandsTo(BufferFormatter* f) const;
|
|
|
| - virtual bool CanDeoptimize() const { return false; }
|
| + virtual bool CanDeoptimize() const { return true; }
|
|
|
| virtual bool HasSideEffect() const { return false; }
|
|
|
| @@ -1984,7 +1985,7 @@
|
|
|
| virtual void PrintOperandsTo(BufferFormatter* f) const;
|
|
|
| - virtual bool CanDeoptimize() const { return false; }
|
| + virtual bool CanDeoptimize() const { return true; }
|
|
|
| virtual bool HasSideEffect() const { return true; }
|
|
|
| @@ -2214,7 +2215,9 @@
|
|
|
|
|
| inline bool BranchInstr::CanDeoptimize() const {
|
| - return comparison()->CanDeoptimize();
|
| + // Branches need a deoptimization info in checked mode if they
|
| + // can throw a type check error.
|
| + return comparison()->CanDeoptimize() || is_checked();
|
| }
|
|
|
|
|
| @@ -2862,7 +2865,7 @@
|
|
|
| virtual void PrintOperandsTo(BufferFormatter* f) const;
|
|
|
| - virtual bool CanDeoptimize() const { return false; }
|
| + virtual bool CanDeoptimize() const { return true; }
|
|
|
| virtual bool HasSideEffect() const { return true; }
|
|
|
| @@ -2939,7 +2942,7 @@
|
|
|
| virtual void PrintOperandsTo(BufferFormatter* f) const;
|
|
|
| - virtual bool CanDeoptimize() const { return false; }
|
| + virtual bool CanDeoptimize() const { return true; }
|
|
|
| virtual bool HasSideEffect() const { return true; }
|
|
|
| @@ -3156,7 +3159,7 @@
|
|
|
| virtual void PrintOperandsTo(BufferFormatter* f) const;
|
|
|
| - virtual bool CanDeoptimize() const { return false; }
|
| + virtual bool CanDeoptimize() const { return true; }
|
|
|
| virtual bool HasSideEffect() const { return true; }
|
|
|
| @@ -3305,7 +3308,7 @@
|
| DECLARE_INSTRUCTION(CloneContext)
|
| virtual RawAbstractType* CompileType() const;
|
|
|
| - virtual bool CanDeoptimize() const { return false; }
|
| + virtual bool CanDeoptimize() const { return true; }
|
|
|
| virtual bool HasSideEffect() const { return false; }
|
|
|
| @@ -3905,7 +3908,7 @@
|
|
|
| virtual intptr_t ArgumentCount() const { return 0; }
|
|
|
| - virtual bool CanDeoptimize() const { return false; }
|
| + virtual bool CanDeoptimize() const { return true; }
|
|
|
| virtual bool HasSideEffect() const { return false; }
|
|
|
|
|