Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(259)

Side by Side Diff: src/compiler/pipeline.cc

Issue 2175233003: Replace SmartPointer<T> with unique_ptr<T> (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@smart-array
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/pipeline.h" 5 #include "src/compiler/pipeline.h"
6 6
7 #include <fstream> // NOLINT(readability/streams) 7 #include <fstream> // NOLINT(readability/streams)
8 #include <memory> 8 #include <memory>
9 #include <sstream> 9 #include <sstream>
10 10
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 protected: 573 protected:
574 Status CreateGraphImpl() final; 574 Status CreateGraphImpl() final;
575 Status OptimizeGraphImpl() final; 575 Status OptimizeGraphImpl() final;
576 Status GenerateCodeImpl() final; 576 Status GenerateCodeImpl() final;
577 577
578 private: 578 private:
579 Zone zone_; 579 Zone zone_;
580 ZonePool zone_pool_; 580 ZonePool zone_pool_;
581 ParseInfo parse_info_; 581 ParseInfo parse_info_;
582 CompilationInfo info_; 582 CompilationInfo info_;
583 base::SmartPointer<PipelineStatistics> pipeline_statistics_; 583 std::unique_ptr<PipelineStatistics> pipeline_statistics_;
584 PipelineData data_; 584 PipelineData data_;
585 PipelineImpl pipeline_; 585 PipelineImpl pipeline_;
586 Linkage* linkage_; 586 Linkage* linkage_;
587
588 DISALLOW_COPY_AND_ASSIGN(PipelineCompilationJob);
587 }; 589 };
588 590
589 PipelineCompilationJob::Status PipelineCompilationJob::CreateGraphImpl() { 591 PipelineCompilationJob::Status PipelineCompilationJob::CreateGraphImpl() {
590 if (info()->shared_info()->asm_function()) { 592 if (info()->shared_info()->asm_function()) {
591 if (info()->osr_frame()) info()->MarkAsFrameSpecializing(); 593 if (info()->osr_frame()) info()->MarkAsFrameSpecializing();
592 info()->MarkAsFunctionContextSpecializing(); 594 info()->MarkAsFunctionContextSpecializing();
593 } else { 595 } else {
594 if (!FLAG_always_opt) { 596 if (!FLAG_always_opt) {
595 info()->MarkAsBailoutOnUninitialized(); 597 info()->MarkAsBailoutOnUninitialized();
596 } 598 }
(...skipping 960 matching lines...) Expand 10 before | Expand all | Expand 10 after
1557 Handle<Code> Pipeline::GenerateCodeForCodeStub(Isolate* isolate, 1559 Handle<Code> Pipeline::GenerateCodeForCodeStub(Isolate* isolate,
1558 CallDescriptor* call_descriptor, 1560 CallDescriptor* call_descriptor,
1559 Graph* graph, Schedule* schedule, 1561 Graph* graph, Schedule* schedule,
1560 Code::Flags flags, 1562 Code::Flags flags,
1561 const char* debug_name) { 1563 const char* debug_name) {
1562 CompilationInfo info(CStrVector(debug_name), isolate, graph->zone(), flags); 1564 CompilationInfo info(CStrVector(debug_name), isolate, graph->zone(), flags);
1563 1565
1564 // Construct a pipeline for scheduling and code generation. 1566 // Construct a pipeline for scheduling and code generation.
1565 ZonePool zone_pool(isolate->allocator()); 1567 ZonePool zone_pool(isolate->allocator());
1566 PipelineData data(&zone_pool, &info, graph, schedule); 1568 PipelineData data(&zone_pool, &info, graph, schedule);
1567 base::SmartPointer<PipelineStatistics> pipeline_statistics; 1569 std::unique_ptr<PipelineStatistics> pipeline_statistics;
1568 if (FLAG_turbo_stats || FLAG_turbo_stats_nvp) { 1570 if (FLAG_turbo_stats || FLAG_turbo_stats_nvp) {
1569 pipeline_statistics.Reset(new PipelineStatistics(&info, &zone_pool)); 1571 pipeline_statistics.reset(new PipelineStatistics(&info, &zone_pool));
1570 pipeline_statistics->BeginPhaseKind("stub codegen"); 1572 pipeline_statistics->BeginPhaseKind("stub codegen");
1571 } 1573 }
1572 1574
1573 PipelineImpl pipeline(&data); 1575 PipelineImpl pipeline(&data);
1574 DCHECK_NOT_NULL(data.schedule()); 1576 DCHECK_NOT_NULL(data.schedule());
1575 1577
1576 if (FLAG_trace_turbo) { 1578 if (FLAG_trace_turbo) {
1577 { 1579 {
1578 TurboJsonFile json_of(&info, std::ios_base::trunc); 1580 TurboJsonFile json_of(&info, std::ios_base::trunc);
1579 json_of << "{\"function\":\"" << info.GetDebugName().get() 1581 json_of << "{\"function\":\"" << info.GetDebugName().get()
1580 << "\", \"source\":\"\",\n\"phases\":["; 1582 << "\", \"source\":\"\",\n\"phases\":[";
1581 } 1583 }
1582 pipeline.Run<PrintGraphPhase>("Machine"); 1584 pipeline.Run<PrintGraphPhase>("Machine");
1583 } 1585 }
1584 1586
1585 pipeline.Run<VerifyGraphPhase>(false, true); 1587 pipeline.Run<VerifyGraphPhase>(false, true);
1586 return pipeline.ScheduleAndGenerateCode(call_descriptor); 1588 return pipeline.ScheduleAndGenerateCode(call_descriptor);
1587 } 1589 }
1588 1590
1589 // static 1591 // static
1590 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info) { 1592 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info) {
1591 ZonePool zone_pool(info->isolate()->allocator()); 1593 ZonePool zone_pool(info->isolate()->allocator());
1592 base::SmartPointer<PipelineStatistics> pipeline_statistics( 1594 std::unique_ptr<PipelineStatistics> pipeline_statistics(
1593 CreatePipelineStatistics(info, &zone_pool)); 1595 CreatePipelineStatistics(info, &zone_pool));
1594 PipelineData data(&zone_pool, info, pipeline_statistics.get()); 1596 PipelineData data(&zone_pool, info, pipeline_statistics.get());
1595 PipelineImpl pipeline(&data); 1597 PipelineImpl pipeline(&data);
1596 1598
1597 Linkage linkage(Linkage::ComputeIncoming(data.instruction_zone(), info)); 1599 Linkage linkage(Linkage::ComputeIncoming(data.instruction_zone(), info));
1598 1600
1599 if (!pipeline.CreateGraph()) return Handle<Code>::null(); 1601 if (!pipeline.CreateGraph()) return Handle<Code>::null();
1600 if (!pipeline.OptimizeGraph(&linkage)) return Handle<Code>::null(); 1602 if (!pipeline.OptimizeGraph(&linkage)) return Handle<Code>::null();
1601 return pipeline.GenerateCode(&linkage); 1603 return pipeline.GenerateCode(&linkage);
1602 } 1604 }
1603 1605
1604 // static 1606 // static
1605 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info, 1607 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info,
1606 Graph* graph, 1608 Graph* graph,
1607 Schedule* schedule) { 1609 Schedule* schedule) {
1608 CallDescriptor* call_descriptor = 1610 CallDescriptor* call_descriptor =
1609 Linkage::ComputeIncoming(info->zone(), info); 1611 Linkage::ComputeIncoming(info->zone(), info);
1610 return GenerateCodeForTesting(info, call_descriptor, graph, schedule); 1612 return GenerateCodeForTesting(info, call_descriptor, graph, schedule);
1611 } 1613 }
1612 1614
1613 // static 1615 // static
1614 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info, 1616 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info,
1615 CallDescriptor* call_descriptor, 1617 CallDescriptor* call_descriptor,
1616 Graph* graph, 1618 Graph* graph,
1617 Schedule* schedule) { 1619 Schedule* schedule) {
1618 // Construct a pipeline for scheduling and code generation. 1620 // Construct a pipeline for scheduling and code generation.
1619 ZonePool zone_pool(info->isolate()->allocator()); 1621 ZonePool zone_pool(info->isolate()->allocator());
1620 PipelineData data(&zone_pool, info, graph, schedule); 1622 PipelineData data(&zone_pool, info, graph, schedule);
1621 base::SmartPointer<PipelineStatistics> pipeline_statistics; 1623 std::unique_ptr<PipelineStatistics> pipeline_statistics;
1622 if (FLAG_turbo_stats || FLAG_turbo_stats_nvp) { 1624 if (FLAG_turbo_stats || FLAG_turbo_stats_nvp) {
1623 pipeline_statistics.Reset(new PipelineStatistics(info, &zone_pool)); 1625 pipeline_statistics.reset(new PipelineStatistics(info, &zone_pool));
1624 pipeline_statistics->BeginPhaseKind("test codegen"); 1626 pipeline_statistics->BeginPhaseKind("test codegen");
1625 } 1627 }
1626 1628
1627 PipelineImpl pipeline(&data); 1629 PipelineImpl pipeline(&data);
1628 1630
1629 if (FLAG_trace_turbo) { 1631 if (FLAG_trace_turbo) {
1630 TurboJsonFile json_of(info, std::ios_base::trunc); 1632 TurboJsonFile json_of(info, std::ios_base::trunc);
1631 json_of << "{\"function\":\"" << info->GetDebugName().get() 1633 json_of << "{\"function\":\"" << info->GetDebugName().get()
1632 << "\", \"source\":\"\",\n\"phases\":["; 1634 << "\", \"source\":\"\",\n\"phases\":[";
1633 } 1635 }
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
1780 1782
1781 // Generate the final machine code. 1783 // Generate the final machine code.
1782 return GenerateCode(&linkage); 1784 return GenerateCode(&linkage);
1783 } 1785 }
1784 1786
1785 void PipelineImpl::AllocateRegisters(const RegisterConfiguration* config, 1787 void PipelineImpl::AllocateRegisters(const RegisterConfiguration* config,
1786 CallDescriptor* descriptor, 1788 CallDescriptor* descriptor,
1787 bool run_verifier) { 1789 bool run_verifier) {
1788 PipelineData* data = this->data_; 1790 PipelineData* data = this->data_;
1789 // Don't track usage for this zone in compiler stats. 1791 // Don't track usage for this zone in compiler stats.
1790 base::SmartPointer<Zone> verifier_zone; 1792 std::unique_ptr<Zone> verifier_zone;
1791 RegisterAllocatorVerifier* verifier = nullptr; 1793 RegisterAllocatorVerifier* verifier = nullptr;
1792 if (run_verifier) { 1794 if (run_verifier) {
1793 verifier_zone.Reset(new Zone(isolate()->allocator())); 1795 verifier_zone.reset(new Zone(isolate()->allocator()));
1794 verifier = new (verifier_zone.get()) RegisterAllocatorVerifier( 1796 verifier = new (verifier_zone.get()) RegisterAllocatorVerifier(
1795 verifier_zone.get(), config, data->sequence()); 1797 verifier_zone.get(), config, data->sequence());
1796 } 1798 }
1797 1799
1798 #ifdef DEBUG 1800 #ifdef DEBUG
1799 data_->sequence()->ValidateEdgeSplitForm(); 1801 data_->sequence()->ValidateEdgeSplitForm();
1800 data_->sequence()->ValidateDeferredBlockEntryPaths(); 1802 data_->sequence()->ValidateDeferredBlockEntryPaths();
1801 data_->sequence()->ValidateDeferredBlockExitPaths(); 1803 data_->sequence()->ValidateDeferredBlockExitPaths();
1802 #endif 1804 #endif
1803 1805
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1866 data->DeleteRegisterAllocationZone(); 1868 data->DeleteRegisterAllocationZone();
1867 } 1869 }
1868 1870
1869 CompilationInfo* PipelineImpl::info() const { return data_->info(); } 1871 CompilationInfo* PipelineImpl::info() const { return data_->info(); }
1870 1872
1871 Isolate* PipelineImpl::isolate() const { return info()->isolate(); } 1873 Isolate* PipelineImpl::isolate() const { return info()->isolate(); }
1872 1874
1873 } // namespace compiler 1875 } // namespace compiler
1874 } // namespace internal 1876 } // namespace internal
1875 } // namespace v8 1877 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698