Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index 763b6369e3583a0a1c9b1a41bd3af7e93e8fe34e..d5893be217414e503d8d06240521b9db9ae4fe3c 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -33,6 +33,7 @@ |
#include "allocation.h" |
#include "code-stubs.h" |
#include "data-flow.h" |
+#include "deoptimizer.h" |
#include "small-pointer-list.h" |
#include "string-stream.h" |
#include "v8conversions.h" |
@@ -162,7 +163,6 @@ class LChunkBuilder; |
V(Shl) \ |
V(Shr) \ |
V(Simulate) \ |
- V(SoftDeoptimize) \ |
V(StackCheck) \ |
V(StoreContextSlot) \ |
V(StoreGlobalCell) \ |
@@ -1493,16 +1493,20 @@ class HNumericConstraint : public HTemplateInstruction<2> { |
}; |
-// We insert soft-deoptimize when we hit code with unknown typefeedback, |
-// so that we get a chance of re-optimizing with useful typefeedback. |
-// HSoftDeoptimize does not end a basic block as opposed to HDeoptimize. |
-class HSoftDeoptimize: public HTemplateInstruction<0> { |
+class HDeoptimize: public HTemplateInstruction<0> { |
public: |
+ explicit HDeoptimize(Deoptimizer::BailoutType type) : type_(type) {} |
+ |
virtual Representation RequiredInputRepresentation(int index) { |
return Representation::None(); |
} |
- DECLARE_CONCRETE_INSTRUCTION(SoftDeoptimize) |
+ Deoptimizer::BailoutType type() { return type_; } |
+ |
+ DECLARE_CONCRETE_INSTRUCTION(Deoptimize) |
+ |
+ private: |
+ Deoptimizer::BailoutType type_; |
}; |
@@ -1517,59 +1521,6 @@ class HDebugBreak: public HTemplateInstruction<0> { |
}; |
-class HDeoptimize: public HControlInstruction { |
- public: |
- HDeoptimize(int environment_length, |
- int first_local_index, |
- int first_expression_index, |
- Zone* zone) |
- : values_(environment_length, zone), |
- first_local_index_(first_local_index), |
- first_expression_index_(first_expression_index) { } |
- |
- virtual Representation RequiredInputRepresentation(int index) { |
- return Representation::None(); |
- } |
- |
- virtual int OperandCount() { return values_.length(); } |
- virtual HValue* OperandAt(int index) const { return values_[index]; } |
- virtual void PrintDataTo(StringStream* stream); |
- |
- virtual int SuccessorCount() { return 0; } |
- virtual HBasicBlock* SuccessorAt(int i) { |
- UNREACHABLE(); |
- return NULL; |
- } |
- virtual void SetSuccessorAt(int i, HBasicBlock* block) { |
- UNREACHABLE(); |
- } |
- |
- void AddEnvironmentValue(HValue* value, Zone* zone) { |
- values_.Add(NULL, zone); |
- SetOperandAt(values_.length() - 1, value); |
- } |
- int first_local_index() { return first_local_index_; } |
- int first_expression_index() { return first_expression_index_; } |
- |
- DECLARE_CONCRETE_INSTRUCTION(Deoptimize) |
- |
- enum UseEnvironment { |
- kNoUses, |
- kUseAll |
- }; |
- |
- protected: |
- virtual void InternalSetOperandAt(int index, HValue* value) { |
- values_[index] = value; |
- } |
- |
- private: |
- ZoneList<HValue*> values_; |
- int first_local_index_; |
- int first_expression_index_; |
-}; |
- |
- |
class HGoto: public HTemplateControlInstruction<1, 0> { |
public: |
explicit HGoto(HBasicBlock* target) { |