| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index 0e33c82cb482bc2b357b6fe1e9772dd28e98ab18..8f7d602d2e5794d49796a056912a0a86b9691749 100644
|
| --- a/src/hydrogen-instructions.h
|
| +++ b/src/hydrogen-instructions.h
|
| @@ -109,7 +109,6 @@ class LChunkBuilder;
|
| V(Deoptimize) \
|
| V(Div) \
|
| V(DummyUse) \
|
| - V(ElementsKind) \
|
| V(EnterInlined) \
|
| V(EnvironmentMarker) \
|
| V(ForceRepresentation) \
|
| @@ -172,7 +171,6 @@ class LChunkBuilder;
|
| V(StringCompareAndBranch) \
|
| V(Sub) \
|
| V(ThisFunction) \
|
| - V(Throw) \
|
| V(ToFastProperties) \
|
| V(TransitionElementsKind) \
|
| V(TrapAllocationMemento) \
|
| @@ -181,7 +179,6 @@ class LChunkBuilder;
|
| V(UnaryMathOperation) \
|
| V(UnknownOSRValue) \
|
| V(UseConst) \
|
| - V(ValueOf) \
|
| V(WrapReceiver)
|
|
|
| #define GVN_TRACKED_FLAG_LIST(V) \
|
| @@ -1642,28 +1639,6 @@ class HUnaryOperation : public HTemplateInstruction<1> {
|
| };
|
|
|
|
|
| -class HThrow V8_FINAL : public HTemplateInstruction<2> {
|
| - public:
|
| - DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P1(HThrow, HValue*);
|
| -
|
| - virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
|
| - return Representation::Tagged();
|
| - }
|
| -
|
| - HValue* context() { return OperandAt(0); }
|
| - HValue* value() { return OperandAt(1); }
|
| -
|
| - DECLARE_CONCRETE_INSTRUCTION(Throw)
|
| -
|
| - private:
|
| - HThrow(HValue* context, HValue* value) {
|
| - SetOperandAt(0, context);
|
| - SetOperandAt(1, value);
|
| - SetAllSideEffects();
|
| - }
|
| -};
|
| -
|
| -
|
| class HUseConst V8_FINAL : public HUnaryOperation {
|
| public:
|
| DECLARE_INSTRUCTION_FACTORY_P1(HUseConst, HValue*);
|
| @@ -1980,8 +1955,7 @@ class HStackCheck V8_FINAL : public HTemplateInstruction<1> {
|
|
|
|
|
| enum InliningKind {
|
| - NORMAL_RETURN, // Normal function/method call and return.
|
| - DROP_EXTRA_ON_RETURN, // Drop an extra value from the environment on return.
|
| + NORMAL_RETURN, // Drop the function from the environment on return.
|
| CONSTRUCT_CALL_RETURN, // Either use allocated receiver or return value.
|
| GETTER_CALL_RETURN, // Returning from a getter, need to restore context.
|
| SETTER_CALL_RETURN // Use the RHS of the assignment as the return value.
|
| @@ -2398,39 +2372,28 @@ class HInvokeFunction V8_FINAL : public HBinaryCall {
|
| };
|
|
|
|
|
| -enum CallMode {
|
| - NORMAL_CALL,
|
| - TAIL_CALL,
|
| - NORMAL_CONTEXTUAL_CALL
|
| -};
|
| -
|
| -
|
| class HCallFunction V8_FINAL : public HBinaryCall {
|
| public:
|
| DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HCallFunction, HValue*, int);
|
| DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(
|
| - HCallFunction, HValue*, int, CallMode);
|
| + HCallFunction, HValue*, int, CallFunctionFlags);
|
|
|
| - bool IsTailCall() const { return call_mode_ == TAIL_CALL; }
|
| - bool IsContextualCall() const { return call_mode_ == NORMAL_CONTEXTUAL_CALL; }
|
| HValue* context() { return first(); }
|
| HValue* function() { return second(); }
|
| + CallFunctionFlags function_flags() const { return function_flags_; }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(CallFunction)
|
|
|
| - virtual int argument_delta() const V8_OVERRIDE {
|
| - if (IsTailCall()) return 0;
|
| - return -argument_count();
|
| - }
|
| + virtual int argument_delta() const V8_OVERRIDE { return -argument_count(); }
|
|
|
| private:
|
| HCallFunction(HValue* context,
|
| HValue* function,
|
| int argument_count,
|
| - CallMode mode = NORMAL_CALL)
|
| - : HBinaryCall(context, function, argument_count), call_mode_(mode) {
|
| + CallFunctionFlags flags = NO_CALL_FUNCTION_FLAGS)
|
| + : HBinaryCall(context, function, argument_count), function_flags_(flags) {
|
| }
|
| - CallMode call_mode_;
|
| + CallFunctionFlags function_flags_;
|
| };
|
|
|
|
|
| @@ -2539,28 +2502,6 @@ class HMapEnumLength V8_FINAL : public HUnaryOperation {
|
| };
|
|
|
|
|
| -class HElementsKind V8_FINAL : public HUnaryOperation {
|
| - public:
|
| - explicit HElementsKind(HValue* value) : HUnaryOperation(value) {
|
| - set_representation(Representation::Integer32());
|
| - SetFlag(kUseGVN);
|
| - SetGVNFlag(kDependsOnElementsKind);
|
| - }
|
| -
|
| - virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
|
| - return Representation::Tagged();
|
| - }
|
| -
|
| - DECLARE_CONCRETE_INSTRUCTION(ElementsKind)
|
| -
|
| - protected:
|
| - virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; }
|
| -
|
| - private:
|
| - virtual bool IsDeletable() const V8_OVERRIDE { return true; }
|
| -};
|
| -
|
| -
|
| class HUnaryMathOperation V8_FINAL : public HTemplateInstruction<2> {
|
| public:
|
| static HInstruction* New(Zone* zone,
|
| @@ -3437,33 +3378,7 @@ class HConstant V8_FINAL : public HTemplateInstruction<0> {
|
| return is_not_in_new_space_;
|
| }
|
|
|
| - bool ImmortalImmovable() const {
|
| - if (has_int32_value_) {
|
| - return false;
|
| - }
|
| - if (has_double_value_) {
|
| - if (IsSpecialDouble()) {
|
| - return true;
|
| - }
|
| - return false;
|
| - }
|
| - if (has_external_reference_value_) {
|
| - return false;
|
| - }
|
| -
|
| - ASSERT(!object_.handle().is_null());
|
| - Heap* heap = isolate()->heap();
|
| - ASSERT(!object_.IsKnownGlobal(heap->minus_zero_value()));
|
| - ASSERT(!object_.IsKnownGlobal(heap->nan_value()));
|
| - return
|
| - object_.IsKnownGlobal(heap->undefined_value()) ||
|
| - object_.IsKnownGlobal(heap->null_value()) ||
|
| - object_.IsKnownGlobal(heap->true_value()) ||
|
| - object_.IsKnownGlobal(heap->false_value()) ||
|
| - object_.IsKnownGlobal(heap->the_hole_value()) ||
|
| - object_.IsKnownGlobal(heap->empty_string()) ||
|
| - object_.IsKnownGlobal(heap->empty_fixed_array());
|
| - }
|
| + bool ImmortalImmovable() const;
|
|
|
| bool IsCell() const {
|
| return is_cell_;
|
| @@ -3738,6 +3653,8 @@ class HWrapReceiver V8_FINAL : public HTemplateInstruction<2> {
|
| public:
|
| DECLARE_INSTRUCTION_FACTORY_P2(HWrapReceiver, HValue*, HValue*);
|
|
|
| + virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; }
|
| +
|
| virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
|
| return Representation::Tagged();
|
| }
|
| @@ -3748,15 +3665,21 @@ class HWrapReceiver V8_FINAL : public HTemplateInstruction<2> {
|
| virtual HValue* Canonicalize() V8_OVERRIDE;
|
|
|
| virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
|
| + bool known_function() const { return known_function_; }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(WrapReceiver)
|
|
|
| private:
|
| HWrapReceiver(HValue* receiver, HValue* function) {
|
| + known_function_ = function->IsConstant() &&
|
| + HConstant::cast(function)->handle(function->isolate())->IsJSFunction();
|
| set_representation(Representation::Tagged());
|
| SetOperandAt(0, receiver);
|
| SetOperandAt(1, function);
|
| + SetFlag(kUseGVN);
|
| }
|
| +
|
| + bool known_function_;
|
| };
|
|
|
|
|
| @@ -4316,6 +4239,9 @@ class HIsStringAndBranch V8_FINAL : public HUnaryControlInstruction {
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(IsStringAndBranch)
|
|
|
| + protected:
|
| + virtual int RedefinedOperandIndex() { return 0; }
|
| +
|
| private:
|
| HIsStringAndBranch(HValue* value,
|
| HBasicBlock* true_target = NULL,
|
| @@ -4338,6 +4264,7 @@ class HIsSmiAndBranch V8_FINAL : public HUnaryControlInstruction {
|
|
|
| protected:
|
| virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; }
|
| + virtual int RedefinedOperandIndex() { return 0; }
|
|
|
| private:
|
| HIsSmiAndBranch(HValue* value,
|
| @@ -7205,25 +7132,6 @@ class HToFastProperties V8_FINAL : public HUnaryOperation {
|
| };
|
|
|
|
|
| -class HValueOf V8_FINAL : public HUnaryOperation {
|
| - public:
|
| - DECLARE_INSTRUCTION_FACTORY_P1(HValueOf, HValue*);
|
| -
|
| - virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
|
| - return Representation::Tagged();
|
| - }
|
| -
|
| - DECLARE_CONCRETE_INSTRUCTION(ValueOf)
|
| -
|
| - private:
|
| - explicit HValueOf(HValue* value) : HUnaryOperation(value) {
|
| - set_representation(Representation::Tagged());
|
| - }
|
| -
|
| - virtual bool IsDeletable() const V8_OVERRIDE { return true; }
|
| -};
|
| -
|
| -
|
| class HDateField V8_FINAL : public HUnaryOperation {
|
| public:
|
| DECLARE_INSTRUCTION_FACTORY_P2(HDateField, HValue*, Smi*);
|
|
|