| 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*);
|
|
|