| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index 1015b6e6833fc79849a11b06783041f92649816c..5738d894fe357cedcceabbc83bc726e588cae9ca 100644
|
| --- a/src/hydrogen-instructions.h
|
| +++ b/src/hydrogen-instructions.h
|
| @@ -2555,6 +2555,7 @@ class HBitNot: public HUnaryOperation {
|
| SetFlag(kUseGVN);
|
| SetFlag(kTruncatingToInt32);
|
| SetFlag(kAllowUndefinedAsNaN);
|
| + set_type(HType::TaggedNumber());
|
| }
|
|
|
| virtual Representation RequiredInputRepresentation(int index) {
|
| @@ -2563,7 +2564,6 @@ class HBitNot: public HUnaryOperation {
|
| virtual Representation observed_input_representation(int index) {
|
| return Representation::Integer32();
|
| }
|
| - virtual HType CalculateInferredType();
|
|
|
| virtual HValue* Canonicalize();
|
|
|
| @@ -2589,8 +2589,6 @@ class HUnaryMathOperation: public HTemplateInstruction<2> {
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| - virtual HType CalculateInferredType();
|
| -
|
| virtual HValue* EnsureAndPropagateNotMinusZero(BitVector* visited);
|
|
|
| virtual Representation RequiredInputRepresentation(int index) {
|
| @@ -2669,6 +2667,7 @@ class HUnaryMathOperation: public HTemplateInstruction<2> {
|
| }
|
| SetFlag(kUseGVN);
|
| SetFlag(kAllowUndefinedAsNaN);
|
| + set_type(HType::TaggedNumber());
|
| }
|
|
|
| virtual bool IsDeletable() const { return true; }
|
| @@ -2729,7 +2728,6 @@ class HCheckMaps: public HTemplateInstruction<2> {
|
| virtual void HandleSideEffectDominator(GVNFlag side_effect,
|
| HValue* dominator);
|
| virtual void PrintDataTo(StringStream* stream);
|
| - virtual HType CalculateInferredType();
|
|
|
| HValue* value() { return OperandAt(0); }
|
| SmallMapList* map_set() { return &map_set_; }
|
| @@ -2767,6 +2765,7 @@ class HCheckMaps: public HTemplateInstruction<2> {
|
| SetFlag(kTrackSideEffectDominators);
|
| SetGVNFlag(kDependsOnMaps);
|
| SetGVNFlag(kDependsOnElementsKind);
|
| + set_type(value->type());
|
| }
|
|
|
| void omit(CompilationInfo* info) {
|
| @@ -2791,13 +2790,13 @@ class HCheckFunction: public HUnaryOperation {
|
| set_representation(Representation::Tagged());
|
| SetFlag(kUseGVN);
|
| target_in_new_space_ = Isolate::Current()->heap()->InNewSpace(*function);
|
| + set_type(value->type());
|
| }
|
|
|
| virtual Representation RequiredInputRepresentation(int index) {
|
| return Representation::Tagged();
|
| }
|
| virtual void PrintDataTo(StringStream* stream);
|
| - virtual HType CalculateInferredType();
|
|
|
| virtual HValue* Canonicalize();
|
|
|
| @@ -2892,14 +2891,13 @@ class HCheckSmi: public HUnaryOperation {
|
| explicit HCheckSmi(HValue* value) : HUnaryOperation(value) {
|
| set_representation(Representation::Smi());
|
| SetFlag(kUseGVN);
|
| + set_type(HType::Smi());
|
| }
|
|
|
| virtual Representation RequiredInputRepresentation(int index) {
|
| return Representation::Tagged();
|
| }
|
|
|
| - virtual HType CalculateInferredType();
|
| -
|
| virtual HValue* Canonicalize() {
|
| HType value_type = value()->type();
|
| if (value_type.IsSmi()) {
|
| @@ -2935,14 +2933,13 @@ class HCheckHeapObject: public HUnaryOperation {
|
| explicit HCheckHeapObject(HValue* value) : HUnaryOperation(value) {
|
| set_representation(Representation::Tagged());
|
| SetFlag(kUseGVN);
|
| + set_type(HType::NonPrimitive());
|
| }
|
|
|
| virtual Representation RequiredInputRepresentation(int index) {
|
| return Representation::Tagged();
|
| }
|
|
|
| - virtual HType CalculateInferredType();
|
| -
|
| #ifdef DEBUG
|
| virtual void Verify();
|
| #endif
|
| @@ -4063,8 +4060,6 @@ class HBitwiseBinaryOperation: public HBinaryOperation {
|
| HBinaryOperation::initialize_output_representation(observed);
|
| }
|
|
|
| - virtual HType CalculateInferredType();
|
| -
|
| DECLARE_ABSTRACT_INSTRUCTION(BitwiseBinaryOperation)
|
|
|
| private:
|
| @@ -4108,6 +4103,7 @@ class HArithmeticBinaryOperation: public HBinaryOperation {
|
| SetAllSideEffects();
|
| SetFlag(kFlexibleRepresentation);
|
| SetFlag(kAllowUndefinedAsNaN);
|
| + set_type(HType::TaggedNumber());
|
| }
|
|
|
| virtual void RepresentationChanged(Representation to) {
|
| @@ -4120,8 +4116,6 @@ class HArithmeticBinaryOperation: public HBinaryOperation {
|
| }
|
| }
|
|
|
| - virtual HType CalculateInferredType();
|
| -
|
| DECLARE_ABSTRACT_INSTRUCTION(ArithmeticBinaryOperation)
|
|
|
| private:
|
| @@ -4138,6 +4132,7 @@ class HCompareGeneric: public HBinaryOperation {
|
| : HBinaryOperation(context, left, right), token_(token) {
|
| ASSERT(Token::IsCompareOp(token));
|
| set_representation(Representation::Tagged());
|
| + set_type(HType::Boolean());
|
| SetAllSideEffects();
|
| }
|
|
|
| @@ -4150,8 +4145,6 @@ class HCompareGeneric: public HBinaryOperation {
|
| Token::Value token() const { return token_; }
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| - virtual HType CalculateInferredType();
|
| -
|
| DECLARE_CONCRETE_INSTRUCTION(CompareGeneric)
|
|
|
| private:
|
| @@ -4429,6 +4422,7 @@ class HInstanceOf: public HBinaryOperation {
|
| HInstanceOf(HValue* context, HValue* left, HValue* right)
|
| : HBinaryOperation(context, left, right) {
|
| set_representation(Representation::Tagged());
|
| + set_type(HType::Boolean());
|
| SetAllSideEffects();
|
| }
|
|
|
| @@ -4436,8 +4430,6 @@ class HInstanceOf: public HBinaryOperation {
|
| return Representation::Tagged();
|
| }
|
|
|
| - virtual HType CalculateInferredType();
|
| -
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(InstanceOf)
|
| @@ -4452,6 +4444,7 @@ class HInstanceOfKnownGlobal: public HTemplateInstruction<2> {
|
| : function_(right) {
|
| SetOperandAt(0, context);
|
| SetOperandAt(1, left);
|
| + set_type(HType::Boolean());
|
| set_representation(Representation::Tagged());
|
| SetAllSideEffects();
|
| }
|
| @@ -4464,8 +4457,6 @@ class HInstanceOfKnownGlobal: public HTemplateInstruction<2> {
|
| return Representation::Tagged();
|
| }
|
|
|
| - virtual HType CalculateInferredType();
|
| -
|
| DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal)
|
|
|
| private:
|
| @@ -4564,8 +4555,6 @@ class HAdd: public HArithmeticBinaryOperation {
|
|
|
| virtual HValue* EnsureAndPropagateNotMinusZero(BitVector* visited);
|
|
|
| - virtual HType CalculateInferredType();
|
| -
|
| virtual HValue* Canonicalize();
|
|
|
| virtual bool TryDecompose(DecompositionResult* decomposition) {
|
| @@ -4879,6 +4868,7 @@ class HBitwise: public HBitwiseBinaryOperation {
|
| HConstant::cast(right)->Integer32Value() < 0))) {
|
| SetFlag(kTruncatingToSmi);
|
| }
|
| + set_type(HType::TaggedNumber());
|
| }
|
|
|
| Token::Value op_;
|
| @@ -6465,10 +6455,6 @@ class HStringAdd: public HBinaryOperation {
|
| return Representation::Tagged();
|
| }
|
|
|
| - virtual HType CalculateInferredType() {
|
| - return HType::String();
|
| - }
|
| -
|
| DECLARE_CONCRETE_INSTRUCTION(StringAdd)
|
|
|
| protected:
|
| @@ -6481,6 +6467,7 @@ class HStringAdd: public HBinaryOperation {
|
| SetFlag(kUseGVN);
|
| SetGVNFlag(kDependsOnMaps);
|
| SetGVNFlag(kChangesNewSpacePromotion);
|
| + set_type(HType::String());
|
| }
|
|
|
| // No side-effects except possible allocation.
|
| @@ -6540,7 +6527,6 @@ class HStringCharFromCode: public HTemplateInstruction<2> {
|
| ? Representation::Tagged()
|
| : Representation::Integer32();
|
| }
|
| - virtual HType CalculateInferredType() { return HType::String(); }
|
|
|
| HValue* context() const { return OperandAt(0); }
|
| HValue* value() const { return OperandAt(1); }
|
| @@ -6556,6 +6542,7 @@ class HStringCharFromCode: public HTemplateInstruction<2> {
|
| set_representation(Representation::Tagged());
|
| SetFlag(kUseGVN);
|
| SetGVNFlag(kChangesNewSpacePromotion);
|
| + set_type(HType::String());
|
| }
|
|
|
| virtual bool IsDeletable() const {
|
| @@ -6572,11 +6559,6 @@ class HStringLength: public HUnaryOperation {
|
| return Representation::Tagged();
|
| }
|
|
|
| - virtual HType CalculateInferredType() {
|
| - STATIC_ASSERT(String::kMaxLength <= Smi::kMaxValue);
|
| - return HType::Smi();
|
| - }
|
| -
|
| DECLARE_CONCRETE_INSTRUCTION(StringLength)
|
|
|
| protected:
|
| @@ -6588,9 +6570,11 @@ class HStringLength: public HUnaryOperation {
|
|
|
| private:
|
| explicit HStringLength(HValue* string) : HUnaryOperation(string) {
|
| + STATIC_ASSERT(String::kMaxLength <= Smi::kMaxValue);
|
| set_representation(Representation::Tagged());
|
| SetFlag(kUseGVN);
|
| SetGVNFlag(kDependsOnMaps);
|
| + set_type(HType::Smi());
|
| }
|
|
|
| virtual bool IsDeletable() const { return true; }
|
| @@ -6639,6 +6623,7 @@ class HRegExpLiteral: public HMaterializedLiteral<1> {
|
| flags_(flags) {
|
| SetOperandAt(0, context);
|
| SetAllSideEffects();
|
| + set_type(HType::JSObject());
|
| }
|
|
|
| HValue* context() { return OperandAt(0); }
|
| @@ -6649,7 +6634,6 @@ class HRegExpLiteral: public HMaterializedLiteral<1> {
|
| virtual Representation RequiredInputRepresentation(int index) {
|
| return Representation::Tagged();
|
| }
|
| - virtual HType CalculateInferredType();
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral)
|
|
|
| @@ -6671,6 +6655,7 @@ class HFunctionLiteral: public HTemplateInstruction<1> {
|
| is_generator_(shared->is_generator()),
|
| language_mode_(shared->language_mode()) {
|
| SetOperandAt(0, context);
|
| + set_type(HType::JSObject());
|
| set_representation(Representation::Tagged());
|
| SetGVNFlag(kChangesNewSpacePromotion);
|
| }
|
| @@ -6680,7 +6665,6 @@ class HFunctionLiteral: public HTemplateInstruction<1> {
|
| virtual Representation RequiredInputRepresentation(int index) {
|
| return Representation::Tagged();
|
| }
|
| - virtual HType CalculateInferredType();
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral)
|
|
|
|
|