Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(214)

Side by Side Diff: src/hydrogen-instructions.h

Issue 6373011: Remove the HInstruction utilities taking flag mask arguments. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge/build/ia32
Patch Set: Fix silly typo. Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | src/hydrogen-instructions.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 28 matching lines...) Expand all
39 // Forward declarations. 39 // Forward declarations.
40 class HBasicBlock; 40 class HBasicBlock;
41 class HEnvironment; 41 class HEnvironment;
42 class HInstruction; 42 class HInstruction;
43 class HLoopInformation; 43 class HLoopInformation;
44 class HValue; 44 class HValue;
45 class LInstruction; 45 class LInstruction;
46 class LChunkBuilder; 46 class LChunkBuilder;
47 47
48 48
49 // Type hierarchy:
50 //
51 // HValue
52 // HInstruction
53 // HAccessArgumentsAt
54 // HApplyArguments
55 // HArgumentsElements
56 // HArgumentsLength
57 // HArgumentsObject
58 // HBinaryOperation
59 // HArithmeticBinaryOperation
60 // HAdd
61 // HDiv
62 // HMod
63 // HMul
64 // HSub
65 // HBitwiseBinaryOperation
66 // HBitAnd
67 // HBitOr
68 // HBitXor
69 // HSar
70 // HShl
71 // HShr
72 // HBoundsCheck
73 // HCompare
74 // HCompareJSObjectEq
75 // HInstanceOf
76 // HInstanceOfKnownGlobal
77 // HLoadKeyed
78 // HLoadKeyedFastElement
79 // HLoadKeyedGeneric
80 // HPower
81 // HStoreNamed
82 // HStoreNamedField
83 // HStoreNamedGeneric
84 // HStringCharCodeAt
85 // HBlockEntry
86 // HCall
87 // HCallConstantFunction
88 // HCallFunction
89 // HCallGlobal
90 // HCallKeyed
91 // HCallKnownGlobal
92 // HCallNamed
93 // HCallNew
94 // HCallRuntime
95 // HCallStub
96 // HCheckPrototypeMaps
97 // HConstant
98 // HControlInstruction
99 // HDeoptimize
100 // HGoto
101 // HUnaryControlInstruction
102 // HCompareMap
103 // HReturn
104 // HTest
105 // HThrow
106 // HEnterInlined
107 // HFunctionLiteral
108 // HGlobalObject
109 // HGlobalReceiver
110 // HLeaveInlined
111 // HLoadContextSlot
112 // HLoadGlobal
113 // HMaterializedLiteral
114 // HArrayLiteral
115 // HObjectLiteral
116 // HRegExpLiteral
117 // HOsrEntry
118 // HParameter
119 // HSimulate
120 // HStackCheck
121 // HStoreKeyed
122 // HStoreKeyedFastElement
123 // HStoreKeyedGeneric
124 // HUnaryOperation
125 // HBitNot
126 // HChange
127 // HCheckFunction
128 // HCheckInstanceType
129 // HCheckMap
130 // HCheckNonSmi
131 // HCheckSmi
132 // HDeleteProperty
133 // HFixedArrayLength
134 // HJSArrayLength
135 // HLoadElements
136 // HLoadFunctionPrototype
137 // HLoadNamedField
138 // HLoadNamedGeneric
139 // HPushArgument
140 // HStringLength
141 // HTypeof
142 // HUnaryMathOperation
143 // HUnaryPredicate
144 // HClassOfTest
145 // HHasCachedArrayIndex
146 // HHasInstanceType
147 // HIsNull
148 // HIsObject
149 // HIsSmi
150 // HTypeofIs
151 // HValueOf
152 // HUnknownOSRValue
153 // HPhi
154
155 #define HYDROGEN_ALL_INSTRUCTION_LIST(V) \ 49 #define HYDROGEN_ALL_INSTRUCTION_LIST(V) \
156 V(ArithmeticBinaryOperation) \ 50 V(ArithmeticBinaryOperation) \
157 V(BinaryOperation) \ 51 V(BinaryOperation) \
158 V(BitwiseBinaryOperation) \ 52 V(BitwiseBinaryOperation) \
159 V(Call) \ 53 V(Call) \
160 V(ControlInstruction) \ 54 V(ControlInstruction) \
161 V(Instruction) \ 55 V(Instruction) \
162 V(LoadKeyed) \ 56 V(LoadKeyed) \
163 V(MaterializedLiteral) \ 57 V(MaterializedLiteral) \
164 V(Phi) \ 58 V(Phi) \
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 } 459 }
566 460
567 static int DependsFlagsMask() { 461 static int DependsFlagsMask() {
568 return ConvertChangesToDependsFlags(ChangesFlagsMask()); 462 return ConvertChangesToDependsFlags(ChangesFlagsMask());
569 } 463 }
570 464
571 static int ConvertChangesToDependsFlags(int flags) { 465 static int ConvertChangesToDependsFlags(int flags) {
572 return flags << kChangesToDependsFlagsLeftShift; 466 return flags << kChangesToDependsFlagsLeftShift;
573 } 467 }
574 468
575 // A flag mask to mark an instruction as having arbitrary side effects.
576 static int AllSideEffects() {
577 return ChangesFlagsMask() & ~(1 << kChangesOsrEntries);
578 }
579
580 static HValue* cast(HValue* value) { return value; } 469 static HValue* cast(HValue* value) { return value; }
581 470
582 enum Opcode { 471 enum Opcode {
583 // Declare a unique enum value for each hydrogen instruction. 472 // Declare a unique enum value for each hydrogen instruction.
584 #define DECLARE_DO(type) k##type, 473 #define DECLARE_DO(type) k##type,
585 HYDROGEN_ALL_INSTRUCTION_LIST(DECLARE_DO) 474 HYDROGEN_ALL_INSTRUCTION_LIST(DECLARE_DO)
586 #undef DECLARE_DO 475 #undef DECLARE_DO
587 kMaxInstructionClass 476 kMaxInstructionClass
588 }; 477 };
589 478
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 // If the operation also exists in a form that takes int32 and outputs int32 517 // If the operation also exists in a form that takes int32 and outputs int32
629 // then the operation should return its input value so that we can propagate 518 // then the operation should return its input value so that we can propagate
630 // back. There are two operations that need to propagate back to more than 519 // back. There are two operations that need to propagate back to more than
631 // one input. They are phi and binary add. They always return NULL and 520 // one input. They are phi and binary add. They always return NULL and
632 // expect the caller to take care of things. 521 // expect the caller to take care of things.
633 virtual HValue* EnsureAndPropagateNotMinusZero(BitVector* visited) { 522 virtual HValue* EnsureAndPropagateNotMinusZero(BitVector* visited) {
634 visited->Add(id()); 523 visited->Add(id());
635 return NULL; 524 return NULL;
636 } 525 }
637 526
638 bool HasSideEffects() const {
639 return (flags_ & AllSideEffects()) != 0;
640 }
641 bool IsDefinedAfter(HBasicBlock* other) const; 527 bool IsDefinedAfter(HBasicBlock* other) const;
642 528
643 // Operands. 529 // Operands.
644 virtual int OperandCount() const { return 0; } 530 virtual int OperandCount() const { return 0; }
645 virtual HValue* OperandAt(int index) const { 531 virtual HValue* OperandAt(int index) const {
646 UNREACHABLE(); 532 UNREACHABLE();
647 return NULL; 533 return NULL;
648 } 534 }
649 void SetOperandAt(int index, HValue* value); 535 void SetOperandAt(int index, HValue* value);
650 536
651 int LookupOperandIndex(int occurrence_index, HValue* op) const; 537 int LookupOperandIndex(int occurrence_index, HValue* op) const;
652 bool UsesMultipleTimes(HValue* op) const; 538 bool UsesMultipleTimes(HValue* op) const;
653 539
654 void ReplaceAndDelete(HValue* other); 540 void ReplaceAndDelete(HValue* other);
655 void ReplaceValue(HValue* other); 541 void ReplaceValue(HValue* other);
656 void ReplaceAtUse(HValue* use, HValue* other); 542 void ReplaceAtUse(HValue* use, HValue* other);
657 void ReplaceFirstAtUse(HValue* use, HValue* other, Representation r); 543 void ReplaceFirstAtUse(HValue* use, HValue* other, Representation r);
658 bool HasNoUses() const { return uses_.is_empty(); } 544 bool HasNoUses() const { return uses_.is_empty(); }
659 void ClearOperands(); 545 void ClearOperands();
660 void Delete(); 546 void Delete();
661 547
662 int flags() const { return flags_; } 548 int flags() const { return flags_; }
663 void SetFlagMask(int mask) { flags_ |= mask; } 549 void SetFlag(Flag f) { flags_ |= (1 << f); }
664 void SetFlag(Flag f) { SetFlagMask(1 << f); } 550 void ClearFlag(Flag f) { flags_ &= ~(1 << f); }
665 void ClearFlagMask(int mask) { flags_ &= ~mask; } 551 bool CheckFlag(Flag f) const { return (flags_ & (1 << f)) != 0; }
666 void ClearFlag(Flag f) { ClearFlagMask(1 << f); } 552
667 bool CheckFlag(Flag f) const { return CheckFlagMask(1 << f); } 553 void SetAllSideEffects() { flags_ |= AllSideEffects(); }
668 bool CheckFlagMask(int mask) const { return (flags_ & mask) != 0; } 554 void ClearAllSideEffects() { flags_ &= ~AllSideEffects(); }
555 bool HasSideEffects() const { return (flags_ & AllSideEffects()) != 0; }
669 556
670 Range* range() const { return range_; } 557 Range* range() const { return range_; }
671 bool HasRange() const { return range_ != NULL; } 558 bool HasRange() const { return range_ != NULL; }
672 void AddNewRange(Range* r); 559 void AddNewRange(Range* r);
673 void RemoveLastAddedRange(); 560 void RemoveLastAddedRange();
674 void ComputeInitialRange(); 561 void ComputeInitialRange();
675 562
676 // Representation helpers. 563 // Representation helpers.
677 virtual Representation RequiredInputRepresentation(int index) const { 564 virtual Representation RequiredInputRepresentation(int index) const {
678 return Representation::None(); 565 return Representation::None();
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 block_ = NULL; 619 block_ = NULL;
733 } 620 }
734 621
735 void set_representation(Representation r) { 622 void set_representation(Representation r) {
736 // Representation is set-once. 623 // Representation is set-once.
737 ASSERT(representation_.IsNone() && !r.IsNone()); 624 ASSERT(representation_.IsNone() && !r.IsNone());
738 representation_ = r; 625 representation_ = r;
739 } 626 }
740 627
741 private: 628 private:
629 // A flag mask to mark an instruction as having arbitrary side effects.
630 static int AllSideEffects() {
631 return ChangesFlagsMask() & ~(1 << kChangesOsrEntries);
632 }
633
742 void InternalReplaceAtUse(HValue* use, HValue* other); 634 void InternalReplaceAtUse(HValue* use, HValue* other);
743 void RegisterUse(int index, HValue* new_value); 635 void RegisterUse(int index, HValue* new_value);
744 636
745 HBasicBlock* block_; 637 HBasicBlock* block_;
746 638
747 // The id of this instruction in the hydrogen graph, assigned when first 639 // The id of this instruction in the hydrogen graph, assigned when first
748 // added to the graph. Reflects creation order. 640 // added to the graph. Reflects creation order.
749 int id_; 641 int id_;
750 642
751 Representation representation_; 643 Representation representation_;
(...skipping 1314 matching lines...) Expand 10 before | Expand all | Expand 10 after
2066 virtual bool DataEquals(HValue* other) const { return true; } 1958 virtual bool DataEquals(HValue* other) const { return true; }
2067 }; 1959 };
2068 1960
2069 1961
2070 class HBitwiseBinaryOperation: public HBinaryOperation { 1962 class HBitwiseBinaryOperation: public HBinaryOperation {
2071 public: 1963 public:
2072 HBitwiseBinaryOperation(HValue* left, HValue* right) 1964 HBitwiseBinaryOperation(HValue* left, HValue* right)
2073 : HBinaryOperation(left, right) { 1965 : HBinaryOperation(left, right) {
2074 set_representation(Representation::Tagged()); 1966 set_representation(Representation::Tagged());
2075 SetFlag(kFlexibleRepresentation); 1967 SetFlag(kFlexibleRepresentation);
2076 SetFlagMask(AllSideEffects()); 1968 SetAllSideEffects();
2077 } 1969 }
2078 1970
2079 virtual Representation RequiredInputRepresentation(int index) const { 1971 virtual Representation RequiredInputRepresentation(int index) const {
2080 return representation(); 1972 return representation();
2081 } 1973 }
2082 1974
2083 virtual void RepresentationChanged(Representation to) { 1975 virtual void RepresentationChanged(Representation to) {
2084 if (!to.IsTagged()) { 1976 if (!to.IsTagged()) {
2085 ASSERT(to.IsInteger32()); 1977 ASSERT(to.IsInteger32());
2086 ClearFlagMask(AllSideEffects()); 1978 ClearAllSideEffects();
2087 SetFlag(kTruncatingToInt32); 1979 SetFlag(kTruncatingToInt32);
2088 SetFlag(kUseGVN); 1980 SetFlag(kUseGVN);
2089 } 1981 }
2090 } 1982 }
2091 1983
2092 HType CalculateInferredType() const; 1984 HType CalculateInferredType() const;
2093 1985
2094 DECLARE_INSTRUCTION(BitwiseBinaryOperation) 1986 DECLARE_INSTRUCTION(BitwiseBinaryOperation)
2095 }; 1987 };
2096 1988
2097 1989
2098 class HArithmeticBinaryOperation: public HBinaryOperation { 1990 class HArithmeticBinaryOperation: public HBinaryOperation {
2099 public: 1991 public:
2100 HArithmeticBinaryOperation(HValue* left, HValue* right) 1992 HArithmeticBinaryOperation(HValue* left, HValue* right)
2101 : HBinaryOperation(left, right) { 1993 : HBinaryOperation(left, right) {
2102 set_representation(Representation::Tagged()); 1994 set_representation(Representation::Tagged());
2103 SetFlag(kFlexibleRepresentation); 1995 SetFlag(kFlexibleRepresentation);
2104 SetFlagMask(AllSideEffects()); 1996 SetAllSideEffects();
2105 } 1997 }
2106 1998
2107 virtual void RepresentationChanged(Representation to) { 1999 virtual void RepresentationChanged(Representation to) {
2108 if (!to.IsTagged()) { 2000 if (!to.IsTagged()) {
2109 ClearFlagMask(AllSideEffects()); 2001 ClearAllSideEffects();
2110 SetFlag(kUseGVN); 2002 SetFlag(kUseGVN);
2111 } 2003 }
2112 } 2004 }
2113 2005
2114 virtual HType CalculateInferredType() const; 2006 virtual HType CalculateInferredType() const;
2115 virtual Representation RequiredInputRepresentation(int index) const { 2007 virtual Representation RequiredInputRepresentation(int index) const {
2116 return representation(); 2008 return representation();
2117 } 2009 }
2118 virtual Representation InferredRepresentation() const { 2010 virtual Representation InferredRepresentation() const {
2119 if (left()->representation().Equals(right()->representation())) { 2011 if (left()->representation().Equals(right()->representation())) {
2120 return left()->representation(); 2012 return left()->representation();
2121 } 2013 }
2122 return HValue::InferredRepresentation(); 2014 return HValue::InferredRepresentation();
2123 } 2015 }
2124 2016
2125 DECLARE_INSTRUCTION(ArithmeticBinaryOperation) 2017 DECLARE_INSTRUCTION(ArithmeticBinaryOperation)
2126 }; 2018 };
2127 2019
2128 2020
2129 class HCompare: public HBinaryOperation { 2021 class HCompare: public HBinaryOperation {
2130 public: 2022 public:
2131 HCompare(HValue* left, HValue* right, Token::Value token) 2023 HCompare(HValue* left, HValue* right, Token::Value token)
2132 : HBinaryOperation(left, right), token_(token) { 2024 : HBinaryOperation(left, right), token_(token) {
2133 ASSERT(Token::IsCompareOp(token)); 2025 ASSERT(Token::IsCompareOp(token));
2134 set_representation(Representation::Tagged()); 2026 set_representation(Representation::Tagged());
2135 SetFlagMask(AllSideEffects()); 2027 SetAllSideEffects();
2136 } 2028 }
2137 2029
2138 void SetInputRepresentation(Representation r); 2030 void SetInputRepresentation(Representation r);
2139 virtual bool EmitAtUses() const { return uses()->length() <= 1; } 2031 virtual bool EmitAtUses() const { return uses()->length() <= 1; }
2140 virtual Representation RequiredInputRepresentation(int index) const { 2032 virtual Representation RequiredInputRepresentation(int index) const {
2141 return input_representation_; 2033 return input_representation_;
2142 } 2034 }
2143 Representation GetInputRepresentation() const { 2035 Representation GetInputRepresentation() const {
2144 return input_representation_; 2036 return input_representation_;
2145 } 2037 }
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
2322 2214
2323 private: 2215 private:
2324 Handle<String> type_literal_; 2216 Handle<String> type_literal_;
2325 }; 2217 };
2326 2218
2327 2219
2328 class HInstanceOf: public HBinaryOperation { 2220 class HInstanceOf: public HBinaryOperation {
2329 public: 2221 public:
2330 HInstanceOf(HValue* left, HValue* right) : HBinaryOperation(left, right) { 2222 HInstanceOf(HValue* left, HValue* right) : HBinaryOperation(left, right) {
2331 set_representation(Representation::Tagged()); 2223 set_representation(Representation::Tagged());
2332 SetFlagMask(AllSideEffects()); 2224 SetAllSideEffects();
2333 } 2225 }
2334 2226
2335 virtual bool EmitAtUses() const { return uses()->length() <= 1; } 2227 virtual bool EmitAtUses() const { return uses()->length() <= 1; }
2336 2228
2337 virtual Representation RequiredInputRepresentation(int index) const { 2229 virtual Representation RequiredInputRepresentation(int index) const {
2338 return Representation::Tagged(); 2230 return Representation::Tagged();
2339 } 2231 }
2340 2232
2341 DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance_of") 2233 DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance_of")
2342 }; 2234 };
2343 2235
2344 2236
2345 class HInstanceOfKnownGlobal: public HUnaryOperation { 2237 class HInstanceOfKnownGlobal: public HUnaryOperation {
2346 public: 2238 public:
2347 HInstanceOfKnownGlobal(HValue* left, Handle<JSFunction> right) 2239 HInstanceOfKnownGlobal(HValue* left, Handle<JSFunction> right)
2348 : HUnaryOperation(left), function_(right) { 2240 : HUnaryOperation(left), function_(right) {
2349 set_representation(Representation::Tagged()); 2241 set_representation(Representation::Tagged());
2350 SetFlagMask(AllSideEffects()); 2242 SetAllSideEffects();
2351 } 2243 }
2352 2244
2353 Handle<JSFunction> function() { return function_; } 2245 Handle<JSFunction> function() { return function_; }
2354 2246
2355 virtual Representation RequiredInputRepresentation(int index) const { 2247 virtual Representation RequiredInputRepresentation(int index) const {
2356 return Representation::Tagged(); 2248 return Representation::Tagged();
2357 } 2249 }
2358 2250
2359 DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal, 2251 DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal,
2360 "instance_of_known_global") 2252 "instance_of_known_global")
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
2607 }; 2499 };
2608 2500
2609 2501
2610 class HCallStub: public HInstruction { 2502 class HCallStub: public HInstruction {
2611 public: 2503 public:
2612 HCallStub(CodeStub::Major major_key, int argument_count) 2504 HCallStub(CodeStub::Major major_key, int argument_count)
2613 : major_key_(major_key), 2505 : major_key_(major_key),
2614 argument_count_(argument_count), 2506 argument_count_(argument_count),
2615 transcendental_type_(TranscendentalCache::kNumberOfCaches) { 2507 transcendental_type_(TranscendentalCache::kNumberOfCaches) {
2616 set_representation(Representation::Tagged()); 2508 set_representation(Representation::Tagged());
2617 SetFlagMask(AllSideEffects()); 2509 SetAllSideEffects();
2618 } 2510 }
2619 2511
2620 CodeStub::Major major_key() { return major_key_; } 2512 CodeStub::Major major_key() { return major_key_; }
2621 int argument_count() { return argument_count_; } 2513 int argument_count() { return argument_count_; }
2622 2514
2623 void set_transcendental_type(TranscendentalCache::Type transcendental_type) { 2515 void set_transcendental_type(TranscendentalCache::Type transcendental_type) {
2624 transcendental_type_ = transcendental_type; 2516 transcendental_type_ = transcendental_type;
2625 } 2517 }
2626 TranscendentalCache::Type transcendental_type() { 2518 TranscendentalCache::Type transcendental_type() {
2627 return transcendental_type_; 2519 return transcendental_type_;
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
2771 bool is_in_object_; 2663 bool is_in_object_;
2772 int offset_; 2664 int offset_;
2773 }; 2665 };
2774 2666
2775 2667
2776 class HLoadNamedGeneric: public HUnaryOperation { 2668 class HLoadNamedGeneric: public HUnaryOperation {
2777 public: 2669 public:
2778 HLoadNamedGeneric(HValue* object, Handle<Object> name) 2670 HLoadNamedGeneric(HValue* object, Handle<Object> name)
2779 : HUnaryOperation(object), name_(name) { 2671 : HUnaryOperation(object), name_(name) {
2780 set_representation(Representation::Tagged()); 2672 set_representation(Representation::Tagged());
2781 SetFlagMask(AllSideEffects()); 2673 SetAllSideEffects();
2782 } 2674 }
2783 2675
2784 HValue* object() const { return OperandAt(0); } 2676 HValue* object() const { return OperandAt(0); }
2785 Handle<Object> name() const { return name_; } 2677 Handle<Object> name() const { return name_; }
2786 2678
2787 virtual Representation RequiredInputRepresentation(int index) const { 2679 virtual Representation RequiredInputRepresentation(int index) const {
2788 return Representation::Tagged(); 2680 return Representation::Tagged();
2789 } 2681 }
2790 2682
2791 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load_named_generic") 2683 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load_named_generic")
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
2852 "load_keyed_fast_element") 2744 "load_keyed_fast_element")
2853 2745
2854 protected: 2746 protected:
2855 virtual bool DataEquals(HValue* other) const { return true; } 2747 virtual bool DataEquals(HValue* other) const { return true; }
2856 }; 2748 };
2857 2749
2858 2750
2859 class HLoadKeyedGeneric: public HLoadKeyed { 2751 class HLoadKeyedGeneric: public HLoadKeyed {
2860 public: 2752 public:
2861 HLoadKeyedGeneric(HValue* obj, HValue* key) : HLoadKeyed(obj, key) { 2753 HLoadKeyedGeneric(HValue* obj, HValue* key) : HLoadKeyed(obj, key) {
2862 SetFlagMask(AllSideEffects()); 2754 SetAllSideEffects();
2863 } 2755 }
2864 2756
2865 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load_keyed_generic") 2757 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load_keyed_generic")
2866 }; 2758 };
2867 2759
2868 2760
2869 static inline bool StoringValueNeedsWriteBarrier(HValue* value) { 2761 static inline bool StoringValueNeedsWriteBarrier(HValue* value) {
2870 return !value->type().IsSmi() && 2762 return !value->type().IsSmi() &&
2871 !(value->IsConstant() && HConstant::cast(value)->InOldSpace()); 2763 !(value->IsConstant() && HConstant::cast(value)->InOldSpace());
2872 } 2764 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
2933 bool is_in_object_; 2825 bool is_in_object_;
2934 int offset_; 2826 int offset_;
2935 Handle<Map> transition_; 2827 Handle<Map> transition_;
2936 }; 2828 };
2937 2829
2938 2830
2939 class HStoreNamedGeneric: public HStoreNamed { 2831 class HStoreNamedGeneric: public HStoreNamed {
2940 public: 2832 public:
2941 HStoreNamedGeneric(HValue* obj, Handle<Object> name, HValue* val) 2833 HStoreNamedGeneric(HValue* obj, Handle<Object> name, HValue* val)
2942 : HStoreNamed(obj, name, val) { 2834 : HStoreNamed(obj, name, val) {
2943 SetFlagMask(AllSideEffects()); 2835 SetAllSideEffects();
2944 } 2836 }
2945 2837
2946 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store_named_generic") 2838 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store_named_generic")
2947 }; 2839 };
2948 2840
2949 2841
2950 class HStoreKeyed: public HInstruction { 2842 class HStoreKeyed: public HInstruction {
2951 public: 2843 public:
2952 HStoreKeyed(HValue* obj, HValue* key, HValue* val) { 2844 HStoreKeyed(HValue* obj, HValue* key, HValue* val) {
2953 SetOperandAt(0, obj); 2845 SetOperandAt(0, obj);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2998 2890
2999 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedFastElement, 2891 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedFastElement,
3000 "store_keyed_fast_element") 2892 "store_keyed_fast_element")
3001 }; 2893 };
3002 2894
3003 2895
3004 class HStoreKeyedGeneric: public HStoreKeyed { 2896 class HStoreKeyedGeneric: public HStoreKeyed {
3005 public: 2897 public:
3006 HStoreKeyedGeneric(HValue* obj, HValue* key, HValue* val) 2898 HStoreKeyedGeneric(HValue* obj, HValue* key, HValue* val)
3007 : HStoreKeyed(obj, key, val) { 2899 : HStoreKeyed(obj, key, val) {
3008 SetFlagMask(AllSideEffects()); 2900 SetAllSideEffects();
3009 } 2901 }
3010 2902
3011 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store_keyed_generic") 2903 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store_keyed_generic")
3012 }; 2904 };
3013 2905
3014 2906
3015 class HStringCharCodeAt: public HBinaryOperation { 2907 class HStringCharCodeAt: public HBinaryOperation {
3016 public: 2908 public:
3017 HStringCharCodeAt(HValue* string, HValue* index) 2909 HStringCharCodeAt(HValue* string, HValue* index)
3018 : HBinaryOperation(string, index) { 2910 : HBinaryOperation(string, index) {
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
3187 3079
3188 DECLARE_CONCRETE_INSTRUCTION(ValueOf, "value_of") 3080 DECLARE_CONCRETE_INSTRUCTION(ValueOf, "value_of")
3189 }; 3081 };
3190 3082
3191 3083
3192 class HDeleteProperty: public HBinaryOperation { 3084 class HDeleteProperty: public HBinaryOperation {
3193 public: 3085 public:
3194 HDeleteProperty(HValue* obj, HValue* key) 3086 HDeleteProperty(HValue* obj, HValue* key)
3195 : HBinaryOperation(obj, key) { 3087 : HBinaryOperation(obj, key) {
3196 set_representation(Representation::Tagged()); 3088 set_representation(Representation::Tagged());
3197 SetFlagMask(AllSideEffects()); 3089 SetAllSideEffects();
3198 } 3090 }
3199 3091
3200 virtual Representation RequiredInputRepresentation(int index) const { 3092 virtual Representation RequiredInputRepresentation(int index) const {
3201 return Representation::Tagged(); 3093 return Representation::Tagged();
3202 } 3094 }
3203 3095
3204 DECLARE_CONCRETE_INSTRUCTION(DeleteProperty, "delete_property") 3096 DECLARE_CONCRETE_INSTRUCTION(DeleteProperty, "delete_property")
3205 3097
3206 HValue* object() const { return left(); } 3098 HValue* object() const { return left(); }
3207 HValue* key() const { return right(); } 3099 HValue* key() const { return right(); }
3208 }; 3100 };
3209 3101
3210 #undef DECLARE_INSTRUCTION 3102 #undef DECLARE_INSTRUCTION
3211 #undef DECLARE_CONCRETE_INSTRUCTION 3103 #undef DECLARE_CONCRETE_INSTRUCTION
3212 3104
3213 } } // namespace v8::internal 3105 } } // namespace v8::internal
3214 3106
3215 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ 3107 #endif // V8_HYDROGEN_INSTRUCTIONS_H_
OLDNEW
« no previous file with comments | « no previous file | src/hydrogen-instructions.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698