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 491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
502 } | 502 } |
503 | 503 |
504 int visited_count_; | 504 int visited_count_; |
505 ZoneList<HBasicBlock*> stack_; | 505 ZoneList<HBasicBlock*> stack_; |
506 BitVector reachable_; | 506 BitVector reachable_; |
507 HBasicBlock* dont_visit_; | 507 HBasicBlock* dont_visit_; |
508 }; | 508 }; |
509 | 509 |
510 | 510 |
511 void HGraph::Verify(bool do_full_verify) const { | 511 void HGraph::Verify(bool do_full_verify) const { |
512 // Allow dereferencing for debug mode verification. | 512 ALLOW_HANDLE_DEREF(isolate(), "debug mode verification"); |
513 HandleDereferenceGuard allow_handle_deref(isolate(), | |
514 HandleDereferenceGuard::ALLOW); | |
515 for (int i = 0; i < blocks_.length(); i++) { | 513 for (int i = 0; i < blocks_.length(); i++) { |
516 HBasicBlock* block = blocks_.at(i); | 514 HBasicBlock* block = blocks_.at(i); |
517 | 515 |
518 block->Verify(); | 516 block->Verify(); |
519 | 517 |
520 // Check that every block contains at least one node and that only the last | 518 // Check that every block contains at least one node and that only the last |
521 // node is a control instruction. | 519 // node is a control instruction. |
522 HInstruction* current = block->first(); | 520 HInstruction* current = block->first(); |
523 ASSERT(current != NULL && current->IsBlockEntry()); | 521 ASSERT(current != NULL && current->IsBlockEntry()); |
524 while (current != NULL) { | 522 while (current != NULL) { |
(...skipping 5816 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6341 Handle<JSObject> boilerplate_object = | 6339 Handle<JSObject> boilerplate_object = |
6342 DeepCopy(original_boilerplate_object); | 6340 DeepCopy(original_boilerplate_object); |
6343 | 6341 |
6344 literal = BuildFastLiteral(context, | 6342 literal = BuildFastLiteral(context, |
6345 boilerplate_object, | 6343 boilerplate_object, |
6346 original_boilerplate_object, | 6344 original_boilerplate_object, |
6347 data_size, | 6345 data_size, |
6348 pointer_size, | 6346 pointer_size, |
6349 DONT_TRACK_ALLOCATION_SITE); | 6347 DONT_TRACK_ALLOCATION_SITE); |
6350 } else { | 6348 } else { |
| 6349 Handle<FixedArray> closure_literals(closure->literals(), isolate()); |
6351 literal = AddInstruction( | 6350 literal = AddInstruction( |
6352 new(zone()) HObjectLiteral(context, | 6351 new(zone()) HObjectLiteral(context, |
6353 expr->constant_properties(), | 6352 expr->constant_properties(), |
| 6353 closure_literals, |
6354 expr->fast_elements(), | 6354 expr->fast_elements(), |
6355 expr->literal_index(), | 6355 expr->literal_index(), |
6356 expr->depth(), | 6356 expr->depth(), |
6357 expr->has_function())); | 6357 expr->has_function())); |
6358 } | 6358 } |
6359 | 6359 |
6360 // The object is expected in the bailout environment during computation | 6360 // The object is expected in the bailout environment during computation |
6361 // of the property values and is the value of the entire expression. | 6361 // of the property values and is the value of the entire expression. |
6362 Push(literal); | 6362 Push(literal); |
6363 | 6363 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6432 | 6432 |
6433 void HOptimizedGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) { | 6433 void HOptimizedGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) { |
6434 ASSERT(!HasStackOverflow()); | 6434 ASSERT(!HasStackOverflow()); |
6435 ASSERT(current_block() != NULL); | 6435 ASSERT(current_block() != NULL); |
6436 ASSERT(current_block()->HasPredecessor()); | 6436 ASSERT(current_block()->HasPredecessor()); |
6437 ZoneList<Expression*>* subexprs = expr->values(); | 6437 ZoneList<Expression*>* subexprs = expr->values(); |
6438 int length = subexprs->length(); | 6438 int length = subexprs->length(); |
6439 HValue* context = environment()->LookupContext(); | 6439 HValue* context = environment()->LookupContext(); |
6440 HInstruction* literal; | 6440 HInstruction* literal; |
6441 | 6441 |
6442 Handle<FixedArray> literals(environment()->closure()->literals()); | 6442 Handle<FixedArray> literals(environment()->closure()->literals(), isolate()); |
6443 Handle<Object> raw_boilerplate(literals->get(expr->literal_index()), | 6443 Handle<Object> raw_boilerplate(literals->get(expr->literal_index()), |
6444 isolate()); | 6444 isolate()); |
6445 | 6445 |
6446 if (raw_boilerplate->IsUndefined()) { | 6446 if (raw_boilerplate->IsUndefined()) { |
6447 raw_boilerplate = Runtime::CreateArrayLiteralBoilerplate( | 6447 raw_boilerplate = Runtime::CreateArrayLiteralBoilerplate( |
6448 isolate(), literals, expr->constant_elements()); | 6448 isolate(), literals, expr->constant_elements()); |
6449 if (raw_boilerplate.is_null()) { | 6449 if (raw_boilerplate.is_null()) { |
6450 return Bailout("array boilerplate creation failed"); | 6450 return Bailout("array boilerplate creation failed"); |
6451 } | 6451 } |
6452 literals->set(expr->literal_index(), *raw_boilerplate); | 6452 literals->set(expr->literal_index(), *raw_boilerplate); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6484 literal = BuildFastLiteral(context, | 6484 literal = BuildFastLiteral(context, |
6485 boilerplate_object, | 6485 boilerplate_object, |
6486 original_boilerplate_object, | 6486 original_boilerplate_object, |
6487 data_size, | 6487 data_size, |
6488 pointer_size, | 6488 pointer_size, |
6489 mode); | 6489 mode); |
6490 } else { | 6490 } else { |
6491 literal = AddInstruction( | 6491 literal = AddInstruction( |
6492 new(zone()) HArrayLiteral(context, | 6492 new(zone()) HArrayLiteral(context, |
6493 original_boilerplate_object, | 6493 original_boilerplate_object, |
| 6494 literals, |
6494 length, | 6495 length, |
6495 expr->literal_index(), | 6496 expr->literal_index(), |
6496 expr->depth(), | 6497 expr->depth(), |
6497 mode)); | 6498 mode)); |
6498 } | 6499 } |
6499 | 6500 |
6500 // The array is expected in the bailout environment during computation | 6501 // The array is expected in the bailout environment during computation |
6501 // of the property values and is the value of the entire expression. | 6502 // of the property values and is the value of the entire expression. |
6502 Push(literal); | 6503 Push(literal); |
6503 | 6504 |
(...skipping 4945 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11449 CodeStub::Major major_key = info->code_stub()->MajorKey(); | 11450 CodeStub::Major major_key = info->code_stub()->MajorKey(); |
11450 PrintStringProperty("name", CodeStub::MajorName(major_key, false)); | 11451 PrintStringProperty("name", CodeStub::MajorName(major_key, false)); |
11451 PrintStringProperty("method", "stub"); | 11452 PrintStringProperty("method", "stub"); |
11452 } | 11453 } |
11453 PrintLongProperty("date", static_cast<int64_t>(OS::TimeCurrentMillis())); | 11454 PrintLongProperty("date", static_cast<int64_t>(OS::TimeCurrentMillis())); |
11454 } | 11455 } |
11455 | 11456 |
11456 | 11457 |
11457 void HTracer::TraceLithium(const char* name, LChunk* chunk) { | 11458 void HTracer::TraceLithium(const char* name, LChunk* chunk) { |
11458 ASSERT(!FLAG_parallel_recompilation); | 11459 ASSERT(!FLAG_parallel_recompilation); |
11459 HandleDereferenceGuard allow_handle_deref(chunk->isolate(), | 11460 ALLOW_HANDLE_DEREF(chunk->isolate(), "debug output"); |
11460 HandleDereferenceGuard::ALLOW); | |
11461 Trace(name, chunk->graph(), chunk); | 11461 Trace(name, chunk->graph(), chunk); |
11462 } | 11462 } |
11463 | 11463 |
11464 | 11464 |
11465 void HTracer::TraceHydrogen(const char* name, HGraph* graph) { | 11465 void HTracer::TraceHydrogen(const char* name, HGraph* graph) { |
11466 ASSERT(!FLAG_parallel_recompilation); | 11466 ASSERT(!FLAG_parallel_recompilation); |
11467 HandleDereferenceGuard allow_handle_deref(graph->isolate(), | 11467 ALLOW_HANDLE_DEREF(graph->isolate(), "debug output"); |
11468 HandleDereferenceGuard::ALLOW); | |
11469 Trace(name, graph, NULL); | 11468 Trace(name, graph, NULL); |
11470 } | 11469 } |
11471 | 11470 |
11472 | 11471 |
11473 void HTracer::Trace(const char* name, HGraph* graph, LChunk* chunk) { | 11472 void HTracer::Trace(const char* name, HGraph* graph, LChunk* chunk) { |
11474 Tag tag(this, "cfg"); | 11473 Tag tag(this, "cfg"); |
11475 PrintStringProperty("name", name); | 11474 PrintStringProperty("name", name); |
11476 const ZoneList<HBasicBlock*>* blocks = graph->blocks(); | 11475 const ZoneList<HBasicBlock*>* blocks = graph->blocks(); |
11477 for (int i = 0; i < blocks->length(); i++) { | 11476 for (int i = 0; i < blocks->length(); i++) { |
11478 HBasicBlock* current = blocks->at(i); | 11477 HBasicBlock* current = blocks->at(i); |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11809 } | 11808 } |
11810 } | 11809 } |
11811 | 11810 |
11812 #ifdef DEBUG | 11811 #ifdef DEBUG |
11813 if (graph_ != NULL) graph_->Verify(false); // No full verify. | 11812 if (graph_ != NULL) graph_->Verify(false); // No full verify. |
11814 if (allocator_ != NULL) allocator_->Verify(); | 11813 if (allocator_ != NULL) allocator_->Verify(); |
11815 #endif | 11814 #endif |
11816 } | 11815 } |
11817 | 11816 |
11818 } } // namespace v8::internal | 11817 } } // namespace v8::internal |
OLD | NEW |