OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 V(CompareObjectEqAndBranch) \ | 97 V(CompareObjectEqAndBranch) \ |
98 V(CompareMap) \ | 98 V(CompareMap) \ |
99 V(CompareConstantEqAndBranch) \ | 99 V(CompareConstantEqAndBranch) \ |
100 V(Constant) \ | 100 V(Constant) \ |
101 V(Context) \ | 101 V(Context) \ |
102 V(DeleteProperty) \ | 102 V(DeleteProperty) \ |
103 V(Deoptimize) \ | 103 V(Deoptimize) \ |
104 V(Div) \ | 104 V(Div) \ |
105 V(ElementsKind) \ | 105 V(ElementsKind) \ |
106 V(EnterInlined) \ | 106 V(EnterInlined) \ |
107 V(ExternalArrayLength) \ | 107 V(FixedArrayBaseLength) \ |
108 V(FixedArrayLength) \ | |
109 V(ForceRepresentation) \ | 108 V(ForceRepresentation) \ |
110 V(FunctionLiteral) \ | 109 V(FunctionLiteral) \ |
111 V(GetCachedArrayIndex) \ | 110 V(GetCachedArrayIndex) \ |
112 V(GlobalObject) \ | 111 V(GlobalObject) \ |
113 V(GlobalReceiver) \ | 112 V(GlobalReceiver) \ |
114 V(Goto) \ | 113 V(Goto) \ |
115 V(HasCachedArrayIndexAndBranch) \ | 114 V(HasCachedArrayIndexAndBranch) \ |
116 V(HasInstanceTypeAndBranch) \ | 115 V(HasInstanceTypeAndBranch) \ |
117 V(In) \ | 116 V(In) \ |
118 V(InstanceOf) \ | 117 V(InstanceOf) \ |
(...skipping 1576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1695 | 1694 |
1696 HValue* value() { return OperandAt(0); } | 1695 HValue* value() { return OperandAt(0); } |
1697 | 1696 |
1698 DECLARE_CONCRETE_INSTRUCTION(JSArrayLength) | 1697 DECLARE_CONCRETE_INSTRUCTION(JSArrayLength) |
1699 | 1698 |
1700 protected: | 1699 protected: |
1701 virtual bool DataEquals(HValue* other) { return true; } | 1700 virtual bool DataEquals(HValue* other) { return true; } |
1702 }; | 1701 }; |
1703 | 1702 |
1704 | 1703 |
1705 class HFixedArrayLength: public HUnaryOperation { | 1704 class HFixedArrayBaseLength: public HUnaryOperation { |
1706 public: | 1705 public: |
1707 explicit HFixedArrayLength(HValue* value) : HUnaryOperation(value) { | 1706 explicit HFixedArrayBaseLength(HValue* value) : HUnaryOperation(value) { |
1708 set_representation(Representation::Tagged()); | 1707 set_representation(Representation::Tagged()); |
1709 SetFlag(kUseGVN); | 1708 SetFlag(kUseGVN); |
1710 SetFlag(kDependsOnArrayLengths); | 1709 SetFlag(kDependsOnArrayLengths); |
1711 } | 1710 } |
1712 | 1711 |
1713 virtual Representation RequiredInputRepresentation(int index) const { | 1712 virtual Representation RequiredInputRepresentation(int index) const { |
1714 return Representation::Tagged(); | 1713 return Representation::Tagged(); |
1715 } | 1714 } |
1716 | 1715 |
1717 DECLARE_CONCRETE_INSTRUCTION(FixedArrayLength) | 1716 DECLARE_CONCRETE_INSTRUCTION(FixedArrayBaseLength) |
1718 | |
1719 protected: | |
1720 virtual bool DataEquals(HValue* other) { return true; } | |
1721 }; | |
1722 | |
1723 | |
1724 class HExternalArrayLength: public HUnaryOperation { | |
1725 public: | |
1726 explicit HExternalArrayLength(HValue* value) : HUnaryOperation(value) { | |
1727 set_representation(Representation::Integer32()); | |
1728 // The result of this instruction is idempotent as long as its inputs don't | |
1729 // change. The length of a pixel array cannot change once set, so it's not | |
1730 // necessary to introduce a kDependsOnArrayLengths or any other dependency. | |
1731 SetFlag(kUseGVN); | |
1732 } | |
1733 | |
1734 virtual Representation RequiredInputRepresentation(int index) const { | |
1735 return Representation::Tagged(); | |
1736 } | |
1737 | |
1738 DECLARE_CONCRETE_INSTRUCTION(ExternalArrayLength) | |
1739 | 1717 |
1740 protected: | 1718 protected: |
1741 virtual bool DataEquals(HValue* other) { return true; } | 1719 virtual bool DataEquals(HValue* other) { return true; } |
1742 }; | 1720 }; |
1743 | 1721 |
1744 | 1722 |
1745 class HElementsKind: public HUnaryOperation { | 1723 class HElementsKind: public HUnaryOperation { |
1746 public: | 1724 public: |
1747 explicit HElementsKind(HValue* value) : HUnaryOperation(value) { | 1725 explicit HElementsKind(HValue* value) : HUnaryOperation(value) { |
1748 set_representation(Representation::Integer32()); | 1726 set_representation(Representation::Integer32()); |
(...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2464 SetOperandAt(0, index); | 2442 SetOperandAt(0, index); |
2465 SetOperandAt(1, length); | 2443 SetOperandAt(1, length); |
2466 set_representation(Representation::Integer32()); | 2444 set_representation(Representation::Integer32()); |
2467 SetFlag(kUseGVN); | 2445 SetFlag(kUseGVN); |
2468 } | 2446 } |
2469 | 2447 |
2470 virtual Representation RequiredInputRepresentation(int index) const { | 2448 virtual Representation RequiredInputRepresentation(int index) const { |
2471 return Representation::Integer32(); | 2449 return Representation::Integer32(); |
2472 } | 2450 } |
2473 | 2451 |
| 2452 virtual void PrintDataTo(StringStream* stream); |
| 2453 |
2474 HValue* index() { return OperandAt(0); } | 2454 HValue* index() { return OperandAt(0); } |
2475 HValue* length() { return OperandAt(1); } | 2455 HValue* length() { return OperandAt(1); } |
2476 | 2456 |
2477 DECLARE_CONCRETE_INSTRUCTION(BoundsCheck) | 2457 DECLARE_CONCRETE_INSTRUCTION(BoundsCheck) |
2478 | 2458 |
2479 protected: | 2459 protected: |
2480 virtual bool DataEquals(HValue* other) { return true; } | 2460 virtual bool DataEquals(HValue* other) { return true; } |
2481 }; | 2461 }; |
2482 | 2462 |
2483 | 2463 |
(...skipping 947 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3431 HValue* context() { return OperandAt(0); } | 3411 HValue* context() { return OperandAt(0); } |
3432 HValue* object() { return OperandAt(1); } | 3412 HValue* object() { return OperandAt(1); } |
3433 ZoneMapList* types() { return &types_; } | 3413 ZoneMapList* types() { return &types_; } |
3434 Handle<String> name() { return name_; } | 3414 Handle<String> name() { return name_; } |
3435 bool need_generic() { return need_generic_; } | 3415 bool need_generic() { return need_generic_; } |
3436 | 3416 |
3437 virtual Representation RequiredInputRepresentation(int index) const { | 3417 virtual Representation RequiredInputRepresentation(int index) const { |
3438 return Representation::Tagged(); | 3418 return Representation::Tagged(); |
3439 } | 3419 } |
3440 | 3420 |
| 3421 virtual void PrintDataTo(StringStream* stream); |
| 3422 |
3441 DECLARE_CONCRETE_INSTRUCTION(LoadNamedFieldPolymorphic) | 3423 DECLARE_CONCRETE_INSTRUCTION(LoadNamedFieldPolymorphic) |
3442 | 3424 |
3443 static const int kMaxLoadPolymorphism = 4; | 3425 static const int kMaxLoadPolymorphism = 4; |
3444 | 3426 |
3445 protected: | 3427 protected: |
3446 virtual bool DataEquals(HValue* value); | 3428 virtual bool DataEquals(HValue* value); |
3447 | 3429 |
3448 private: | 3430 private: |
3449 ZoneMapList types_; | 3431 ZoneMapList types_; |
3450 Handle<String> name_; | 3432 Handle<String> name_; |
(...skipping 13 matching lines...) Expand all Loading... |
3464 } | 3446 } |
3465 | 3447 |
3466 HValue* context() { return OperandAt(0); } | 3448 HValue* context() { return OperandAt(0); } |
3467 HValue* object() { return OperandAt(1); } | 3449 HValue* object() { return OperandAt(1); } |
3468 Handle<Object> name() const { return name_; } | 3450 Handle<Object> name() const { return name_; } |
3469 | 3451 |
3470 virtual Representation RequiredInputRepresentation(int index) const { | 3452 virtual Representation RequiredInputRepresentation(int index) const { |
3471 return Representation::Tagged(); | 3453 return Representation::Tagged(); |
3472 } | 3454 } |
3473 | 3455 |
| 3456 virtual void PrintDataTo(StringStream* stream); |
| 3457 |
3474 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric) | 3458 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric) |
3475 | 3459 |
3476 private: | 3460 private: |
3477 Handle<Object> name_; | 3461 Handle<Object> name_; |
3478 }; | 3462 }; |
3479 | 3463 |
3480 | 3464 |
3481 class HLoadFunctionPrototype: public HUnaryOperation { | 3465 class HLoadFunctionPrototype: public HUnaryOperation { |
3482 public: | 3466 public: |
3483 explicit HLoadFunctionPrototype(HValue* function) | 3467 explicit HLoadFunctionPrototype(HValue* function) |
(...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4203 | 4187 |
4204 DECLARE_CONCRETE_INSTRUCTION(In) | 4188 DECLARE_CONCRETE_INSTRUCTION(In) |
4205 }; | 4189 }; |
4206 | 4190 |
4207 #undef DECLARE_INSTRUCTION | 4191 #undef DECLARE_INSTRUCTION |
4208 #undef DECLARE_CONCRETE_INSTRUCTION | 4192 #undef DECLARE_CONCRETE_INSTRUCTION |
4209 | 4193 |
4210 } } // namespace v8::internal | 4194 } } // namespace v8::internal |
4211 | 4195 |
4212 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 4196 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
OLD | NEW |