Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index ff68bc2887f540c5f85d1842773aba4270ed147b..3de393f2ed9501597c623258aa2ef46e03c80480 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -713,11 +713,16 @@ class HValue: public ZoneObject { |
void InsertInputConversion(HInstruction* previous, int index, HType type); |
#ifdef DEBUG |
- virtual void Verify() const = 0; |
+ virtual void Verify() = 0; |
#endif |
protected: |
- virtual bool DataEquals(HValue* other) const { return true; } |
+ // This function must be overridden for instructions with flag kUseGVN, to |
+ // compare the non-Operand parts of the instruction. |
+ virtual bool DataEquals(HValue* other) const { |
+ UNREACHABLE(); |
+ return false; |
+ } |
virtual void RepresentationChanged(Representation to) { } |
virtual Range* InferRange(); |
virtual void DeleteFromGraph() = 0; |
@@ -773,7 +778,7 @@ class HInstruction: public HValue { |
virtual LInstruction* CompileToLithium(LChunkBuilder* builder) = 0; |
#ifdef DEBUG |
- virtual void Verify() const; |
+ virtual void Verify(); |
#endif |
// Returns whether this is some kind of deoptimizing check |
@@ -1062,7 +1067,7 @@ class HSimulate: public HInstruction { |
DECLARE_CONCRETE_INSTRUCTION(Simulate, "simulate") |
#ifdef DEBUG |
- virtual void Verify() const; |
+ virtual void Verify(); |
#endif |
protected: |
@@ -1158,6 +1163,9 @@ class HGlobalObject: public HInstruction { |
} |
DECLARE_CONCRETE_INSTRUCTION(GlobalObject, "global_object") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -1170,6 +1178,9 @@ class HGlobalReceiver: public HInstruction { |
} |
DECLARE_CONCRETE_INSTRUCTION(GlobalReceiver, "global_receiver") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -1360,6 +1371,9 @@ class HJSArrayLength: public HUnaryOperation { |
} |
DECLARE_CONCRETE_INSTRUCTION(JSArrayLength, "js_array_length") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -1376,6 +1390,9 @@ class HFixedArrayLength: public HUnaryOperation { |
} |
DECLARE_CONCRETE_INSTRUCTION(FixedArrayLength, "fixed_array_length") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -1393,6 +1410,9 @@ class HBitNot: public HUnaryOperation { |
virtual HType CalculateInferredType() const; |
DECLARE_CONCRETE_INSTRUCTION(BitNot, "bit_not") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -1488,6 +1508,9 @@ class HLoadElements: public HUnaryOperation { |
} |
DECLARE_CONCRETE_INSTRUCTION(LoadElements, "load-elements") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -1509,7 +1532,7 @@ class HCheckMap: public HUnaryOperation { |
virtual HType CalculateInferredType() const; |
#ifdef DEBUG |
- virtual void Verify() const; |
+ virtual void Verify(); |
#endif |
Handle<Map> map() const { return map_; } |
@@ -1544,7 +1567,7 @@ class HCheckFunction: public HUnaryOperation { |
virtual HType CalculateInferredType() const; |
#ifdef DEBUG |
- virtual void Verify() const; |
+ virtual void Verify(); |
#endif |
Handle<JSFunction> target() const { return target_; } |
@@ -1586,7 +1609,7 @@ class HCheckInstanceType: public HUnaryOperation { |
} |
#ifdef DEBUG |
- virtual void Verify() const; |
+ virtual void Verify(); |
#endif |
static HCheckInstanceType* NewIsJSObjectOrJSFunction(HValue* value); |
@@ -1627,10 +1650,13 @@ class HCheckNonSmi: public HUnaryOperation { |
virtual HType CalculateInferredType() const; |
#ifdef DEBUG |
- virtual void Verify() const; |
+ virtual void Verify(); |
#endif |
DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check_non_smi") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -1645,7 +1671,7 @@ class HCheckPrototypeMaps: public HInstruction { |
virtual bool IsCheckInstruction() const { return true; } |
#ifdef DEBUG |
- virtual void Verify() const; |
+ virtual void Verify(); |
#endif |
Handle<JSObject> prototype() const { return prototype_; } |
@@ -1688,10 +1714,13 @@ class HCheckSmi: public HUnaryOperation { |
virtual HType CalculateInferredType() const; |
#ifdef DEBUG |
- virtual void Verify() const; |
+ virtual void Verify(); |
#endif |
DECLARE_CONCRETE_INSTRUCTION(CheckSmi, "check_smi") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -1744,7 +1773,7 @@ class HPhi: public HValue { |
virtual void PrintTo(StringStream* stream) const; |
#ifdef DEBUG |
- virtual void Verify() const; |
+ virtual void Verify(); |
#endif |
DECLARE_INSTRUCTION(Phi) |
@@ -1832,7 +1861,7 @@ class HConstant: public HInstruction { |
} |
#ifdef DEBUG |
- virtual void Verify() const { } |
+ virtual void Verify() { } |
#endif |
DECLARE_CONCRETE_INSTRUCTION(Constant, "constant") |
@@ -1951,6 +1980,9 @@ class HArgumentsElements: public HInstruction { |
} |
DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements, "arguments_elements") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -1962,6 +1994,9 @@ class HArgumentsLength: public HUnaryOperation { |
} |
DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength, "arguments_length") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -1998,6 +2033,8 @@ class HAccessArgumentsAt: public HInstruction { |
operands_[index] = value; |
} |
+ virtual bool DataEquals(HValue* other) const { return true; } |
+ |
private: |
HOperandVector<3> operands_; |
}; |
@@ -2017,13 +2054,16 @@ class HBoundsCheck: public HBinaryOperation { |
} |
#ifdef DEBUG |
- virtual void Verify() const; |
+ virtual void Verify(); |
#endif |
HValue* index() const { return left(); } |
HValue* length() const { return right(); } |
DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds_check") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -2141,6 +2181,9 @@ class HCompareJSObjectEq: public HBinaryOperation { |
virtual HType CalculateInferredType() const; |
DECLARE_CONCRETE_INSTRUCTION(CompareJSObjectEq, "compare-js-object-eq") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -2183,6 +2226,9 @@ class HIsObject: public HUnaryPredicate { |
explicit HIsObject(HValue* value) : HUnaryPredicate(value) { } |
DECLARE_CONCRETE_INSTRUCTION(IsObject, "is_object") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -2191,6 +2237,9 @@ class HIsSmi: public HUnaryPredicate { |
explicit HIsSmi(HValue* value) : HUnaryPredicate(value) { } |
DECLARE_CONCRETE_INSTRUCTION(IsSmi, "is_smi") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -2227,6 +2276,9 @@ class HHasCachedArrayIndex: public HUnaryPredicate { |
explicit HHasCachedArrayIndex(HValue* value) : HUnaryPredicate(value) { } |
DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndex, "has_cached_array_index") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -2325,6 +2377,9 @@ class HPower: public HBinaryOperation { |
} |
DECLARE_CONCRETE_INSTRUCTION(Power, "power") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -2347,6 +2402,8 @@ class HAdd: public HArithmeticBinaryOperation { |
DECLARE_CONCRETE_INSTRUCTION(Add, "add") |
protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
+ |
virtual Range* InferRange(); |
}; |
@@ -2362,6 +2419,8 @@ class HSub: public HArithmeticBinaryOperation { |
DECLARE_CONCRETE_INSTRUCTION(Sub, "sub") |
protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
+ |
virtual Range* InferRange(); |
}; |
@@ -2382,6 +2441,8 @@ class HMul: public HArithmeticBinaryOperation { |
DECLARE_CONCRETE_INSTRUCTION(Mul, "mul") |
protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
+ |
virtual Range* InferRange(); |
}; |
@@ -2397,6 +2458,8 @@ class HMod: public HArithmeticBinaryOperation { |
DECLARE_CONCRETE_INSTRUCTION(Mod, "mod") |
protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
+ |
virtual Range* InferRange(); |
}; |
@@ -2413,6 +2476,8 @@ class HDiv: public HArithmeticBinaryOperation { |
DECLARE_CONCRETE_INSTRUCTION(Div, "div") |
protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
+ |
virtual Range* InferRange(); |
}; |
@@ -2428,6 +2493,8 @@ class HBitAnd: public HBitwiseBinaryOperation { |
DECLARE_CONCRETE_INSTRUCTION(BitAnd, "bit_and") |
protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
+ |
virtual Range* InferRange(); |
}; |
@@ -2441,6 +2508,9 @@ class HBitXor: public HBitwiseBinaryOperation { |
virtual HType CalculateInferredType() const; |
DECLARE_CONCRETE_INSTRUCTION(BitXor, "bit_xor") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -2455,6 +2525,8 @@ class HBitOr: public HBitwiseBinaryOperation { |
DECLARE_CONCRETE_INSTRUCTION(BitOr, "bit_or") |
protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
+ |
virtual Range* InferRange(); |
}; |
@@ -2468,6 +2540,9 @@ class HShl: public HBitwiseBinaryOperation { |
virtual HType CalculateInferredType() const; |
DECLARE_CONCRETE_INSTRUCTION(Shl, "shl") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -2479,6 +2554,9 @@ class HShr: public HBitwiseBinaryOperation { |
virtual HType CalculateInferredType() const; |
DECLARE_CONCRETE_INSTRUCTION(Shr, "shr") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -2491,6 +2569,9 @@ class HSar: public HBitwiseBinaryOperation { |
virtual HType CalculateInferredType() const; |
DECLARE_CONCRETE_INSTRUCTION(Sar, "sar") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -2616,12 +2697,6 @@ class HStoreGlobal: public HUnaryOperation { |
DECLARE_CONCRETE_INSTRUCTION(StoreGlobal, "store_global") |
- protected: |
- virtual bool DataEquals(HValue* other) const { |
- HStoreGlobal* b = HStoreGlobal::cast(other); |
- return cell_.is_identical_to(b->cell()); |
- } |
- |
private: |
Handle<JSGlobalPropertyCell> cell_; |
}; |
@@ -2715,12 +2790,6 @@ class HLoadNamedGeneric: public HUnaryOperation { |
DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load_named_generic") |
- protected: |
- virtual bool DataEquals(HValue* other) const { |
- HLoadNamedGeneric* b = HLoadNamedGeneric::cast(other); |
- return name_.is_identical_to(b->name_); |
- } |
- |
private: |
Handle<Object> name_; |
}; |
@@ -2742,6 +2811,9 @@ class HLoadFunctionPrototype: public HUnaryOperation { |
} |
DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load_function_prototype") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -2778,6 +2850,9 @@ class HLoadKeyedFastElement: public HLoadKeyed { |
DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFastElement, |
"load_keyed_fast_element") |
+ |
+ protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
}; |
@@ -2820,12 +2895,6 @@ class HStoreNamed: public HBinaryOperation { |
DECLARE_INSTRUCTION(StoreNamed) |
- protected: |
- virtual bool DataEquals(HValue* other) const { |
- HStoreNamed* b = HStoreNamed::cast(other); |
- return name_.is_identical_to(b->name_); |
- } |
- |
private: |
Handle<Object> name_; |
}; |
@@ -2957,14 +3026,14 @@ class HStringCharCodeAt: public HBinaryOperation { |
: Representation::Tagged(); |
} |
- virtual bool DataEquals(HValue* other) const { return true; } |
- |
HValue* string() const { return OperandAt(0); } |
HValue* index() const { return OperandAt(1); } |
DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string_char_code_at") |
protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
+ |
virtual Range* InferRange() { |
return new Range(0, String::kMaxUC16CharCode); |
} |
@@ -2987,11 +3056,11 @@ class HStringLength: public HUnaryOperation { |
return HType::Smi(); |
} |
- virtual bool DataEquals(HValue* other) const { return true; } |
- |
DECLARE_CONCRETE_INSTRUCTION(StringLength, "string_length") |
protected: |
+ virtual bool DataEquals(HValue* other) const { return true; } |
+ |
virtual Range* InferRange() { |
return new Range(0, String::kMaxLength); |
} |