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 2116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2127 | 2127 |
2128 void HGraphBuilder::VisitExpressions(ZoneList<Expression*>* exprs) { | 2128 void HGraphBuilder::VisitExpressions(ZoneList<Expression*>* exprs) { |
2129 for (int i = 0; i < exprs->length(); ++i) { | 2129 for (int i = 0; i < exprs->length(); ++i) { |
2130 VISIT_FOR_VALUE(exprs->at(i)); | 2130 VISIT_FOR_VALUE(exprs->at(i)); |
2131 } | 2131 } |
2132 } | 2132 } |
2133 | 2133 |
2134 | 2134 |
2135 HGraph* HGraphBuilder::CreateGraph() { | 2135 HGraph* HGraphBuilder::CreateGraph() { |
2136 graph_ = new HGraph(info()); | 2136 graph_ = new HGraph(info()); |
| 2137 if (FLAG_hydrogen_stats) HStatistics::Instance()->Initialize(info()); |
| 2138 |
2137 { | 2139 { |
2138 HPhase phase("Block building"); | 2140 HPhase phase("Block building"); |
2139 current_block_ = graph()->entry_block(); | 2141 current_block_ = graph()->entry_block(); |
2140 | 2142 |
2141 Scope* scope = info()->scope(); | 2143 Scope* scope = info()->scope(); |
2142 if (scope->HasIllegalRedeclaration()) { | 2144 if (scope->HasIllegalRedeclaration()) { |
2143 Bailout("function with illegal redeclaration"); | 2145 Bailout("function with illegal redeclaration"); |
2144 return NULL; | 2146 return NULL; |
2145 } | 2147 } |
2146 SetupScope(scope); | 2148 SetupScope(scope); |
(...skipping 3656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5803 } | 5805 } |
5804 } | 5806 } |
5805 | 5807 |
5806 | 5808 |
5807 void HTracer::FlushToFile() { | 5809 void HTracer::FlushToFile() { |
5808 AppendChars(filename_, *trace_.ToCString(), trace_.length(), false); | 5810 AppendChars(filename_, *trace_.ToCString(), trace_.length(), false); |
5809 trace_.Reset(); | 5811 trace_.Reset(); |
5810 } | 5812 } |
5811 | 5813 |
5812 | 5814 |
| 5815 void HStatistics::Initialize(CompilationInfo* info) { |
| 5816 source_size_ += info->shared_info()->SourceSize(); |
| 5817 } |
| 5818 |
| 5819 |
5813 void HStatistics::Print() { | 5820 void HStatistics::Print() { |
5814 PrintF("Timing results:\n"); | 5821 PrintF("Timing results:\n"); |
5815 int64_t sum = 0; | 5822 int64_t sum = 0; |
5816 for (int i = 0; i < timing_.length(); ++i) { | 5823 for (int i = 0; i < timing_.length(); ++i) { |
5817 sum += timing_[i]; | 5824 sum += timing_[i]; |
5818 } | 5825 } |
5819 | 5826 |
5820 for (int i = 0; i < names_.length(); ++i) { | 5827 for (int i = 0; i < names_.length(); ++i) { |
5821 PrintF("%30s", names_[i]); | 5828 PrintF("%30s", names_[i]); |
5822 double ms = static_cast<double>(timing_[i]) / 1000; | 5829 double ms = static_cast<double>(timing_[i]) / 1000; |
5823 double percent = static_cast<double>(timing_[i]) * 100 / sum; | 5830 double percent = static_cast<double>(timing_[i]) * 100 / sum; |
5824 PrintF(" - %7.3f ms / %4.1f %% ", ms, percent); | 5831 PrintF(" - %7.3f ms / %4.1f %% ", ms, percent); |
5825 | 5832 |
5826 unsigned size = sizes_[i]; | 5833 unsigned size = sizes_[i]; |
5827 double size_percent = static_cast<double>(size) * 100 / total_size_; | 5834 double size_percent = static_cast<double>(size) * 100 / total_size_; |
5828 PrintF(" %8u bytes / %4.1f %%\n", size, size_percent); | 5835 PrintF(" %8u bytes / %4.1f %%\n", size, size_percent); |
5829 } | 5836 } |
5830 PrintF("%30s - %7.3f ms %8u bytes\n", "Sum", | 5837 double source_size_in_kb = static_cast<double>(source_size_) / 1024; |
5831 static_cast<double>(sum) / 1000, | 5838 PrintF("%30s - %7.3f ms %7.3f bytes\n", "Sum", |
5832 total_size_); | 5839 (static_cast<double>(sum) / 1000) / source_size_in_kb, |
| 5840 total_size_ / source_size_in_kb); |
5833 PrintF("---------------------------------------------------------------\n"); | 5841 PrintF("---------------------------------------------------------------\n"); |
5834 PrintF("%30s - %7.3f ms (%.1f times slower than full code gen)\n", | 5842 PrintF("%30s - %7.3f ms (%.1f times slower than full code gen)\n", |
5835 "Total", | 5843 "Total", |
5836 static_cast<double>(total_) / 1000, | 5844 static_cast<double>(total_) / 1000, |
5837 static_cast<double>(total_) / full_code_gen_); | 5845 static_cast<double>(total_) / full_code_gen_); |
5838 } | 5846 } |
5839 | 5847 |
5840 | 5848 |
5841 void HStatistics::SaveTiming(const char* name, int64_t ticks, unsigned size) { | 5849 void HStatistics::SaveTiming(const char* name, int64_t ticks, unsigned size) { |
5842 if (name == HPhase::kFullCodeGen) { | 5850 if (name == HPhase::kFullCodeGen) { |
(...skipping 24 matching lines...) Expand all Loading... |
5867 HGraph* graph, | 5875 HGraph* graph, |
5868 LChunk* chunk, | 5876 LChunk* chunk, |
5869 LAllocator* allocator) { | 5877 LAllocator* allocator) { |
5870 name_ = name; | 5878 name_ = name; |
5871 graph_ = graph; | 5879 graph_ = graph; |
5872 chunk_ = chunk; | 5880 chunk_ = chunk; |
5873 allocator_ = allocator; | 5881 allocator_ = allocator; |
5874 if (allocator != NULL && chunk_ == NULL) { | 5882 if (allocator != NULL && chunk_ == NULL) { |
5875 chunk_ = allocator->chunk(); | 5883 chunk_ = allocator->chunk(); |
5876 } | 5884 } |
5877 if (FLAG_time_hydrogen) start_ = OS::Ticks(); | 5885 if (FLAG_hydrogen_stats) start_ = OS::Ticks(); |
5878 start_allocation_size_ = Zone::allocation_size_; | 5886 start_allocation_size_ = Zone::allocation_size_; |
5879 } | 5887 } |
5880 | 5888 |
5881 | 5889 |
5882 void HPhase::End() const { | 5890 void HPhase::End() const { |
5883 if (FLAG_time_hydrogen) { | 5891 if (FLAG_hydrogen_stats) { |
5884 int64_t end = OS::Ticks(); | 5892 int64_t end = OS::Ticks(); |
5885 unsigned size = Zone::allocation_size_ - start_allocation_size_; | 5893 unsigned size = Zone::allocation_size_ - start_allocation_size_; |
5886 HStatistics::Instance()->SaveTiming(name_, end - start_, size); | 5894 HStatistics::Instance()->SaveTiming(name_, end - start_, size); |
5887 } | 5895 } |
5888 | 5896 |
5889 if (FLAG_trace_hydrogen) { | 5897 if (FLAG_trace_hydrogen) { |
5890 if (graph_ != NULL) HTracer::Instance()->TraceHydrogen(name_, graph_); | 5898 if (graph_ != NULL) HTracer::Instance()->TraceHydrogen(name_, graph_); |
5891 if (chunk_ != NULL) HTracer::Instance()->TraceLithium(name_, chunk_); | 5899 if (chunk_ != NULL) HTracer::Instance()->TraceLithium(name_, chunk_); |
5892 if (allocator_ != NULL) { | 5900 if (allocator_ != NULL) { |
5893 HTracer::Instance()->TraceLiveRanges(name_, allocator_); | 5901 HTracer::Instance()->TraceLiveRanges(name_, allocator_); |
5894 } | 5902 } |
5895 } | 5903 } |
5896 | 5904 |
5897 #ifdef DEBUG | 5905 #ifdef DEBUG |
5898 if (graph_ != NULL) graph_->Verify(); | 5906 if (graph_ != NULL) graph_->Verify(); |
5899 if (allocator_ != NULL) allocator_->Verify(); | 5907 if (allocator_ != NULL) allocator_->Verify(); |
5900 #endif | 5908 #endif |
5901 } | 5909 } |
5902 | 5910 |
5903 } } // namespace v8::internal | 5911 } } // namespace v8::internal |
OLD | NEW |