Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 1138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1149 stream->Add("%u", index()); | 1149 stream->Add("%u", index()); |
| 1150 } | 1150 } |
| 1151 | 1151 |
| 1152 | 1152 |
| 1153 void HLoadNamedField::PrintDataTo(StringStream* stream) { | 1153 void HLoadNamedField::PrintDataTo(StringStream* stream) { |
| 1154 object()->PrintNameTo(stream); | 1154 object()->PrintNameTo(stream); |
| 1155 stream->Add(" @%d%s", offset(), is_in_object() ? "[in-object]" : ""); | 1155 stream->Add(" @%d%s", offset(), is_in_object() ? "[in-object]" : ""); |
| 1156 } | 1156 } |
| 1157 | 1157 |
| 1158 | 1158 |
| 1159 HLoadNamedFieldPolymorphic::HLoadNamedFieldPolymorphic(HValue* object, | |
| 1160 ZoneMapList* types, | |
| 1161 Handle<String> name) | |
| 1162 : HUnaryOperation(object), | |
| 1163 types_(types->length()), | |
|
Kevin Millikin (Chromium)
2011/03/23 15:37:29
You could initialize the list to have capacity Min
fschneider
2011/03/24 08:43:30
Done.
| |
| 1164 name_(name), | |
| 1165 need_generic_(false) { | |
| 1166 set_representation(Representation::Tagged()); | |
| 1167 SetFlag(kDependsOnMaps); | |
| 1168 const int kMaxLoadPolymorphism = 4; | |
| 1169 for (int i = 0; | |
| 1170 i < types->length() && types_.length() < kMaxLoadPolymorphism; | |
| 1171 ++i) { | |
| 1172 Handle<Map> map = types->at(i); | |
| 1173 LookupResult lookup; | |
| 1174 map->LookupInDescriptors(NULL, *name, &lookup); | |
| 1175 if (lookup.IsProperty() && lookup.type() == FIELD) { | |
| 1176 types_.Add(types->at(i)); | |
| 1177 int index = lookup.GetLocalFieldIndexFromMap(*map); | |
| 1178 if (index < 0) { | |
| 1179 SetFlag(kDependsOnInobjectFields); | |
| 1180 } else { | |
| 1181 SetFlag(kDependsOnBackingStoreFields); | |
| 1182 } | |
| 1183 } | |
| 1184 } | |
| 1185 | |
| 1186 if (types_.length() == types->length() && FLAG_deoptimize_uncommon_cases) { | |
| 1187 SetFlag(kUseGVN); | |
| 1188 } else { | |
| 1189 SetAllSideEffects(); | |
| 1190 need_generic_ = true; | |
| 1191 } | |
| 1192 } | |
| 1193 | |
| 1194 | |
| 1195 bool HLoadNamedFieldPolymorphic::DataEquals(HValue* value) { | |
| 1196 HLoadNamedFieldPolymorphic* other = HLoadNamedFieldPolymorphic::cast(value); | |
| 1197 if (types_.length() != other->types()->length()) return false; | |
| 1198 if (!name_.is_identical_to(other->name())) return false; | |
| 1199 if (need_generic_ != other->need_generic_) return false; | |
| 1200 for (int i = 0; i < types_.length(); i++) { | |
| 1201 bool found = false; | |
| 1202 for (int j = 0; j < types_.length(); j++) { | |
| 1203 if (!types_.at(j).is_identical_to(other->types()->at(i))) { | |
|
Kevin Millikin (Chromium)
2011/03/23 15:37:29
Should not be negated.
fschneider
2011/03/24 08:43:30
Of course. Thanks.
| |
| 1204 found = true; | |
| 1205 break; | |
| 1206 } | |
| 1207 } | |
| 1208 if (!found) return false; | |
| 1209 } | |
| 1210 return true; | |
| 1211 } | |
| 1212 | |
| 1213 | |
| 1159 void HLoadKeyedFastElement::PrintDataTo(StringStream* stream) { | 1214 void HLoadKeyedFastElement::PrintDataTo(StringStream* stream) { |
| 1160 object()->PrintNameTo(stream); | 1215 object()->PrintNameTo(stream); |
| 1161 stream->Add("["); | 1216 stream->Add("["); |
| 1162 key()->PrintNameTo(stream); | 1217 key()->PrintNameTo(stream); |
| 1163 stream->Add("]"); | 1218 stream->Add("]"); |
| 1164 } | 1219 } |
| 1165 | 1220 |
| 1166 | 1221 |
| 1167 void HLoadKeyedGeneric::PrintDataTo(StringStream* stream) { | 1222 void HLoadKeyedGeneric::PrintDataTo(StringStream* stream) { |
| 1168 object()->PrintNameTo(stream); | 1223 object()->PrintNameTo(stream); |
| (...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1507 | 1562 |
| 1508 | 1563 |
| 1509 void HCheckPrototypeMaps::Verify() { | 1564 void HCheckPrototypeMaps::Verify() { |
| 1510 HInstruction::Verify(); | 1565 HInstruction::Verify(); |
| 1511 ASSERT(HasNoUses()); | 1566 ASSERT(HasNoUses()); |
| 1512 } | 1567 } |
| 1513 | 1568 |
| 1514 #endif | 1569 #endif |
| 1515 | 1570 |
| 1516 } } // namespace v8::internal | 1571 } } // namespace v8::internal |
| OLD | NEW |