Revision: 16055
Author: [email protected]
Date: Mon Aug 5 06:45:16 2013
Log: Replace HCheckPrototypeMaps by explicit map checks of constant
values.
[email protected]
Review URL: https://chromiumcodereview.appspot.com/21065006
http://code.google.com/p/v8/source/detail?r=16055
Modified:
/branches/bleeding_edge/src/arm/lithium-arm.cc
/branches/bleeding_edge/src/arm/lithium-arm.h
/branches/bleeding_edge/src/arm/lithium-codegen-arm.cc
/branches/bleeding_edge/src/ast.h
/branches/bleeding_edge/src/flag-definitions.h
/branches/bleeding_edge/src/hydrogen-instructions.cc
/branches/bleeding_edge/src/hydrogen-instructions.h
/branches/bleeding_edge/src/hydrogen.cc
/branches/bleeding_edge/src/hydrogen.h
/branches/bleeding_edge/src/ia32/lithium-codegen-ia32.cc
/branches/bleeding_edge/src/ia32/lithium-ia32.cc
/branches/bleeding_edge/src/ia32/lithium-ia32.h
/branches/bleeding_edge/src/mark-compact.cc
/branches/bleeding_edge/src/mark-compact.h
/branches/bleeding_edge/src/objects-debug.cc
/branches/bleeding_edge/src/objects-inl.h
/branches/bleeding_edge/src/objects.h
/branches/bleeding_edge/src/x64/lithium-codegen-x64.cc
/branches/bleeding_edge/src/x64/lithium-x64.cc
/branches/bleeding_edge/src/x64/lithium-x64.h
=======================================
--- /branches/bleeding_edge/src/arm/lithium-arm.cc Fri Aug 2 04:24:55 2013
+++ /branches/bleeding_edge/src/arm/lithium-arm.cc Mon Aug 5 06:45:16 2013
@@ -2003,19 +2003,6 @@
LInstruction* result = new(zone()) LCheckInstanceType(value);
return AssignEnvironment(result);
}
-
-
-LInstruction* LChunkBuilder::DoCheckPrototypeMaps(HCheckPrototypeMaps*
instr) {
- LUnallocated* temp1 = NULL;
- LOperand* temp2 = NULL;
- if (!instr->CanOmitPrototypeChecks()) {
- temp1 = TempRegister();
- temp2 = TempRegister();
- }
- LCheckPrototypeMaps* result = new(zone()) LCheckPrototypeMaps(temp1,
temp2);
- if (instr->CanOmitPrototypeChecks()) return result;
- return AssignEnvironment(result);
-}
LInstruction* LChunkBuilder::DoCheckFunction(HCheckFunction* instr) {
=======================================
--- /branches/bleeding_edge/src/arm/lithium-arm.h Fri Aug 2 04:24:55 2013
+++ /branches/bleeding_edge/src/arm/lithium-arm.h Mon Aug 5 06:45:16 2013
@@ -68,7 +68,6 @@
V(CheckNonSmi) \
V(CheckMaps) \
V(CheckMapValue) \
- V(CheckPrototypeMaps) \
V(CheckSmi) \
V(ClampDToUint8) \
V(ClampIToUint8) \
@@ -2352,26 +2351,6 @@
};
-class LCheckPrototypeMaps: public LTemplateInstruction<0, 0, 2> {
- public:
- LCheckPrototypeMaps(LOperand* temp, LOperand* temp2) {
- temps_[0] = temp;
- temps_[1] = temp2;
- }
-
- LOperand* temp() { return temps_[0]; }
- LOperand* temp2() { return temps_[1]; }
-
- DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps, "check-prototype-maps")
- DECLARE_HYDROGEN_ACCESSOR(CheckPrototypeMaps)
-
- ZoneList<Handle<JSObject> >* prototypes() const {
- return hydrogen()->prototypes();
- }
- ZoneList<Handle<Map> >* maps() const { return hydrogen()->maps(); }
-};
-
-
class LCheckSmi: public LTemplateInstruction<1, 1, 0> {
public:
explicit LCheckSmi(LOperand* value) {
=======================================
--- /branches/bleeding_edge/src/arm/lithium-codegen-arm.cc Fri Aug 2
02:53:11 2013
+++ /branches/bleeding_edge/src/arm/lithium-codegen-arm.cc Mon Aug 5
06:45:16 2013
@@ -5293,25 +5293,6 @@
__ bind(&done);
}
-
-
-void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) {
- if (instr->hydrogen()->CanOmitPrototypeChecks()) return;
-
- Register prototype_reg = ToRegister(instr->temp());
- Register map_reg = ToRegister(instr->temp2());
-
- ZoneList<Handle<JSObject> >* prototypes = instr->prototypes();
- ZoneList<Handle<Map> >* maps = instr->maps();
-
- ASSERT(prototypes->length() == maps->length());
-
- for (int i = 0; i < prototypes->length(); i++) {
- __ LoadHeapObject(prototype_reg, prototypes->at(i));
- __ ldr(map_reg, FieldMemOperand(prototype_reg,
HeapObject::kMapOffset));
- DoCheckMapCommon(map_reg, maps->at(i), instr->environment());
- }
-}
void LCodeGen::DoAllocate(LAllocate* instr) {
=======================================
--- /branches/bleeding_edge/src/ast.h Fri Jul 19 12:55:09 2013
+++ /branches/bleeding_edge/src/ast.h Mon Aug 5 06:45:16 2013
@@ -291,7 +291,6 @@
}
void Add(Handle<Map> handle, Zone* zone) {
- ASSERT(!handle->is_deprecated());
list_.Add(handle.location(), zone);
}
=======================================
--- /branches/bleeding_edge/src/flag-definitions.h Fri Aug 2 04:17:26 2013
+++ /branches/bleeding_edge/src/flag-definitions.h Mon Aug 5 06:45:16 2013
@@ -310,9 +310,6 @@
"the length of the parallel compilation queue")
DEFINE_int(parallel_recompilation_delay, 0,
"artificial compilation delay in ms")
-DEFINE_bool(omit_prototype_checks_for_leaf_maps, true,
- "do not emit prototype checks if all prototypes have leaf
maps, "
- "deoptimize the optimized code if the layout of the maps
changes.")
DEFINE_bool(omit_map_checks_for_leaf_maps, true,
"do not emit check maps for constant values that have a leaf
map, "
"deoptimize the optimized code if the layout of the maps
changes.")
=======================================
--- /branches/bleeding_edge/src/hydrogen-instructions.cc Fri Aug 2
04:24:55 2013
+++ /branches/bleeding_edge/src/hydrogen-instructions.cc Mon Aug 5
06:45:16 2013
@@ -1441,13 +1441,6 @@
stream->Add("%s ", GetCheckName());
HUnaryOperation::PrintDataTo(stream);
}
-
-
-void HCheckPrototypeMaps::PrintDataTo(StringStream* stream) {
- stream->Add("[receiver_prototype=%p,holder=%p]%s",
- *prototypes_.first(), *prototypes_.last(),
- CanOmitPrototypeChecks() ? " (omitted)" : "");
-}
void HCallStub::PrintDataTo(StringStream* stream) {
@@ -2401,6 +2394,14 @@
external_reference_value_(reference) {
Initialize(Representation::External());
}
+
+
+static void PrepareConstant(Handle<Object> object) {
+ if (!object->IsJSObject()) return;
+ Handle<JSObject> js_object = Handle<JSObject>::cast(object);
+ if (!js_object->map()->is_deprecated()) return;
+ JSObject::TryMigrateInstance(js_object);
+}
void HConstant::Initialize(Representation r) {
@@ -2414,6 +2415,7 @@
} else if (has_external_reference_value_) {
r = Representation::External();
} else {
+ PrepareConstant(handle_);
r = Representation::Tagged();
}
}
=======================================
--- /branches/bleeding_edge/src/hydrogen-instructions.h Mon Aug 5 02:35:18
2013
+++ /branches/bleeding_edge/src/hydrogen-instructions.h Mon Aug 5 06:45:16
2013
@@ -93,7 +93,6 @@
V(CheckInstanceType) \
V(CheckMaps) \
V(CheckMapValue) \
- V(CheckPrototypeMaps) \
V(CheckSmi) \
V(ClampToUint8) \
V(ClassOfTestAndBranch) \
@@ -2813,87 +2812,6 @@
};
-class HCheckPrototypeMaps: public HTemplateInstruction<0> {
- public:
- static HCheckPrototypeMaps* New(Zone* zone,
- HValue* context,
- Handle<JSObject> prototype,
- Handle<JSObject> holder,
- CompilationInfo* info) {
- return new(zone) HCheckPrototypeMaps(prototype, holder, zone, info);
- }
-
- ZoneList<Handle<JSObject> >* prototypes() { return &prototypes_; }
-
- ZoneList<Handle<Map> >* maps() { return &maps_; }
-
- DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps)
-
- virtual Representation RequiredInputRepresentation(int index) {
- return Representation::None();
- }
-
- virtual void PrintDataTo(StringStream* stream);
-
- virtual intptr_t Hashcode() {
- return first_prototype_unique_id_.Hashcode() * 17 +
- last_prototype_unique_id_.Hashcode();
- }
-
- virtual void FinalizeUniqueValueId() {
- first_prototype_unique_id_ = UniqueValueId(prototypes_.first());
- last_prototype_unique_id_ = UniqueValueId(prototypes_.last());
- }
-
- bool CanOmitPrototypeChecks() { return can_omit_prototype_maps_; }
-
- protected:
- virtual bool DataEquals(HValue* other) {
- HCheckPrototypeMaps* b = HCheckPrototypeMaps::cast(other);
- return first_prototype_unique_id_ == b->first_prototype_unique_id_ &&
- last_prototype_unique_id_ == b->last_prototype_unique_id_;
- }
-
- private:
- HCheckPrototypeMaps(Handle<JSObject> prototype,
- Handle<JSObject> holder,
- Zone* zone,
- CompilationInfo* info)
- : prototypes_(2, zone),
- maps_(2, zone),
- first_prototype_unique_id_(),
- last_prototype_unique_id_(),
- can_omit_prototype_maps_(true) {
- SetFlag(kUseGVN);
- SetGVNFlag(kDependsOnMaps);
- // Keep a list of all objects on the prototype chain up to the holder
- // and the expected maps.
- while (true) {
- prototypes_.Add(prototype, zone);
- Handle<Map> map(prototype->map());
- maps_.Add(map, zone);
- can_omit_prototype_maps_ &= map->CanOmitPrototypeChecks();
- if (prototype.is_identical_to(holder)) break;
- prototype =
Handle<JSObject>(JSObject::cast(prototype->GetPrototype()));
- }
- if (can_omit_prototype_maps_) {
- // Mark in-flight compilation as dependent on those maps.
- for (int i = 0; i < maps()->length(); i++) {
- Handle<Map> map = maps()->at(i);
-
map->AddDependentCompilationInfo(DependentCode::kPrototypeCheckGroup,
- info);
- }
- }
- }
-
- ZoneList<Handle<JSObject> > prototypes_;
- ZoneList<Handle<Map> > maps_;
- UniqueValueId first_prototype_unique_id_;
- UniqueValueId last_prototype_unique_id_;
- bool can_omit_prototype_maps_;
-};
-
-
class InductionVariableData;
=======================================
--- /branches/bleeding_edge/src/hydrogen.cc Mon Aug 5 01:59:55 2013
+++ /branches/bleeding_edge/src/hydrogen.cc Mon Aug 5 06:45:16 2013
@@ -4047,8 +4047,7 @@
int* data_size,
int* pointer_size) {
if (boilerplate->map()->is_deprecated()) {
- Handle<Object> result =
- JSObject::TryMigrateInstance(boilerplate);
+ Handle<Object> result = JSObject::TryMigrateInstance(boilerplate);
if (result->IsSmi()) return false;
}
@@ -4448,9 +4447,9 @@
ASSERT(proto->GetPrototype(isolate())->IsNull());
}
ASSERT(proto->IsJSObject());
- Add<HCheckPrototypeMaps>(
+ BuildCheckPrototypeMaps(
Handle<JSObject>(JSObject::cast(map->prototype())),
- Handle<JSObject>(JSObject::cast(proto)), top_info());
+ Handle<JSObject>(JSObject::cast(proto)));
}
HObjectAccess field_access = HObjectAccess::ForField(map, lookup, name);
@@ -4605,8 +4604,7 @@
Handle<JSObject> holder(lookup.holder());
Handle<Map> holder_map(holder->map());
- Add<HCheckPrototypeMaps>(
- Handle<JSObject>::cast(prototype), holder, top_info());
+ BuildCheckPrototypeMaps(Handle<JSObject>::cast(prototype), holder);
HValue* holder_value = Add<HConstant>(holder);
return BuildLoadNamedField(holder_value,
HObjectAccess::ForField(holder_map, &lookup, name));
@@ -5340,7 +5338,7 @@
Handle<JSObject> holder(lookup.holder());
Handle<Map> holder_map(holder->map());
AddCheckMap(object, map);
- Add<HCheckPrototypeMaps>(prototype, holder, top_info());
+ BuildCheckPrototypeMaps(prototype, holder);
HValue* holder_value = Add<HConstant>(holder);
return BuildLoadNamedField(holder_value,
HObjectAccess::ForField(holder_map, &lookup, name));
@@ -5352,7 +5350,7 @@
Handle<JSObject> holder(lookup.holder());
Handle<Map> holder_map(holder->map());
AddCheckMap(object, map);
- Add<HCheckPrototypeMaps>(prototype, holder, top_info());
+ BuildCheckPrototypeMaps(prototype, holder);
Handle<Object> constant(lookup.GetConstantFromMap(*holder_map),
isolate());
return New<HConstant>(constant);
}
@@ -5388,7 +5386,7 @@
isolate()->IsFastArrayConstructorPrototypeChainIntact()) {
Handle<JSObject> prototype(JSObject::cast(map->prototype()),
isolate());
Handle<JSObject> object_prototype =
isolate()->initial_object_prototype();
- Add<HCheckPrototypeMaps>(prototype, object_prototype, top_info());
+ BuildCheckPrototypeMaps(prototype, object_prototype);
load_mode = ALLOW_RETURN_HOLE;
graph()->MarkDependsOnEmptyArrayProtoElements();
}
@@ -5832,13 +5830,40 @@
instr->set_position(expr->position());
return ast_context()->ReturnInstruction(instr, expr->id());
}
+
+
+void HGraphBuilder::BuildConstantMapCheck(Handle<JSObject> constant,
+ CompilationInfo* info) {
+ HConstant* constant_value = New<HConstant>(constant);
+
+ if (constant->map()->CanOmitMapChecks()) {
+ constant->map()->AddDependentCompilationInfo(
+ DependentCode::kPrototypeCheckGroup, info);
+ return;
+ }
+
+ AddInstruction(constant_value);
+ HCheckMaps* check =
+ Add<HCheckMaps>(constant_value, handle(constant->map()), info);
+ check->ClearGVNFlag(kDependsOnElementsKind);
+}
+
+
+void HGraphBuilder::BuildCheckPrototypeMaps(Handle<JSObject> prototype,
+ Handle<JSObject> holder) {
+ BuildConstantMapCheck(prototype, top_info());
+ while (!prototype.is_identical_to(holder)) {
+ prototype = handle(JSObject::cast(prototype->GetPrototype()));
+ BuildConstantMapCheck(prototype, top_info());
+ }
+}
void HOptimizedGraphBuilder::AddCheckPrototypeMaps(Handle<JSObject> holder,
Handle<Map>
receiver_map) {
if (!holder.is_null()) {
Handle<JSObject> prototype(JSObject::cast(receiver_map->prototype()));
- Add<HCheckPrototypeMaps>(prototype, holder, top_info());
+ BuildCheckPrototypeMaps(prototype, holder);
}
}
@@ -6579,9 +6604,9 @@
HValue* string = Pop();
HValue* context = environment()->context();
ASSERT(!expr->holder().is_null());
- Add<HCheckPrototypeMaps>(Call::GetPrototypeForPrimitiveCheck(
+ BuildCheckPrototypeMaps(Call::GetPrototypeForPrimitiveCheck(
STRING_CHECK, expr->holder()->GetIsolate()),
- expr->holder(), top_info());
+ expr->holder());
HInstruction* char_code =
BuildStringCharCodeAt(string, index);
if (id == kStringCharCodeAt) {
=======================================
--- /branches/bleeding_edge/src/hydrogen.h Sun Aug 4 23:34:26 2013
+++ /branches/bleeding_edge/src/hydrogen.h Mon Aug 5 06:45:16 2013
@@ -1563,6 +1563,10 @@
int previous_object_size,
HValue* payload);
+ void BuildConstantMapCheck(Handle<JSObject> constant, CompilationInfo*
info);
+ void BuildCheckPrototypeMaps(Handle<JSObject> prototype,
+ Handle<JSObject> holder);
+
HInstruction* BuildGetNativeContext();
HInstruction* BuildGetArrayFunction();
=======================================
--- /branches/bleeding_edge/src/ia32/lithium-codegen-ia32.cc Fri Aug 2
02:53:11 2013
+++ /branches/bleeding_edge/src/ia32/lithium-codegen-ia32.cc Mon Aug 5
06:45:16 2013
@@ -5992,22 +5992,6 @@
__ ClampUint8(result_reg);
__ bind(&done);
}
-
-
-void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) {
- if (instr->hydrogen()->CanOmitPrototypeChecks()) return;
- Register reg = ToRegister(instr->temp());
-
- ZoneList<Handle<JSObject> >* prototypes = instr->prototypes();
- ZoneList<Handle<Map> >* maps = instr->maps();
-
- ASSERT(prototypes->length() == maps->length());
-
- for (int i = 0; i < prototypes->length(); i++) {
- __ LoadHeapObject(reg, prototypes->at(i));
- DoCheckMapCommon(reg, maps->at(i), instr);
- }
-}
void LCodeGen::DoAllocate(LAllocate* instr) {
=======================================
--- /branches/bleeding_edge/src/ia32/lithium-ia32.cc Fri Aug 2 04:24:55
2013
+++ /branches/bleeding_edge/src/ia32/lithium-ia32.cc Mon Aug 5 06:45:16
2013
@@ -2036,15 +2036,6 @@
LCheckInstanceType* result = new(zone()) LCheckInstanceType(value, temp);
return AssignEnvironment(result);
}
-
-
-LInstruction* LChunkBuilder::DoCheckPrototypeMaps(HCheckPrototypeMaps*
instr) {
- LUnallocated* temp = NULL;
- if (!instr->CanOmitPrototypeChecks()) temp = TempRegister();
- LCheckPrototypeMaps* result = new(zone()) LCheckPrototypeMaps(temp);
- if (instr->CanOmitPrototypeChecks()) return result;
- return AssignEnvironment(result);
-}
LInstruction* LChunkBuilder::DoCheckFunction(HCheckFunction* instr) {
=======================================
--- /branches/bleeding_edge/src/ia32/lithium-ia32.h Fri Aug 2 04:24:55 2013
+++ /branches/bleeding_edge/src/ia32/lithium-ia32.h Mon Aug 5 06:45:16 2013
@@ -68,7 +68,6 @@
V(CheckMaps) \
V(CheckMapValue) \
V(CheckNonSmi) \
- V(CheckPrototypeMaps) \
V(CheckSmi) \
V(ClampDToUint8) \
V(ClampIToUint8) \
@@ -2451,24 +2450,6 @@
};
-class LCheckPrototypeMaps: public LTemplateInstruction<0, 0, 1> {
- public:
- explicit LCheckPrototypeMaps(LOperand* temp) {
- temps_[0] = temp;
- }
-
- LOperand* temp() { return temps_[0]; }
-
- DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps, "check-prototype-maps")
- DECLARE_HYDROGEN_ACCESSOR(CheckPrototypeMaps)
-
- ZoneList<Handle<JSObject> >* prototypes() const {
- return hydrogen()->prototypes();
- }
- ZoneList<Handle<Map> >* maps() const { return hydrogen()->maps(); }
-};
-
-
class LCheckSmi: public LTemplateInstruction<1, 1, 0> {
public:
explicit LCheckSmi(LOperand* value) {
=======================================
--- /branches/bleeding_edge/src/mark-compact.cc Wed Jul 31 00:17:03 2013
+++ /branches/bleeding_edge/src/mark-compact.cc Mon Aug 5 06:45:16 2013
@@ -431,8 +431,8 @@
heap()->weak_embedded_maps_verification_enabled()) {
VerifyWeakEmbeddedMapsInOptimizedCode();
}
- if (FLAG_collect_maps && FLAG_omit_prototype_checks_for_leaf_maps) {
- VerifyOmittedPrototypeChecks();
+ if (FLAG_collect_maps && FLAG_omit_map_checks_for_leaf_maps) {
+ VerifyOmittedMapChecks();
}
#endif
@@ -503,13 +503,13 @@
}
-void MarkCompactCollector::VerifyOmittedPrototypeChecks() {
+void MarkCompactCollector::VerifyOmittedMapChecks() {
HeapObjectIterator iterator(heap()->map_space());
for (HeapObject* obj = iterator.Next();
obj != NULL;
obj = iterator.Next()) {
Map* map = Map::cast(obj);
- map->VerifyOmittedPrototypeChecks();
+ map->VerifyOmittedMapChecks();
}
}
#endif // VERIFY_HEAP
=======================================
--- /branches/bleeding_edge/src/mark-compact.h Wed Jul 31 00:17:03 2013
+++ /branches/bleeding_edge/src/mark-compact.h Mon Aug 5 06:45:16 2013
@@ -638,7 +638,7 @@
static void VerifyMarkbitsAreClean(PagedSpace* space);
static void VerifyMarkbitsAreClean(NewSpace* space);
void VerifyWeakEmbeddedMapsInOptimizedCode();
- void VerifyOmittedPrototypeChecks();
+ void VerifyOmittedMapChecks();
#endif
// Sweep a single page from the given space conservatively.
=======================================
--- /branches/bleeding_edge/src/objects-debug.cc Wed Jul 31 10:08:50 2013
+++ /branches/bleeding_edge/src/objects-debug.cc Mon Aug 5 06:45:16 2013
@@ -366,9 +366,12 @@
}
-void Map::VerifyOmittedPrototypeChecks() {
- if (!FLAG_omit_prototype_checks_for_leaf_maps) return;
- if (HasTransitionArray() || is_dictionary_map()) {
+void Map::VerifyOmittedMapChecks() {
+ if (!FLAG_omit_map_checks_for_leaf_maps) return;
+ if (!is_stable() ||
+ is_deprecated() ||
+ HasTransitionArray() ||
+ is_dictionary_map()) {
CHECK_EQ(0, dependent_code()->number_of_entries(
DependentCode::kPrototypeCheckGroup));
}
=======================================
--- /branches/bleeding_edge/src/objects-inl.h Wed Jul 31 10:08:50 2013
+++ /branches/bleeding_edge/src/objects-inl.h Mon Aug 5 06:45:16 2013
@@ -3675,11 +3675,6 @@
DependentCode::kPrototypeCheckGroup);
}
}
-
-
-bool Map::CanOmitPrototypeChecks() {
- return is_stable() && FLAG_omit_prototype_checks_for_leaf_maps;
-}
bool Map::CanOmitMapChecks() {
=======================================
--- /branches/bleeding_edge/src/objects.h Mon Aug 5 02:46:23 2013
+++ /branches/bleeding_edge/src/objects.h Mon Aug 5 06:45:16 2013
@@ -5921,7 +5921,6 @@
// the descriptor array.
inline void NotifyLeafMapLayoutChange();
- inline bool CanOmitPrototypeChecks();
inline bool CanOmitMapChecks();
void AddDependentCompilationInfo(DependentCode::DependencyGroup group,
@@ -5938,7 +5937,7 @@
#ifdef VERIFY_HEAP
void SharedMapVerify();
- void VerifyOmittedPrototypeChecks();
+ void VerifyOmittedMapChecks();
#endif
inline int visitor_id();
=======================================
--- /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc Fri Aug 2
06:42:02 2013
+++ /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc Mon Aug 5
06:45:16 2013
@@ -5050,22 +5050,6 @@
__ bind(&done);
}
-
-
-void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) {
- if (instr->hydrogen()->CanOmitPrototypeChecks()) return;
- Register reg = ToRegister(instr->temp());
-
- ZoneList<Handle<JSObject> >* prototypes = instr->prototypes();
- ZoneList<Handle<Map> >* maps = instr->maps();
-
- ASSERT(prototypes->length() == maps->length());
-
- for (int i = 0; i < prototypes->length(); i++) {
- __ LoadHeapObject(reg, prototypes->at(i));
- DoCheckMapCommon(reg, maps->at(i), instr);
- }
-}
void LCodeGen::DoAllocate(LAllocate* instr) {
=======================================
--- /branches/bleeding_edge/src/x64/lithium-x64.cc Fri Aug 2 04:24:55 2013
+++ /branches/bleeding_edge/src/x64/lithium-x64.cc Mon Aug 5 06:45:16 2013
@@ -1907,15 +1907,6 @@
LCheckInstanceType* result = new(zone()) LCheckInstanceType(value);
return AssignEnvironment(result);
}
-
-
-LInstruction* LChunkBuilder::DoCheckPrototypeMaps(HCheckPrototypeMaps*
instr) {
- LUnallocated* temp = NULL;
- if (!instr->CanOmitPrototypeChecks()) temp = TempRegister();
- LCheckPrototypeMaps* result = new(zone()) LCheckPrototypeMaps(temp);
- if (instr->CanOmitPrototypeChecks()) return result;
- return AssignEnvironment(result);
-}
LInstruction* LChunkBuilder::DoCheckFunction(HCheckFunction* instr) {
=======================================
--- /branches/bleeding_edge/src/x64/lithium-x64.h Fri Aug 2 04:24:55 2013
+++ /branches/bleeding_edge/src/x64/lithium-x64.h Mon Aug 5 06:45:16 2013
@@ -68,7 +68,6 @@
V(CheckMaps) \
V(CheckMapValue) \
V(CheckNonSmi) \
- V(CheckPrototypeMaps) \
V(CheckSmi) \
V(ClampDToUint8) \
V(ClampIToUint8) \
@@ -2262,24 +2261,6 @@
};
-class LCheckPrototypeMaps: public LTemplateInstruction<0, 0, 1> {
- public:
- explicit LCheckPrototypeMaps(LOperand* temp) {
- temps_[0] = temp;
- }
-
- LOperand* temp() { return temps_[0]; }
-
- DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps, "check-prototype-maps")
- DECLARE_HYDROGEN_ACCESSOR(CheckPrototypeMaps)
-
- ZoneList<Handle<JSObject> >* prototypes() const {
- return hydrogen()->prototypes();
- }
- ZoneList<Handle<Map> >* maps() const { return hydrogen()->maps(); }
-};
-
-
class LCheckSmi: public LTemplateInstruction<1, 1, 0> {
public:
explicit LCheckSmi(LOperand* value) {
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.