| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index 763b6369e3583a0a1c9b1a41bd3af7e93e8fe34e..a6935cc44c625799aa66e9dbca14c66f2d250da6 100644
|
| --- a/src/hydrogen-instructions.h
|
| +++ b/src/hydrogen-instructions.h
|
| @@ -2732,12 +2732,7 @@ class HLoadExternalArrayPointer: public HUnaryOperation {
|
| class HCheckMaps: public HTemplateInstruction<2> {
|
| public:
|
| static HCheckMaps* New(HValue* value, Handle<Map> map, Zone* zone,
|
| - HValue *typecheck = NULL) {
|
| - HCheckMaps* check_map = new(zone) HCheckMaps(value, zone, typecheck);
|
| - check_map->map_set_.Add(map, zone);
|
| - return check_map;
|
| - }
|
| -
|
| + CompilationInfo* info, HValue *typecheck = NULL);
|
| static HCheckMaps* New(HValue* value, SmallMapList* maps, Zone* zone,
|
| HValue *typecheck = NULL) {
|
| HCheckMaps* check_map = new(zone) HCheckMaps(value, zone, typecheck);
|
| @@ -2771,6 +2766,8 @@ class HCheckMaps: public HTemplateInstruction<2> {
|
| return check_map;
|
| }
|
|
|
| + bool CanOmitMapChecks() { return omit_; }
|
| +
|
| virtual bool HasEscapingOperandAt(int index) { return false; }
|
| virtual Representation RequiredInputRepresentation(int index) {
|
| return Representation::Tagged();
|
| @@ -2806,7 +2803,7 @@ class HCheckMaps: public HTemplateInstruction<2> {
|
| private:
|
| // Clients should use one of the static New* methods above.
|
| HCheckMaps(HValue* value, Zone *zone, HValue* typecheck)
|
| - : map_unique_ids_(0, zone) {
|
| + : omit_(false), map_unique_ids_(0, zone) {
|
| SetOperandAt(0, value);
|
| // Use the object value for the dependency if NULL is passed.
|
| // TODO(titzer): do GVN flags already express this dependency?
|
| @@ -2818,6 +2815,16 @@ class HCheckMaps: public HTemplateInstruction<2> {
|
| SetGVNFlag(kDependsOnElementsKind);
|
| }
|
|
|
| + void omit(CompilationInfo* info) {
|
| + omit_ = true;
|
| + for (int i = 0; i < map_set_.length(); i++) {
|
| + Handle<Map> map = map_set_.at(i);
|
| + map->AddDependentCompilationInfo(DependentCode::kPrototypeCheckGroup,
|
| + info);
|
| + }
|
| + }
|
| +
|
| + bool omit_;
|
| SmallMapList map_set_;
|
| ZoneList<UniqueValueId> map_unique_ids_;
|
| };
|
| @@ -3296,6 +3303,11 @@ class HConstant: public HTemplateInstruction<0> {
|
| return handle_;
|
| }
|
|
|
| + bool InstanceOf(Handle<Map> map) {
|
| + return handle_->IsJSObject() &&
|
| + Handle<JSObject>::cast(handle_)->map() == *map;
|
| + }
|
| +
|
| bool IsSpecialDouble() const {
|
| return has_double_value_ &&
|
| (BitCast<int64_t>(double_value_) == BitCast<int64_t>(-0.0) ||
|
|
|