| Index: src/hydrogen-instructions.h | 
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h | 
| index 069642ae8c75210d638024126c784db225cbb6b4..e460cd2296a74dbef45b8b003ee0d04479fc019c 100644 | 
| --- a/src/hydrogen-instructions.h | 
| +++ b/src/hydrogen-instructions.h | 
| @@ -103,6 +103,7 @@ class LChunkBuilder; | 
| V(Div)                                       \ | 
| V(ElementsKind)                              \ | 
| V(EnterInlined)                              \ | 
| +  V(FastLiteral)                               \ | 
| V(FixedArrayBaseLength)                      \ | 
| V(ForceRepresentation)                       \ | 
| V(FunctionLiteral)                           \ | 
| @@ -140,8 +141,7 @@ class LChunkBuilder; | 
| V(LoadNamedGeneric)                          \ | 
| V(Mod)                                       \ | 
| V(Mul)                                       \ | 
| -  V(ObjectLiteralFast)                         \ | 
| -  V(ObjectLiteralGeneric)                      \ | 
| +  V(ObjectLiteral)                             \ | 
| V(OsrEntry)                                  \ | 
| V(OuterContext)                              \ | 
| V(Parameter)                                 \ | 
| @@ -4357,6 +4357,41 @@ class HMaterializedLiteral: public HTemplateInstruction<V> { | 
| }; | 
|  | 
|  | 
| +class HFastLiteral: public HMaterializedLiteral<1> { | 
| + public: | 
| +  HFastLiteral(HValue* context, | 
| +               Handle<JSObject> boilerplate, | 
| +               int total_size, | 
| +               int literal_index, | 
| +               int depth) | 
| +      : HMaterializedLiteral<1>(literal_index, depth), | 
| +        boilerplate_(boilerplate), | 
| +        total_size_(total_size) { | 
| +    SetOperandAt(0, context); | 
| +  } | 
| + | 
| +  // Maximum depth and total number of elements and properties for literal | 
| +  // graphs to be considered for fast deep-copying. | 
| +  static const int kMaxLiteralDepth = 3; | 
| +  static const int kMaxLiteralProperties = 8; | 
| + | 
| +  HValue* context() { return OperandAt(0); } | 
| +  Handle<JSObject> boilerplate() const { return boilerplate_; } | 
| +  int total_size() const { return total_size_; } | 
| + | 
| +  virtual Representation RequiredInputRepresentation(int index) { | 
| +    return Representation::Tagged(); | 
| +  } | 
| +  virtual HType CalculateInferredType(); | 
| + | 
| +  DECLARE_CONCRETE_INSTRUCTION(FastLiteral) | 
| + | 
| + private: | 
| +  Handle<JSObject> boilerplate_; | 
| +  int total_size_; | 
| +}; | 
| + | 
| + | 
| class HArrayLiteral: public HMaterializedLiteral<1> { | 
| public: | 
| HArrayLiteral(HValue* context, | 
| @@ -4395,49 +4430,14 @@ class HArrayLiteral: public HMaterializedLiteral<1> { | 
| }; | 
|  | 
|  | 
| -class HObjectLiteralFast: public HMaterializedLiteral<1> { | 
| - public: | 
| -  HObjectLiteralFast(HValue* context, | 
| -                     Handle<JSObject> boilerplate, | 
| -                     int total_size, | 
| -                     int literal_index, | 
| -                     int depth) | 
| -      : HMaterializedLiteral<1>(literal_index, depth), | 
| -        boilerplate_(boilerplate), | 
| -        total_size_(total_size) { | 
| -    SetOperandAt(0, context); | 
| -  } | 
| - | 
| -  // Maximum depth and total number of properties for object literal | 
| -  // graphs to be considered for fast deep-copying. | 
| -  static const int kMaxObjectLiteralDepth = 3; | 
| -  static const int kMaxObjectLiteralProperties = 8; | 
| - | 
| -  HValue* context() { return OperandAt(0); } | 
| -  Handle<JSObject> boilerplate() const { return boilerplate_; } | 
| -  int total_size() const { return total_size_; } | 
| - | 
| -  virtual Representation RequiredInputRepresentation(int index) { | 
| -    return Representation::Tagged(); | 
| -  } | 
| -  virtual HType CalculateInferredType(); | 
| - | 
| -  DECLARE_CONCRETE_INSTRUCTION(ObjectLiteralFast) | 
| - | 
| - private: | 
| -  Handle<JSObject> boilerplate_; | 
| -  int total_size_; | 
| -}; | 
| - | 
| - | 
| -class HObjectLiteralGeneric: public HMaterializedLiteral<1> { | 
| +class HObjectLiteral: public HMaterializedLiteral<1> { | 
| public: | 
| -  HObjectLiteralGeneric(HValue* context, | 
| -                        Handle<FixedArray> constant_properties, | 
| -                        bool fast_elements, | 
| -                        int literal_index, | 
| -                        int depth, | 
| -                        bool has_function) | 
| +  HObjectLiteral(HValue* context, | 
| +                 Handle<FixedArray> constant_properties, | 
| +                 bool fast_elements, | 
| +                 int literal_index, | 
| +                 int depth, | 
| +                 bool has_function) | 
| : HMaterializedLiteral<1>(literal_index, depth), | 
| constant_properties_(constant_properties), | 
| fast_elements_(fast_elements), | 
| @@ -4457,7 +4457,7 @@ class HObjectLiteralGeneric: public HMaterializedLiteral<1> { | 
| } | 
| virtual HType CalculateInferredType(); | 
|  | 
| -  DECLARE_CONCRETE_INSTRUCTION(ObjectLiteralGeneric) | 
| +  DECLARE_CONCRETE_INSTRUCTION(ObjectLiteral) | 
|  | 
| private: | 
| Handle<FixedArray> constant_properties_; | 
| @@ -4552,7 +4552,7 @@ class HToFastProperties: public HUnaryOperation { | 
| // This instruction is not marked as having side effects, but | 
| // changes the map of the input operand. Use it only when creating | 
| // object literals. | 
| -    ASSERT(value->IsObjectLiteralGeneric() || value->IsObjectLiteralFast()); | 
| +    ASSERT(value->IsObjectLiteral() || value->IsFastLiteral()); | 
| set_representation(Representation::Tagged()); | 
| } | 
|  | 
|  |