Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index 3de393f2ed9501597c623258aa2ef46e03c80480..2a1af66622f1b254eddd1ba913acb596bccdd8f9 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -46,112 +46,6 @@ class LInstruction; |
class LChunkBuilder; |
-// Type hierarchy: |
-// |
-// HValue |
-// HInstruction |
-// HAccessArgumentsAt |
-// HApplyArguments |
-// HArgumentsElements |
-// HArgumentsLength |
-// HArgumentsObject |
-// HBinaryOperation |
-// HArithmeticBinaryOperation |
-// HAdd |
-// HDiv |
-// HMod |
-// HMul |
-// HSub |
-// HBitwiseBinaryOperation |
-// HBitAnd |
-// HBitOr |
-// HBitXor |
-// HSar |
-// HShl |
-// HShr |
-// HBoundsCheck |
-// HCompare |
-// HCompareJSObjectEq |
-// HInstanceOf |
-// HInstanceOfKnownGlobal |
-// HLoadKeyed |
-// HLoadKeyedFastElement |
-// HLoadKeyedGeneric |
-// HPower |
-// HStoreNamed |
-// HStoreNamedField |
-// HStoreNamedGeneric |
-// HStringCharCodeAt |
-// HBlockEntry |
-// HCall |
-// HCallConstantFunction |
-// HCallFunction |
-// HCallGlobal |
-// HCallKeyed |
-// HCallKnownGlobal |
-// HCallNamed |
-// HCallNew |
-// HCallRuntime |
-// HCallStub |
-// HCheckPrototypeMaps |
-// HConstant |
-// HControlInstruction |
-// HDeoptimize |
-// HGoto |
-// HUnaryControlInstruction |
-// HCompareMap |
-// HReturn |
-// HTest |
-// HThrow |
-// HEnterInlined |
-// HFunctionLiteral |
-// HGlobalObject |
-// HGlobalReceiver |
-// HLeaveInlined |
-// HLoadContextSlot |
-// HLoadGlobal |
-// HMaterializedLiteral |
-// HArrayLiteral |
-// HObjectLiteral |
-// HRegExpLiteral |
-// HOsrEntry |
-// HParameter |
-// HSimulate |
-// HStackCheck |
-// HStoreKeyed |
-// HStoreKeyedFastElement |
-// HStoreKeyedGeneric |
-// HUnaryOperation |
-// HBitNot |
-// HChange |
-// HCheckFunction |
-// HCheckInstanceType |
-// HCheckMap |
-// HCheckNonSmi |
-// HCheckSmi |
-// HDeleteProperty |
-// HFixedArrayLength |
-// HJSArrayLength |
-// HLoadElements |
-// HLoadFunctionPrototype |
-// HLoadNamedField |
-// HLoadNamedGeneric |
-// HPushArgument |
-// HStringLength |
-// HTypeof |
-// HUnaryMathOperation |
-// HUnaryPredicate |
-// HClassOfTest |
-// HHasCachedArrayIndex |
-// HHasInstanceType |
-// HIsNull |
-// HIsObject |
-// HIsSmi |
-// HTypeofIs |
-// HValueOf |
-// HUnknownOSRValue |
-// HPhi |
- |
#define HYDROGEN_ALL_INSTRUCTION_LIST(V) \ |
V(ArithmeticBinaryOperation) \ |
V(BinaryOperation) \ |
@@ -572,11 +466,6 @@ class HValue: public ZoneObject { |
return flags << kChangesToDependsFlagsLeftShift; |
} |
- // A flag mask to mark an instruction as having arbitrary side effects. |
- static int AllSideEffects() { |
- return ChangesFlagsMask() & ~(1 << kChangesOsrEntries); |
- } |
- |
static HValue* cast(HValue* value) { return value; } |
enum Opcode { |
@@ -635,9 +524,6 @@ class HValue: public ZoneObject { |
return NULL; |
} |
- bool HasSideEffects() const { |
- return (flags_ & AllSideEffects()) != 0; |
- } |
bool IsDefinedAfter(HBasicBlock* other) const; |
// Operands. |
@@ -660,12 +546,13 @@ class HValue: public ZoneObject { |
void Delete(); |
int flags() const { return flags_; } |
- void SetFlagMask(int mask) { flags_ |= mask; } |
- void SetFlag(Flag f) { SetFlagMask(1 << f); } |
- void ClearFlagMask(int mask) { flags_ &= ~mask; } |
- void ClearFlag(Flag f) { ClearFlagMask(1 << f); } |
- bool CheckFlag(Flag f) const { return CheckFlagMask(1 << f); } |
- bool CheckFlagMask(int mask) const { return (flags_ & mask) != 0; } |
+ void SetFlag(Flag f) { flags_ |= (1 << f); } |
+ void ClearFlag(Flag f) { flags_ &= ~(1 << f); } |
+ bool CheckFlag(Flag f) const { return (flags_ & (1 << f)) != 0; } |
+ |
+ void SetAllSideEffects() { flags_ |= AllSideEffects(); } |
+ void ClearAllSideEffects() { flags_ &= ~AllSideEffects(); } |
+ bool HasSideEffects() const { return (flags_ & AllSideEffects()) != 0; } |
Range* range() const { return range_; } |
bool HasRange() const { return range_ != NULL; } |
@@ -739,6 +626,11 @@ class HValue: public ZoneObject { |
} |
private: |
+ // A flag mask to mark an instruction as having arbitrary side effects. |
+ static int AllSideEffects() { |
+ return ChangesFlagsMask() & ~(1 << kChangesOsrEntries); |
+ } |
+ |
void InternalReplaceAtUse(HValue* use, HValue* other); |
void RegisterUse(int index, HValue* new_value); |
@@ -2073,7 +1965,7 @@ class HBitwiseBinaryOperation: public HBinaryOperation { |
: HBinaryOperation(left, right) { |
set_representation(Representation::Tagged()); |
SetFlag(kFlexibleRepresentation); |
- SetFlagMask(AllSideEffects()); |
+ SetAllSideEffects(); |
} |
virtual Representation RequiredInputRepresentation(int index) const { |
@@ -2083,7 +1975,7 @@ class HBitwiseBinaryOperation: public HBinaryOperation { |
virtual void RepresentationChanged(Representation to) { |
if (!to.IsTagged()) { |
ASSERT(to.IsInteger32()); |
- ClearFlagMask(AllSideEffects()); |
+ ClearAllSideEffects(); |
SetFlag(kTruncatingToInt32); |
SetFlag(kUseGVN); |
} |
@@ -2101,12 +1993,12 @@ class HArithmeticBinaryOperation: public HBinaryOperation { |
: HBinaryOperation(left, right) { |
set_representation(Representation::Tagged()); |
SetFlag(kFlexibleRepresentation); |
- SetFlagMask(AllSideEffects()); |
+ SetAllSideEffects(); |
} |
virtual void RepresentationChanged(Representation to) { |
if (!to.IsTagged()) { |
- ClearFlagMask(AllSideEffects()); |
+ ClearAllSideEffects(); |
SetFlag(kUseGVN); |
} |
} |
@@ -2132,7 +2024,7 @@ class HCompare: public HBinaryOperation { |
: HBinaryOperation(left, right), token_(token) { |
ASSERT(Token::IsCompareOp(token)); |
set_representation(Representation::Tagged()); |
- SetFlagMask(AllSideEffects()); |
+ SetAllSideEffects(); |
} |
void SetInputRepresentation(Representation r); |
@@ -2329,7 +2221,7 @@ class HInstanceOf: public HBinaryOperation { |
public: |
HInstanceOf(HValue* left, HValue* right) : HBinaryOperation(left, right) { |
set_representation(Representation::Tagged()); |
- SetFlagMask(AllSideEffects()); |
+ SetAllSideEffects(); |
} |
virtual bool EmitAtUses() const { return uses()->length() <= 1; } |
@@ -2347,7 +2239,7 @@ class HInstanceOfKnownGlobal: public HUnaryOperation { |
HInstanceOfKnownGlobal(HValue* left, Handle<JSFunction> right) |
: HUnaryOperation(left), function_(right) { |
set_representation(Representation::Tagged()); |
- SetFlagMask(AllSideEffects()); |
+ SetAllSideEffects(); |
} |
Handle<JSFunction> function() { return function_; } |
@@ -2614,7 +2506,7 @@ class HCallStub: public HInstruction { |
argument_count_(argument_count), |
transcendental_type_(TranscendentalCache::kNumberOfCaches) { |
set_representation(Representation::Tagged()); |
- SetFlagMask(AllSideEffects()); |
+ SetAllSideEffects(); |
} |
CodeStub::Major major_key() { return major_key_; } |
@@ -2778,7 +2670,7 @@ class HLoadNamedGeneric: public HUnaryOperation { |
HLoadNamedGeneric(HValue* object, Handle<Object> name) |
: HUnaryOperation(object), name_(name) { |
set_representation(Representation::Tagged()); |
- SetFlagMask(AllSideEffects()); |
+ SetAllSideEffects(); |
} |
HValue* object() const { return OperandAt(0); } |
@@ -2859,7 +2751,7 @@ class HLoadKeyedFastElement: public HLoadKeyed { |
class HLoadKeyedGeneric: public HLoadKeyed { |
public: |
HLoadKeyedGeneric(HValue* obj, HValue* key) : HLoadKeyed(obj, key) { |
- SetFlagMask(AllSideEffects()); |
+ SetAllSideEffects(); |
} |
DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load_keyed_generic") |
@@ -2940,7 +2832,7 @@ class HStoreNamedGeneric: public HStoreNamed { |
public: |
HStoreNamedGeneric(HValue* obj, Handle<Object> name, HValue* val) |
: HStoreNamed(obj, name, val) { |
- SetFlagMask(AllSideEffects()); |
+ SetAllSideEffects(); |
} |
DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store_named_generic") |
@@ -3005,7 +2897,7 @@ class HStoreKeyedGeneric: public HStoreKeyed { |
public: |
HStoreKeyedGeneric(HValue* obj, HValue* key, HValue* val) |
: HStoreKeyed(obj, key, val) { |
- SetFlagMask(AllSideEffects()); |
+ SetAllSideEffects(); |
} |
DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store_keyed_generic") |
@@ -3194,7 +3086,7 @@ class HDeleteProperty: public HBinaryOperation { |
HDeleteProperty(HValue* obj, HValue* key) |
: HBinaryOperation(obj, key) { |
set_representation(Representation::Tagged()); |
- SetFlagMask(AllSideEffects()); |
+ SetAllSideEffects(); |
} |
virtual Representation RequiredInputRepresentation(int index) const { |