| Index: src/hydrogen-instructions.h
|
| ===================================================================
|
| --- src/hydrogen-instructions.h (revision 7649)
|
| +++ src/hydrogen-instructions.h (working copy)
|
| @@ -48,18 +48,10 @@
|
| class LChunkBuilder;
|
|
|
|
|
| -#define HYDROGEN_ALL_INSTRUCTION_LIST(V) \
|
| - V(ArithmeticBinaryOperation) \
|
| - V(BinaryCall) \
|
| - V(BinaryOperation) \
|
| +#define HYDROGEN_ABSTRACT_INSTRUCTION_LIST(V) \
|
| V(BitwiseBinaryOperation) \
|
| V(ControlInstruction) \
|
| V(Instruction) \
|
| - V(Phi) \
|
| - V(UnaryCall) \
|
| - V(UnaryControlInstruction) \
|
| - V(UnaryOperation) \
|
| - HYDROGEN_CONCRETE_INSTRUCTION_LIST(V)
|
|
|
|
|
| #define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V) \
|
| @@ -182,19 +174,21 @@
|
| V(ContextSlots) \
|
| V(OsrEntries)
|
|
|
| -#define DECLARE_INSTRUCTION(type) \
|
| +#define DECLARE_ABSTRACT_INSTRUCTION(type) \
|
| virtual bool Is##type() const { return true; } \
|
| static H##type* cast(HValue* value) { \
|
| ASSERT(value->Is##type()); \
|
| return reinterpret_cast<H##type*>(value); \
|
| - } \
|
| - Opcode opcode() const { return HValue::k##type; }
|
| + }
|
|
|
|
|
| -#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \
|
| +#define DECLARE_CONCRETE_INSTRUCTION(type) \
|
| virtual LInstruction* CompileToLithium(LChunkBuilder* builder); \
|
| - virtual const char* Mnemonic() const { return mnemonic; } \
|
| - DECLARE_INSTRUCTION(type)
|
| + static H##type* cast(HValue* value) { \
|
| + ASSERT(value->Is##type()); \
|
| + return reinterpret_cast<H##type*>(value); \
|
| + } \
|
| + virtual Opcode opcode() const { return HValue::k##type; }
|
|
|
|
|
| class Range: public ZoneObject {
|
| @@ -456,12 +450,26 @@
|
|
|
| enum Opcode {
|
| // Declare a unique enum value for each hydrogen instruction.
|
| - #define DECLARE_DO(type) k##type,
|
| - HYDROGEN_ALL_INSTRUCTION_LIST(DECLARE_DO)
|
| - #undef DECLARE_DO
|
| - kMaxInstructionClass
|
| + #define DECLARE_OPCODE(type) k##type,
|
| + HYDROGEN_CONCRETE_INSTRUCTION_LIST(DECLARE_OPCODE)
|
| + kPhi
|
| + #undef DECLARE_OPCODE
|
| };
|
| + virtual Opcode opcode() const = 0;
|
|
|
| + // Declare a non-virtual predicates for each concrete HInstruction or HValue.
|
| + #define DECLARE_PREDICATE(type) \
|
| + bool Is##type() const { return opcode() == k##type; }
|
| + HYDROGEN_CONCRETE_INSTRUCTION_LIST(DECLARE_PREDICATE)
|
| + #undef DECLARE_PREDICATE
|
| + bool IsPhi() const { return opcode() == kPhi; }
|
| +
|
| + // Declare virtual predicates for abstract HInstruction or HValue
|
| + #define DECLARE_PREDICATE(type) \
|
| + virtual bool Is##type() const { return false; }
|
| + HYDROGEN_ABSTRACT_INSTRUCTION_LIST(DECLARE_PREDICATE)
|
| + #undef DECLARE_PREDICATE
|
| +
|
| HValue() : block_(NULL),
|
| id_(kNoNumber),
|
| type_(HType::Tagged()),
|
| @@ -555,11 +563,6 @@
|
| // then return it. Return NULL to have the instruction deleted.
|
| virtual HValue* Canonicalize() { return this; }
|
|
|
| - // Declare virtual type testers.
|
| -#define DECLARE_DO(type) virtual bool Is##type() const { return false; }
|
| - HYDROGEN_ALL_INSTRUCTION_LIST(DECLARE_DO)
|
| -#undef DECLARE_DO
|
| -
|
| bool Equals(HValue* other);
|
| virtual intptr_t Hashcode();
|
|
|
| @@ -568,8 +571,7 @@
|
| void PrintNameTo(StringStream* stream);
|
| static void PrintTypeTo(HType type, StringStream* stream);
|
|
|
| - virtual const char* Mnemonic() const = 0;
|
| - virtual Opcode opcode() const = 0;
|
| + const char* Mnemonic() const;
|
|
|
| // Updated the inferred type of this instruction and returns true if
|
| // it has changed.
|
| @@ -657,7 +659,7 @@
|
|
|
| virtual bool IsCall() { return false; }
|
|
|
| - DECLARE_INSTRUCTION(Instruction)
|
| + DECLARE_ABSTRACT_INSTRUCTION(Instruction)
|
|
|
| protected:
|
| HInstruction()
|
| @@ -694,7 +696,7 @@
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| - DECLARE_INSTRUCTION(ControlInstruction)
|
| + DECLARE_ABSTRACT_INSTRUCTION(ControlInstruction)
|
|
|
| private:
|
| HBasicBlock* first_successor_;
|
| @@ -766,7 +768,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(BlockEntry, "block_entry")
|
| + DECLARE_CONCRETE_INSTRUCTION(BlockEntry)
|
| };
|
|
|
|
|
| @@ -788,7 +790,7 @@
|
| SetOperandAt(values_.length() - 1, value);
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize")
|
| + DECLARE_CONCRETE_INSTRUCTION(Deoptimize)
|
|
|
| protected:
|
| virtual void InternalSetOperandAt(int index, HValue* value) {
|
| @@ -815,7 +817,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Goto, "goto")
|
| + DECLARE_CONCRETE_INSTRUCTION(Goto)
|
|
|
| private:
|
| bool include_stack_check_;
|
| @@ -834,8 +836,6 @@
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| HValue* value() { return OperandAt(0); }
|
| -
|
| - DECLARE_INSTRUCTION(UnaryControlInstruction)
|
| };
|
|
|
|
|
| @@ -850,7 +850,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Test, "test")
|
| + DECLARE_CONCRETE_INSTRUCTION(Test)
|
| };
|
|
|
|
|
| @@ -875,7 +875,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CompareMap, "compare_map")
|
| + DECLARE_CONCRETE_INSTRUCTION(CompareMap)
|
|
|
| private:
|
| Handle<Map> map_;
|
| @@ -892,7 +892,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Return, "return")
|
| + DECLARE_CONCRETE_INSTRUCTION(Return)
|
| };
|
|
|
|
|
| @@ -904,7 +904,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(AbnormalExit, "abnormal_exit")
|
| + DECLARE_CONCRETE_INSTRUCTION(AbnormalExit)
|
| };
|
|
|
|
|
| @@ -916,8 +916,6 @@
|
|
|
| HValue* value() { return OperandAt(0); }
|
| virtual void PrintDataTo(StringStream* stream);
|
| -
|
| - DECLARE_INSTRUCTION(UnaryOperation)
|
| };
|
|
|
|
|
| @@ -931,7 +929,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Throw, "throw")
|
| + DECLARE_CONCRETE_INSTRUCTION(Throw)
|
| };
|
|
|
|
|
| @@ -965,8 +963,7 @@
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Change,
|
| - CanTruncateToInt32() ? "truncate" : "change")
|
| + DECLARE_CONCRETE_INSTRUCTION(Change)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) {
|
| @@ -1021,7 +1018,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Simulate, "simulate")
|
| + DECLARE_CONCRETE_INSTRUCTION(Simulate)
|
|
|
| #ifdef DEBUG
|
| virtual void Verify();
|
| @@ -1057,7 +1054,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack_check")
|
| + DECLARE_CONCRETE_INSTRUCTION(StackCheck)
|
| };
|
|
|
|
|
| @@ -1076,7 +1073,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(EnterInlined, "enter_inlined")
|
| + DECLARE_CONCRETE_INSTRUCTION(EnterInlined)
|
|
|
| private:
|
| Handle<JSFunction> closure_;
|
| @@ -1092,7 +1089,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(LeaveInlined, "leave_inlined")
|
| + DECLARE_CONCRETE_INSTRUCTION(LeaveInlined)
|
| };
|
|
|
|
|
| @@ -1108,7 +1105,7 @@
|
|
|
| HValue* argument() { return OperandAt(0); }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push_argument")
|
| + DECLARE_CONCRETE_INSTRUCTION(PushArgument)
|
| };
|
|
|
|
|
| @@ -1123,7 +1120,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Context, "context");
|
| + DECLARE_CONCRETE_INSTRUCTION(Context);
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -1137,7 +1134,7 @@
|
| SetFlag(kUseGVN);
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(OuterContext, "outer_context");
|
| + DECLARE_CONCRETE_INSTRUCTION(OuterContext);
|
|
|
| virtual Representation RequiredInputRepresentation(int index) const {
|
| return Representation::Tagged();
|
| @@ -1155,7 +1152,7 @@
|
| SetFlag(kUseGVN);
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(GlobalObject, "global_object")
|
| + DECLARE_CONCRETE_INSTRUCTION(GlobalObject)
|
|
|
| virtual Representation RequiredInputRepresentation(int index) const {
|
| return Representation::Tagged();
|
| @@ -1174,7 +1171,7 @@
|
| SetFlag(kUseGVN);
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(GlobalReceiver, "global_receiver")
|
| + DECLARE_CONCRETE_INSTRUCTION(GlobalReceiver)
|
|
|
| virtual Representation RequiredInputRepresentation(int index) const {
|
| return Representation::Tagged();
|
| @@ -1219,8 +1216,6 @@
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| HValue* value() { return OperandAt(0); }
|
| -
|
| - DECLARE_INSTRUCTION(UnaryCall)
|
| };
|
|
|
|
|
| @@ -1240,8 +1235,6 @@
|
|
|
| HValue* first() { return OperandAt(0); }
|
| HValue* second() { return OperandAt(1); }
|
| -
|
| - DECLARE_INSTRUCTION(BinaryCall)
|
| };
|
|
|
|
|
| @@ -1258,7 +1251,7 @@
|
| HValue* context() { return first(); }
|
| HValue* function() { return second(); }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke_function")
|
| + DECLARE_CONCRETE_INSTRUCTION(InvokeFunction)
|
| };
|
|
|
|
|
| @@ -1280,7 +1273,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CallConstantFunction, "call_constant_function")
|
| + DECLARE_CONCRETE_INSTRUCTION(CallConstantFunction)
|
|
|
| private:
|
| Handle<JSFunction> function_;
|
| @@ -1300,7 +1293,7 @@
|
| HValue* context() { return first(); }
|
| HValue* key() { return second(); }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call_keyed")
|
| + DECLARE_CONCRETE_INSTRUCTION(CallKeyed)
|
| };
|
|
|
|
|
| @@ -1315,7 +1308,7 @@
|
| HValue* context() { return value(); }
|
| Handle<String> name() const { return name_; }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CallNamed, "call_named")
|
| + DECLARE_CONCRETE_INSTRUCTION(CallNamed)
|
|
|
| virtual Representation RequiredInputRepresentation(int index) const {
|
| return Representation::Tagged();
|
| @@ -1338,7 +1331,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call_function")
|
| + DECLARE_CONCRETE_INSTRUCTION(CallFunction)
|
| };
|
|
|
|
|
| @@ -1357,7 +1350,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CallGlobal, "call_global")
|
| + DECLARE_CONCRETE_INSTRUCTION(CallGlobal)
|
|
|
| private:
|
| Handle<String> name_;
|
| @@ -1377,7 +1370,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal, "call_known_global")
|
| + DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal)
|
|
|
| private:
|
| Handle<JSFunction> target_;
|
| @@ -1397,7 +1390,7 @@
|
| HValue* context() { return first(); }
|
| HValue* constructor() { return second(); }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CallNew, "call_new")
|
| + DECLARE_CONCRETE_INSTRUCTION(CallNew)
|
| };
|
|
|
|
|
| @@ -1416,7 +1409,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call_runtime")
|
| + DECLARE_CONCRETE_INSTRUCTION(CallRuntime)
|
|
|
| private:
|
| const Runtime::Function* c_function_;
|
| @@ -1440,7 +1433,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(JSArrayLength, "js_array_length")
|
| + DECLARE_CONCRETE_INSTRUCTION(JSArrayLength)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -1459,7 +1452,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(FixedArrayLength, "fixed_array_length")
|
| + DECLARE_CONCRETE_INSTRUCTION(FixedArrayLength)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -1480,7 +1473,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(ExternalArrayLength, "external_array_length")
|
| + DECLARE_CONCRETE_INSTRUCTION(ExternalArrayLength)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -1500,7 +1493,7 @@
|
| }
|
| virtual HType CalculateInferredType();
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(BitNot, "bit_not")
|
| + DECLARE_CONCRETE_INSTRUCTION(BitNot)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -1572,7 +1565,7 @@
|
| BuiltinFunctionId op() const { return op_; }
|
| const char* OpName() const;
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation, "unary_math_operation")
|
| + DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) {
|
| @@ -1597,7 +1590,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(LoadElements, "load-elements")
|
| + DECLARE_CONCRETE_INSTRUCTION(LoadElements)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -1620,8 +1613,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(LoadExternalArrayPointer,
|
| - "load-external-array-pointer")
|
| + DECLARE_CONCRETE_INSTRUCTION(LoadExternalArrayPointer)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -1651,7 +1643,7 @@
|
|
|
| Handle<Map> map() const { return map_; }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CheckMap, "check_map")
|
| + DECLARE_CONCRETE_INSTRUCTION(CheckMap)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) {
|
| @@ -1686,7 +1678,7 @@
|
|
|
| Handle<JSFunction> target() const { return target_; }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CheckFunction, "check_function")
|
| + DECLARE_CONCRETE_INSTRUCTION(CheckFunction)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) {
|
| @@ -1741,7 +1733,7 @@
|
| InstanceType first() const { return first_; }
|
| InstanceType last() const { return last_; }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check_instance_type")
|
| + DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType)
|
|
|
| protected:
|
| // TODO(ager): It could be nice to allow the ommision of instance
|
| @@ -1789,7 +1781,7 @@
|
| return this;
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check_non_smi")
|
| + DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -1813,7 +1805,7 @@
|
| Handle<JSObject> prototype() const { return prototype_; }
|
| Handle<JSObject> holder() const { return holder_; }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps, "check_prototype_maps")
|
| + DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps)
|
|
|
| virtual Representation RequiredInputRepresentation(int index) const {
|
| return Representation::None();
|
| @@ -1857,7 +1849,7 @@
|
| virtual void Verify();
|
| #endif
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CheckSmi, "check_smi")
|
| + DECLARE_CONCRETE_INSTRUCTION(CheckSmi)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -1910,16 +1902,12 @@
|
|
|
| int merged_index() const { return merged_index_; }
|
|
|
| - virtual const char* Mnemonic() const { return "phi"; }
|
| -
|
| virtual void PrintTo(StringStream* stream);
|
|
|
| #ifdef DEBUG
|
| virtual void Verify();
|
| #endif
|
|
|
| - DECLARE_INSTRUCTION(Phi)
|
| -
|
| void InitRealUses(int id);
|
| void AddNonPhiUsesFrom(HPhi* other);
|
| void AddIndirectUsesTo(int* use_count);
|
| @@ -1946,6 +1934,12 @@
|
| bool is_live() { return is_live_; }
|
| void set_is_live(bool b) { is_live_ = b; }
|
|
|
| + static HPhi* cast(HValue* value) {
|
| + ASSERT(value->IsPhi());
|
| + return reinterpret_cast<HPhi*>(value);
|
| + }
|
| + virtual Opcode opcode() const { return HValue::kPhi; }
|
| +
|
| protected:
|
| virtual void DeleteFromGraph();
|
| virtual void InternalSetOperandAt(int index, HValue* value) {
|
| @@ -1974,7 +1968,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(ArgumentsObject, "arguments-object")
|
| + DECLARE_CONCRETE_INSTRUCTION(ArgumentsObject)
|
| };
|
|
|
|
|
| @@ -2019,7 +2013,7 @@
|
| virtual void Verify() { }
|
| #endif
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Constant, "constant")
|
| + DECLARE_CONCRETE_INSTRUCTION(Constant)
|
|
|
| protected:
|
| virtual Range* InferRange();
|
| @@ -2067,8 +2061,6 @@
|
| virtual bool IsCommutative() const { return false; }
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
| -
|
| - DECLARE_INSTRUCTION(BinaryOperation)
|
| };
|
|
|
|
|
| @@ -2098,7 +2090,7 @@
|
| HValue* length() { return OperandAt(2); }
|
| HValue* elements() { return OperandAt(3); }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(ApplyArguments, "apply_arguments")
|
| + DECLARE_CONCRETE_INSTRUCTION(ApplyArguments)
|
| };
|
|
|
|
|
| @@ -2111,7 +2103,7 @@
|
| SetFlag(kUseGVN);
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements, "arguments_elements")
|
| + DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements)
|
|
|
| virtual Representation RequiredInputRepresentation(int index) const {
|
| return Representation::None();
|
| @@ -2133,7 +2125,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength, "arguments_length")
|
| + DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2163,7 +2155,7 @@
|
| HValue* length() { return OperandAt(1); }
|
| HValue* index() { return OperandAt(2); }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access_arguments_at")
|
| + DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt)
|
|
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| };
|
| @@ -2189,7 +2181,7 @@
|
| HValue* index() { return left(); }
|
| HValue* length() { return right(); }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds_check")
|
| + DECLARE_CONCRETE_INSTRUCTION(BoundsCheck)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2220,7 +2212,7 @@
|
|
|
| virtual HType CalculateInferredType();
|
|
|
| - DECLARE_INSTRUCTION(BitwiseBinaryOperation)
|
| + DECLARE_ABSTRACT_INSTRUCTION(BitwiseBinaryOperation)
|
| };
|
|
|
|
|
| @@ -2250,8 +2242,6 @@
|
| }
|
| return HValue::InferredRepresentation();
|
| }
|
| -
|
| - DECLARE_INSTRUCTION(ArithmeticBinaryOperation)
|
| };
|
|
|
|
|
| @@ -2285,7 +2275,7 @@
|
| return HValue::Hashcode() * 7 + token_;
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Compare, "compare")
|
| + DECLARE_CONCRETE_INSTRUCTION(Compare)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) {
|
| @@ -2317,7 +2307,7 @@
|
| }
|
| virtual HType CalculateInferredType();
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CompareJSObjectEq, "compare-js-object-eq")
|
| + DECLARE_CONCRETE_INSTRUCTION(CompareJSObjectEq)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2349,7 +2339,7 @@
|
|
|
| bool is_strict() const { return is_strict_; }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(IsNull, "is_null")
|
| + DECLARE_CONCRETE_INSTRUCTION(IsNull)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) {
|
| @@ -2366,7 +2356,7 @@
|
| public:
|
| explicit HIsObject(HValue* value) : HUnaryPredicate(value) { }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(IsObject, "is_object")
|
| + DECLARE_CONCRETE_INSTRUCTION(IsObject)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2377,7 +2367,7 @@
|
| public:
|
| explicit HIsSmi(HValue* value) : HUnaryPredicate(value) { }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(IsSmi, "is_smi")
|
| + DECLARE_CONCRETE_INSTRUCTION(IsSmi)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2399,7 +2389,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(IsConstructCall, "is_construct_call")
|
| + DECLARE_CONCRETE_INSTRUCTION(IsConstructCall)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2420,7 +2410,7 @@
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(HasInstanceType, "has_instance_type")
|
| + DECLARE_CONCRETE_INSTRUCTION(HasInstanceType)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) {
|
| @@ -2438,7 +2428,7 @@
|
| public:
|
| explicit HHasCachedArrayIndex(HValue* value) : HUnaryPredicate(value) { }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndex, "has_cached_array_index")
|
| + DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndex)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2449,7 +2439,7 @@
|
| public:
|
| explicit HGetCachedArrayIndex(HValue* value) : HUnaryPredicate(value) { }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get_cached_array_index")
|
| + DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2461,7 +2451,7 @@
|
| HClassOfTest(HValue* value, Handle<String> class_name)
|
| : HUnaryPredicate(value), class_name_(class_name) { }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(ClassOfTest, "class_of_test")
|
| + DECLARE_CONCRETE_INSTRUCTION(ClassOfTest)
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| @@ -2486,7 +2476,7 @@
|
| Handle<String> type_literal() { return type_literal_; }
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(TypeofIs, "typeof_is")
|
| + DECLARE_CONCRETE_INSTRUCTION(TypeofIs)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) {
|
| @@ -2523,7 +2513,7 @@
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance_of")
|
| + DECLARE_CONCRETE_INSTRUCTION(InstanceOf)
|
| };
|
|
|
|
|
| @@ -2541,8 +2531,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal,
|
| - "instance_of_known_global")
|
| + DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal)
|
|
|
| private:
|
| Handle<JSFunction> function_;
|
| @@ -2561,7 +2550,7 @@
|
| return (index == 1) ? Representation::None() : Representation::Double();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Power, "power")
|
| + DECLARE_CONCRETE_INSTRUCTION(Power)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2584,7 +2573,7 @@
|
|
|
| virtual HType CalculateInferredType();
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Add, "add")
|
| + DECLARE_CONCRETE_INSTRUCTION(Add)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2601,7 +2590,7 @@
|
|
|
| virtual HValue* EnsureAndPropagateNotMinusZero(BitVector* visited);
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Sub, "sub")
|
| + DECLARE_CONCRETE_INSTRUCTION(Sub)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2623,7 +2612,7 @@
|
| return !representation().IsTagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Mul, "mul")
|
| + DECLARE_CONCRETE_INSTRUCTION(Mul)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2650,7 +2639,7 @@
|
|
|
| virtual HValue* EnsureAndPropagateNotMinusZero(BitVector* visited);
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Mod, "mod")
|
| + DECLARE_CONCRETE_INSTRUCTION(Mod)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2668,7 +2657,7 @@
|
|
|
| virtual HValue* EnsureAndPropagateNotMinusZero(BitVector* visited);
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Div, "div")
|
| + DECLARE_CONCRETE_INSTRUCTION(Div)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2685,7 +2674,7 @@
|
| virtual bool IsCommutative() const { return true; }
|
| virtual HType CalculateInferredType();
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(BitAnd, "bit_and")
|
| + DECLARE_CONCRETE_INSTRUCTION(BitAnd)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2702,7 +2691,7 @@
|
| virtual bool IsCommutative() const { return true; }
|
| virtual HType CalculateInferredType();
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(BitXor, "bit_xor")
|
| + DECLARE_CONCRETE_INSTRUCTION(BitXor)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2717,7 +2706,7 @@
|
| virtual bool IsCommutative() const { return true; }
|
| virtual HType CalculateInferredType();
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(BitOr, "bit_or")
|
| + DECLARE_CONCRETE_INSTRUCTION(BitOr)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2734,7 +2723,7 @@
|
| virtual Range* InferRange();
|
| virtual HType CalculateInferredType();
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Shl, "shl")
|
| + DECLARE_CONCRETE_INSTRUCTION(Shl)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2748,7 +2737,7 @@
|
|
|
| virtual HType CalculateInferredType();
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Shr, "shr")
|
| + DECLARE_CONCRETE_INSTRUCTION(Shr)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2763,7 +2752,7 @@
|
| virtual Range* InferRange();
|
| virtual HType CalculateInferredType();
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Sar, "sar")
|
| + DECLARE_CONCRETE_INSTRUCTION(Sar)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -2782,7 +2771,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr_entry")
|
| + DECLARE_CONCRETE_INSTRUCTION(OsrEntry)
|
|
|
| private:
|
| int ast_id_;
|
| @@ -2803,7 +2792,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter")
|
| + DECLARE_CONCRETE_INSTRUCTION(Parameter)
|
|
|
| private:
|
| unsigned index_;
|
| @@ -2835,7 +2824,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(CallStub, "call_stub")
|
| + DECLARE_CONCRETE_INSTRUCTION(CallStub)
|
|
|
| private:
|
| CodeStub::Major major_key_;
|
| @@ -2851,7 +2840,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown_osr_value")
|
| + DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue)
|
| };
|
|
|
|
|
| @@ -2878,7 +2867,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load_global_cell")
|
| + DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) {
|
| @@ -2916,7 +2905,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load_global_generic")
|
| + DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric)
|
|
|
| private:
|
| Handle<Object> name_;
|
| @@ -2943,7 +2932,7 @@
|
| }
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store_global_cell")
|
| + DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell)
|
|
|
| private:
|
| Handle<JSGlobalPropertyCell> cell_;
|
| @@ -2979,7 +2968,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(StoreGlobalGeneric, "store_global_generic")
|
| + DECLARE_CONCRETE_INSTRUCTION(StoreGlobalGeneric)
|
|
|
| private:
|
| Handle<Object> name_;
|
| @@ -3004,7 +2993,7 @@
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load_context_slot")
|
| + DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) {
|
| @@ -3044,7 +3033,7 @@
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot, "store_context_slot")
|
| + DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot)
|
|
|
| private:
|
| int slot_index_;
|
| @@ -3076,7 +3065,7 @@
|
| }
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load_named_field")
|
| + DECLARE_CONCRETE_INSTRUCTION(LoadNamedField)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) {
|
| @@ -3105,8 +3094,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(LoadNamedFieldPolymorphic,
|
| - "load_named_field_polymorphic")
|
| + DECLARE_CONCRETE_INSTRUCTION(LoadNamedFieldPolymorphic)
|
|
|
| static const int kMaxLoadPolymorphism = 4;
|
|
|
| @@ -3137,7 +3125,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load_named_generic")
|
| + DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric)
|
|
|
| private:
|
| Handle<Object> name_;
|
| @@ -3159,7 +3147,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load_function_prototype")
|
| + DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -3185,8 +3173,7 @@
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFastElement,
|
| - "load_keyed_fast_element")
|
| + DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFastElement)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -3224,8 +3211,7 @@
|
| HValue* key() { return OperandAt(1); }
|
| ExternalArrayType array_type() const { return array_type_; }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(LoadKeyedSpecializedArrayElement,
|
| - "load_keyed_specialized_array_element")
|
| + DECLARE_CONCRETE_INSTRUCTION(LoadKeyedSpecializedArrayElement)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) {
|
| @@ -3260,7 +3246,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load_keyed_generic")
|
| + DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric)
|
| };
|
|
|
|
|
| @@ -3282,7 +3268,7 @@
|
| }
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(StoreNamedField, "store_named_field")
|
| + DECLARE_CONCRETE_INSTRUCTION(StoreNamedField)
|
|
|
| virtual Representation RequiredInputRepresentation(int index) const {
|
| return Representation::Tagged();
|
| @@ -3337,7 +3323,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store_named_generic")
|
| + DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric)
|
|
|
| private:
|
| Handle<String> name_;
|
| @@ -3370,8 +3356,7 @@
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(StoreKeyedFastElement,
|
| - "store_keyed_fast_element")
|
| + DECLARE_CONCRETE_INSTRUCTION(StoreKeyedFastElement)
|
| };
|
|
|
|
|
| @@ -3407,8 +3392,8 @@
|
| HValue* value() { return OperandAt(2); }
|
| ExternalArrayType array_type() const { return array_type_; }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(StoreKeyedSpecializedArrayElement,
|
| - "store_keyed_specialized_array_element")
|
| + DECLARE_CONCRETE_INSTRUCTION(StoreKeyedSpecializedArrayElement)
|
| +
|
| private:
|
| ExternalArrayType array_type_;
|
| };
|
| @@ -3441,7 +3426,7 @@
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store_keyed_generic")
|
| + DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric)
|
|
|
| private:
|
| bool strict_mode_;
|
| @@ -3464,7 +3449,7 @@
|
| return HType::String();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string_add")
|
| + DECLARE_CONCRETE_INSTRUCTION(StringAdd)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -3489,7 +3474,7 @@
|
| HValue* string() { return OperandAt(0); }
|
| HValue* index() { return OperandAt(1); }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string_char_code_at")
|
| + DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -3513,7 +3498,7 @@
|
|
|
| virtual bool DataEquals(HValue* other) { return true; }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string_char_from_code")
|
| + DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode)
|
| };
|
|
|
|
|
| @@ -3534,7 +3519,7 @@
|
| return HType::Smi();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(StringLength, "string_length")
|
| + DECLARE_CONCRETE_INSTRUCTION(StringLength)
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) { return true; }
|
| @@ -3581,7 +3566,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(ArrayLiteral, "array_literal")
|
| + DECLARE_CONCRETE_INSTRUCTION(ArrayLiteral)
|
|
|
| private:
|
| int length_;
|
| @@ -3615,7 +3600,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(ObjectLiteral, "object_literal")
|
| + DECLARE_CONCRETE_INSTRUCTION(ObjectLiteral)
|
|
|
| private:
|
| Handle<FixedArray> constant_properties_;
|
| @@ -3640,7 +3625,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp_literal")
|
| + DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral)
|
|
|
| private:
|
| Handle<String> pattern_;
|
| @@ -3659,7 +3644,7 @@
|
| return Representation::None();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function_literal")
|
| + DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral)
|
|
|
| Handle<SharedFunctionInfo> shared_info() const { return shared_info_; }
|
| bool pretenure() const { return pretenure_; }
|
| @@ -3680,7 +3665,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof")
|
| + DECLARE_CONCRETE_INSTRUCTION(Typeof)
|
| };
|
|
|
|
|
| @@ -3698,7 +3683,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to_fast_properties")
|
| + DECLARE_CONCRETE_INSTRUCTION(ToFastProperties)
|
| };
|
|
|
|
|
| @@ -3712,7 +3697,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(ValueOf, "value_of")
|
| + DECLARE_CONCRETE_INSTRUCTION(ValueOf)
|
| };
|
|
|
|
|
| @@ -3728,7 +3713,7 @@
|
| return Representation::Tagged();
|
| }
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(DeleteProperty, "delete_property")
|
| + DECLARE_CONCRETE_INSTRUCTION(DeleteProperty)
|
|
|
| HValue* object() { return left(); }
|
| HValue* key() { return right(); }
|
|
|