| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 1227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1238 HInstruction* HGraphBuilder::BuildFastArrayLengthLoad(HValue* object, | 1238 HInstruction* HGraphBuilder::BuildFastArrayLengthLoad(HValue* object, |
| 1239 HValue* typecheck) { | 1239 HValue* typecheck) { |
| 1240 Zone* zone = this->zone(); | 1240 Zone* zone = this->zone(); |
| 1241 return new (zone) HJSArrayLength(object, typecheck, HType::Smi()); | 1241 return new (zone) HJSArrayLength(object, typecheck, HType::Smi()); |
| 1242 } | 1242 } |
| 1243 | 1243 |
| 1244 | 1244 |
| 1245 HValue* HGraphBuilder::BuildAllocateElements(HValue* context, | 1245 HValue* HGraphBuilder::BuildAllocateElements(HValue* context, |
| 1246 ElementsKind kind, | 1246 ElementsKind kind, |
| 1247 HValue* capacity) { | 1247 HValue* capacity) { |
| 1248 BailoutId ast_id = current_block()->last_environment()->previous_ast_id(); | |
| 1249 Zone* zone = this->zone(); | 1248 Zone* zone = this->zone(); |
| 1250 | 1249 |
| 1251 int elements_size = IsFastDoubleElementsKind(kind) | 1250 int elements_size = IsFastDoubleElementsKind(kind) |
| 1252 ? kDoubleSize : kPointerSize; | 1251 ? kDoubleSize : kPointerSize; |
| 1253 HConstant* elements_size_value = | 1252 HConstant* elements_size_value = |
| 1254 new(zone) HConstant(elements_size, Representation::Integer32()); | 1253 new(zone) HConstant(elements_size, Representation::Integer32()); |
| 1255 AddInstruction(elements_size_value); | 1254 AddInstruction(elements_size_value); |
| 1256 HValue* mul = AddInstruction( | 1255 HValue* mul = AddInstruction( |
| 1257 HMul::New(zone, context, capacity, elements_size_value)); | 1256 HMul::New(zone, context, capacity, elements_size_value)); |
| 1258 mul->ChangeRepresentation(Representation::Integer32()); | 1257 mul->ChangeRepresentation(Representation::Integer32()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1273 flags | HAllocate::CAN_ALLOCATE_IN_OLD_POINTER_SPACE); | 1272 flags | HAllocate::CAN_ALLOCATE_IN_OLD_POINTER_SPACE); |
| 1274 } | 1273 } |
| 1275 if (IsFastDoubleElementsKind(kind)) { | 1274 if (IsFastDoubleElementsKind(kind)) { |
| 1276 flags = static_cast<HAllocate::Flags>( | 1275 flags = static_cast<HAllocate::Flags>( |
| 1277 flags | HAllocate::ALLOCATE_DOUBLE_ALIGNED); | 1276 flags | HAllocate::ALLOCATE_DOUBLE_ALIGNED); |
| 1278 } | 1277 } |
| 1279 | 1278 |
| 1280 HValue* elements = | 1279 HValue* elements = |
| 1281 AddInstruction(new(zone) HAllocate(context, total_size, | 1280 AddInstruction(new(zone) HAllocate(context, total_size, |
| 1282 HType::JSArray(), flags)); | 1281 HType::JSArray(), flags)); |
| 1282 return elements; |
| 1283 } |
| 1283 | 1284 |
| 1285 |
| 1286 void HGraphBuilder::BuildInitializeElements(HValue* elements, |
| 1287 ElementsKind kind, |
| 1288 HValue* capacity) { |
| 1289 Zone* zone = this->zone(); |
| 1290 BailoutId ast_id = current_block()->last_environment()->previous_ast_id(); |
| 1284 Factory* factory = isolate()->factory(); | 1291 Factory* factory = isolate()->factory(); |
| 1285 Handle<Map> map = IsFastDoubleElementsKind(kind) | 1292 Handle<Map> map = IsFastDoubleElementsKind(kind) |
| 1286 ? factory->fixed_double_array_map() | 1293 ? factory->fixed_double_array_map() |
| 1287 : factory->fixed_array_map(); | 1294 : factory->fixed_array_map(); |
| 1288 BuildStoreMap(elements, map, ast_id); | 1295 BuildStoreMap(elements, map, ast_id); |
| 1289 | 1296 |
| 1290 Handle<String> fixed_array_length_field_name = factory->length_field_string(); | 1297 Handle<String> fixed_array_length_field_name = factory->length_field_string(); |
| 1291 HInstruction* store_length = | 1298 HInstruction* store_length = |
| 1292 new(zone) HStoreNamedField(elements, fixed_array_length_field_name, | 1299 new(zone) HStoreNamedField(elements, fixed_array_length_field_name, |
| 1293 capacity, true, FixedArray::kLengthOffset); | 1300 capacity, true, FixedArray::kLengthOffset); |
| 1294 AddInstruction(store_length); | 1301 AddInstruction(store_length); |
| 1295 AddSimulate(ast_id, REMOVABLE_SIMULATE); | 1302 AddSimulate(ast_id, REMOVABLE_SIMULATE); |
| 1296 | |
| 1297 return elements; | |
| 1298 } | 1303 } |
| 1299 | 1304 |
| 1300 | 1305 |
| 1306 HValue* HGraphBuilder::BuildAllocateAndInitializeElements(HValue* context, |
| 1307 ElementsKind kind, |
| 1308 HValue* capacity) { |
| 1309 HValue* new_elements = |
| 1310 BuildAllocateElements(context, kind, capacity); |
| 1311 BuildInitializeElements(new_elements, kind, capacity); |
| 1312 return new_elements; |
| 1313 } |
| 1314 |
| 1315 |
| 1301 HInstruction* HGraphBuilder::BuildStoreMap(HValue* object, | 1316 HInstruction* HGraphBuilder::BuildStoreMap(HValue* object, |
| 1302 HValue* map, | 1317 HValue* map, |
| 1303 BailoutId id) { | 1318 BailoutId id) { |
| 1304 Zone* zone = this->zone(); | 1319 Zone* zone = this->zone(); |
| 1305 Factory* factory = isolate()->factory(); | 1320 Factory* factory = isolate()->factory(); |
| 1306 Handle<String> map_field_name = factory->map_field_string(); | 1321 Handle<String> map_field_name = factory->map_field_string(); |
| 1307 HInstruction* store_map = | 1322 HInstruction* store_map = |
| 1308 new(zone) HStoreNamedField(object, map_field_name, map, | 1323 new(zone) HStoreNamedField(object, map_field_name, map, |
| 1309 true, JSObject::kMapOffset); | 1324 true, JSObject::kMapOffset); |
| 1310 store_map->SetGVNFlag(kChangesMaps); | 1325 store_map->SetGVNFlag(kChangesMaps); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1372 HValue* elements, | 1387 HValue* elements, |
| 1373 ElementsKind kind, | 1388 ElementsKind kind, |
| 1374 HValue* length, | 1389 HValue* length, |
| 1375 HValue* new_capacity) { | 1390 HValue* new_capacity) { |
| 1376 Zone* zone = this->zone(); | 1391 Zone* zone = this->zone(); |
| 1377 HValue* context = environment()->LookupContext(); | 1392 HValue* context = environment()->LookupContext(); |
| 1378 | 1393 |
| 1379 BuildNewSpaceArrayCheck(new_capacity, kind); | 1394 BuildNewSpaceArrayCheck(new_capacity, kind); |
| 1380 | 1395 |
| 1381 HValue* new_elements = | 1396 HValue* new_elements = |
| 1382 BuildAllocateElements(context, kind, new_capacity); | 1397 BuildAllocateAndInitializeElements(context, kind, new_capacity); |
| 1383 | 1398 |
| 1384 BuildCopyElements(context, elements, kind, | 1399 BuildCopyElements(context, elements, kind, |
| 1385 new_elements, kind, | 1400 new_elements, kind, |
| 1386 length, new_capacity); | 1401 length, new_capacity); |
| 1387 | 1402 |
| 1388 Factory* factory = isolate()->factory(); | 1403 Factory* factory = isolate()->factory(); |
| 1389 HInstruction* elements_store = AddInstruction(new(zone) HStoreNamedField( | 1404 HInstruction* elements_store = AddInstruction(new(zone) HStoreNamedField( |
| 1390 object, | 1405 object, |
| 1391 factory->elements_field_string(), | 1406 factory->elements_field_string(), |
| 1392 new_elements, true, | 1407 new_elements, true, |
| (...skipping 9896 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11289 } | 11304 } |
| 11290 } | 11305 } |
| 11291 | 11306 |
| 11292 #ifdef DEBUG | 11307 #ifdef DEBUG |
| 11293 if (graph_ != NULL) graph_->Verify(false); // No full verify. | 11308 if (graph_ != NULL) graph_->Verify(false); // No full verify. |
| 11294 if (allocator_ != NULL) allocator_->Verify(); | 11309 if (allocator_ != NULL) allocator_->Verify(); |
| 11295 #endif | 11310 #endif |
| 11296 } | 11311 } |
| 11297 | 11312 |
| 11298 } } // namespace v8::internal | 11313 } } // namespace v8::internal |
| OLD | NEW |