| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index 1cdca4c46efa14ac1cfb764d52fff9c641790749..85d1e7549fa38aa6a051ab0f0feaa970878674ec 100644
|
| --- a/src/hydrogen-instructions.h
|
| +++ b/src/hydrogen-instructions.h
|
| @@ -50,6 +50,7 @@ class LChunkBuilder;
|
| V(ArgumentsElements) \
|
| V(ArgumentsLength) \
|
| V(ArgumentsObject) \
|
| + V(ArrayShift) \
|
| V(Bitwise) \
|
| V(BlockEntry) \
|
| V(BoundsCheck) \
|
| @@ -7077,6 +7078,51 @@ class HTransitionElementsKind V8_FINAL : public HTemplateInstruction<2> {
|
| };
|
|
|
|
|
| +class HArrayShift V8_FINAL : public HTemplateInstruction<2> {
|
| + public:
|
| + static HArrayShift* New(Zone* zone,
|
| + HValue* context,
|
| + HValue* object,
|
| + ElementsKind kind) {
|
| + return new(zone) HArrayShift(context, object, kind);
|
| + }
|
| +
|
| + virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
|
| + return Representation::Tagged();
|
| + }
|
| +
|
| + HValue* context() const { return OperandAt(0); }
|
| + HValue* object() const { return OperandAt(1); }
|
| + ElementsKind kind() const { return kind_; }
|
| +
|
| + virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(ArrayShift);
|
| +
|
| + protected:
|
| + virtual bool DataEquals(HValue* other) V8_OVERRIDE {
|
| + HArrayShift* that = HArrayShift::cast(other);
|
| + return this->kind_ == that->kind_;
|
| + }
|
| +
|
| + private:
|
| + HArrayShift(HValue* context, HValue* object, ElementsKind kind)
|
| + : kind_(kind) {
|
| + SetOperandAt(0, context);
|
| + SetOperandAt(1, object);
|
| + SetChangesFlag(kNewSpacePromotion);
|
| + set_representation(Representation::Tagged());
|
| + if (IsFastSmiOrObjectElementsKind(kind)) {
|
| + SetChangesFlag(kArrayElements);
|
| + } else {
|
| + SetChangesFlag(kDoubleArrayElements);
|
| + }
|
| + }
|
| +
|
| + ElementsKind kind_;
|
| +};
|
| +
|
| +
|
| class HStringAdd V8_FINAL : public HBinaryOperation {
|
| public:
|
| static HInstruction* New(Zone* zone,
|
|
|