| Index: src/crankshaft/hydrogen-instructions.h
|
| diff --git a/src/crankshaft/hydrogen-instructions.h b/src/crankshaft/hydrogen-instructions.h
|
| index 7ffb2a3a7ba10f1d03f6aa3021986cc58dd5c0c7..3b8a4593f9f43db395adca7115d2553985d7b1b1 100644
|
| --- a/src/crankshaft/hydrogen-instructions.h
|
| +++ b/src/crankshaft/hydrogen-instructions.h
|
| @@ -4947,33 +4947,14 @@ inline PointersToHereCheck PointersToHereCheckForObject(HValue* object,
|
|
|
| class HLoadContextSlot final : public HUnaryOperation {
|
| public:
|
| - enum Mode {
|
| - // Perform a normal load of the context slot without checking its value.
|
| - kNoCheck,
|
| - // Load and check the value of the context slot. Deoptimize if it's the
|
| - // hole value. This is used for checking for loading of uninitialized
|
| - // harmony bindings where we deoptimize into full-codegen generated code
|
| - // which will subsequently throw a reference error.
|
| - kCheckDeoptimize
|
| - };
|
| -
|
| - HLoadContextSlot(HValue* context, int slot_index, Mode mode)
|
| - : HUnaryOperation(context), slot_index_(slot_index), mode_(mode) {
|
| + HLoadContextSlot(HValue* context, int slot_index)
|
| + : HUnaryOperation(context), slot_index_(slot_index) {
|
| set_representation(Representation::Tagged());
|
| SetFlag(kUseGVN);
|
| SetDependsOnFlag(kContextSlots);
|
| }
|
|
|
| int slot_index() const { return slot_index_; }
|
| - Mode mode() const { return mode_; }
|
| -
|
| - bool DeoptimizesOnHole() {
|
| - return mode_ == kCheckDeoptimize;
|
| - }
|
| -
|
| - bool RequiresHoleCheck() const {
|
| - return mode_ != kNoCheck;
|
| - }
|
|
|
| Representation RequiredInputRepresentation(int index) override {
|
| return Representation::Tagged();
|
| @@ -4990,46 +4971,24 @@ class HLoadContextSlot final : public HUnaryOperation {
|
| }
|
|
|
| private:
|
| - bool IsDeletable() const override { return !RequiresHoleCheck(); }
|
| + bool IsDeletable() const override { return true; }
|
|
|
| int slot_index_;
|
| - Mode mode_;
|
| };
|
|
|
|
|
| class HStoreContextSlot final : public HTemplateInstruction<2> {
|
| public:
|
| - enum Mode {
|
| - // Perform a normal store to the context slot without checking its previous
|
| - // value.
|
| - kNoCheck,
|
| - // Check the previous value of the context slot and deoptimize if it's the
|
| - // hole value. This is used for checking for assignments to uninitialized
|
| - // harmony bindings where we deoptimize into full-codegen generated code
|
| - // which will subsequently throw a reference error.
|
| - kCheckDeoptimize
|
| - };
|
| -
|
| - DECLARE_INSTRUCTION_FACTORY_P4(HStoreContextSlot, HValue*, int,
|
| - Mode, HValue*);
|
| + DECLARE_INSTRUCTION_FACTORY_P3(HStoreContextSlot, HValue*, int, HValue*);
|
|
|
| HValue* context() const { return OperandAt(0); }
|
| HValue* value() const { return OperandAt(1); }
|
| int slot_index() const { return slot_index_; }
|
| - Mode mode() const { return mode_; }
|
|
|
| bool NeedsWriteBarrier() {
|
| return StoringValueNeedsWriteBarrier(value());
|
| }
|
|
|
| - bool DeoptimizesOnHole() {
|
| - return mode_ == kCheckDeoptimize;
|
| - }
|
| -
|
| - bool RequiresHoleCheck() {
|
| - return mode_ != kNoCheck;
|
| - }
|
| -
|
| Representation RequiredInputRepresentation(int index) override {
|
| return Representation::Tagged();
|
| }
|
| @@ -5039,15 +4998,14 @@ class HStoreContextSlot final : public HTemplateInstruction<2> {
|
| DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot)
|
|
|
| private:
|
| - HStoreContextSlot(HValue* context, int slot_index, Mode mode, HValue* value)
|
| - : slot_index_(slot_index), mode_(mode) {
|
| + HStoreContextSlot(HValue* context, int slot_index, HValue* value)
|
| + : slot_index_(slot_index) {
|
| SetOperandAt(0, context);
|
| SetOperandAt(1, value);
|
| SetChangesFlag(kContextSlots);
|
| }
|
|
|
| int slot_index_;
|
| - Mode mode_;
|
| };
|
|
|
|
|
|
|