Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index aed2b4bd289df6283dc57de79844f4eeb1f3f838..7d33141a4f61c150320d02aaceb2c74218506b66 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -128,6 +128,7 @@ class LChunkBuilder; |
V(InvokeFunction) \ |
V(IsConstructCallAndBranch) \ |
V(IsObjectAndBranch) \ |
+ V(IsNumberAndBranch) \ |
V(IsStringAndBranch) \ |
V(IsSmiAndBranch) \ |
V(IsUndetectableAndBranch) \ |
@@ -781,15 +782,11 @@ class HValue : public ZoneObject { |
// phase (so that live ranges will be shorter). |
virtual bool IsPurelyInformativeDefinition() { return false; } |
- // This method must always return the original HValue SSA definition, |
- // regardless of any chain of iDefs of this value. |
+ // This method must always return the original HValue SSA definition |
+ // (regardless of any iDef of this value). |
HValue* ActualValue() { |
- HValue* value = this; |
- int index; |
- while ((index = value->RedefinedOperandIndex()) != kNoRedefinedOperand) { |
- value = value->OperandAt(index); |
- } |
- return value; |
+ int index = RedefinedOperandIndex(); |
+ return index == kNoRedefinedOperand ? this : OperandAt(index); |
} |
bool IsInteger32Constant(); |
@@ -1306,8 +1303,6 @@ class HDeoptimize V8_FINAL : public HTemplateInstruction<0> { |
// Inserts an int3/stop break instruction for debugging purposes. |
class HDebugBreak V8_FINAL : public HTemplateInstruction<0> { |
public: |
- DECLARE_INSTRUCTION_FACTORY_P0(HDebugBreak); |
- |
virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
return Representation::None(); |
} |
@@ -2789,6 +2784,21 @@ class HCheckSmi V8_FINAL : public HUnaryOperation { |
}; |
+class HIsNumberAndBranch V8_FINAL : public HUnaryControlInstruction { |
+ public: |
+ explicit HIsNumberAndBranch(HValue* value) |
+ : HUnaryControlInstruction(value, NULL, NULL) { |
+ SetFlag(kFlexibleRepresentation); |
+ } |
+ |
+ virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
+ return Representation::None(); |
+ } |
+ |
+ DECLARE_CONCRETE_INSTRUCTION(IsNumberAndBranch) |
+}; |
+ |
+ |
class HCheckHeapObject V8_FINAL : public HUnaryOperation { |
public: |
DECLARE_INSTRUCTION_FACTORY_P1(HCheckHeapObject, HValue*); |