| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index 7554fd85bad5a136e387698eb704159008be7bdd..222f63d0d94d56cae3d9ca56fe6679b53f6af63e 100644
|
| --- a/src/hydrogen-instructions.h
|
| +++ b/src/hydrogen-instructions.h
|
| @@ -3246,10 +3246,12 @@ class HConstant: public HTemplateInstruction<0> {
|
| Representation r = Representation::None(),
|
| bool is_not_in_new_space = true,
|
| Handle<Object> optional_handle = Handle<Object>::null());
|
| +
|
| HConstant(double value,
|
| Representation r = Representation::None(),
|
| bool is_not_in_new_space = true,
|
| Handle<Object> optional_handle = Handle<Object>::null());
|
| +
|
| HConstant(Handle<Object> handle,
|
| UniqueValueId unique_id,
|
| Representation r,
|
| @@ -3304,6 +3306,10 @@ class HConstant: public HTemplateInstruction<0> {
|
| unique_id_ == UniqueValueId(heap->empty_string());
|
| }
|
|
|
| + bool IsCell() const {
|
| + return is_cell_;
|
| + }
|
| +
|
| virtual Representation RequiredInputRepresentation(int index) {
|
| return Representation::None();
|
| }
|
| @@ -3315,7 +3321,7 @@ class HConstant: public HTemplateInstruction<0> {
|
| return Representation::Tagged();
|
| }
|
|
|
| - virtual bool EmitAtUses() { return !representation().IsDouble(); }
|
| + virtual bool EmitAtUses();
|
| virtual void PrintDataTo(StringStream* stream);
|
| virtual HType CalculateInferredType();
|
| bool IsInteger() { return handle()->IsSmi(); }
|
| @@ -3430,6 +3436,7 @@ class HConstant: public HTemplateInstruction<0> {
|
| bool has_double_value_ : 1;
|
| bool is_internalized_string_ : 1; // TODO(yangguo): make this part of HType.
|
| bool is_not_in_new_space_ : 1;
|
| + bool is_cell_ : 1;
|
| bool boolean_value_ : 1;
|
| int32_t int32_value_;
|
| double double_value_;
|
| @@ -5057,6 +5064,9 @@ inline bool ReceiverObjectNeedsWriteBarrier(HValue* object,
|
| HInnerAllocatedObject::cast(object)->base_object(),
|
| new_space_dominator);
|
| }
|
| + if (object->IsConstant() && HConstant::cast(object)->IsCell()) {
|
| + return false;
|
| + }
|
| if (object != new_space_dominator) return true;
|
| if (object->IsAllocate()) {
|
| return !HAllocate::cast(object)->GuaranteedInNewSpace();
|
| @@ -5317,6 +5327,9 @@ class HObjectAccess {
|
| static HObjectAccess ForField(Handle<Map> map,
|
| LookupResult *lookup, Handle<String> name = Handle<String>::null());
|
|
|
| + // Create an access for the payload of a Cell or JSGlobalPropertyCell.
|
| + static HObjectAccess ForCellPayload(Isolate* isolate);
|
| +
|
| void PrintTo(StringStream* stream);
|
|
|
| inline bool Equals(HObjectAccess that) const {
|
|
|