Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index a51d67f3e090553b6c3c8dbd334f4b100a1043ac..45f414dc01350bd678da01dca3173dfd490f59b3 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -723,6 +723,8 @@ class HValue : public ZoneObject { |
bool CanReplaceWithDummyUses(); |
+ virtual int argument_delta() const { return 0; } |
+ |
// A purely informative definition is an idef that will not emit code and |
// should therefore be removed from the graph in the RestoreActualValues |
// phase (so that live ranges will be shorter). |
@@ -1930,13 +1932,18 @@ class HEnterInlined V8_FINAL : public HTemplateInstruction<0> { |
class HLeaveInlined V8_FINAL : public HTemplateInstruction<0> { |
public: |
- HLeaveInlined() { } |
+ explicit HLeaveInlined(int drop_count) : drop_count_(drop_count) { } |
virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
return Representation::None(); |
} |
+ virtual int argument_delta() const V8_OVERRIDE { return -drop_count_; } |
+ |
DECLARE_CONCRETE_INSTRUCTION(LeaveInlined) |
+ |
+ private: |
+ int drop_count_; |
}; |
@@ -1948,6 +1955,7 @@ class HPushArgument V8_FINAL : public HUnaryOperation { |
return Representation::Tagged(); |
} |
+ virtual int argument_delta() const V8_OVERRIDE { return 1; } |
HValue* argument() { return OperandAt(0); } |
DECLARE_CONCRETE_INSTRUCTION(PushArgument) |
@@ -2097,7 +2105,13 @@ class HCall : public HTemplateInstruction<V> { |
return HType::Tagged(); |
} |
- virtual int argument_count() const { return argument_count_; } |
+ virtual int argument_count() const { |
+ return argument_count_; |
+ } |
+ |
+ virtual int argument_delta() const V8_OVERRIDE { |
+ return -argument_count(); |
+ } |
virtual bool IsCall() V8_FINAL V8_OVERRIDE { return true; } |