OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/hydrogen.h" | 5 #include "src/hydrogen.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "src/v8.h" | 9 #include "src/v8.h" |
10 | 10 |
(...skipping 9936 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9947 HInstruction* HOptimizedGraphBuilder::BuildStringCharCodeAt( | 9947 HInstruction* HOptimizedGraphBuilder::BuildStringCharCodeAt( |
9948 HValue* string, | 9948 HValue* string, |
9949 HValue* index) { | 9949 HValue* index) { |
9950 if (string->IsConstant() && index->IsConstant()) { | 9950 if (string->IsConstant() && index->IsConstant()) { |
9951 HConstant* c_string = HConstant::cast(string); | 9951 HConstant* c_string = HConstant::cast(string); |
9952 HConstant* c_index = HConstant::cast(index); | 9952 HConstant* c_index = HConstant::cast(index); |
9953 if (c_string->HasStringValue() && c_index->HasNumberValue()) { | 9953 if (c_string->HasStringValue() && c_index->HasNumberValue()) { |
9954 int32_t i = c_index->NumberValueAsInteger32(); | 9954 int32_t i = c_index->NumberValueAsInteger32(); |
9955 Handle<String> s = c_string->StringValue(); | 9955 Handle<String> s = c_string->StringValue(); |
9956 if (i < 0 || i >= s->length()) { | 9956 if (i < 0 || i >= s->length()) { |
9957 return New<HConstant>(OS::nan_value()); | 9957 return New<HConstant>(base::OS::nan_value()); |
9958 } | 9958 } |
9959 return New<HConstant>(s->Get(i)); | 9959 return New<HConstant>(s->Get(i)); |
9960 } | 9960 } |
9961 } | 9961 } |
9962 string = BuildCheckString(string); | 9962 string = BuildCheckString(string); |
9963 index = Add<HBoundsCheck>(index, AddLoadStringLength(string)); | 9963 index = Add<HBoundsCheck>(index, AddLoadStringLength(string)); |
9964 return New<HStringCharCodeAt>(string, index); | 9964 return New<HStringCharCodeAt>(string, index); |
9965 } | 9965 } |
9966 | 9966 |
9967 | 9967 |
(...skipping 2081 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12049 PrintStringProperty("name", name->ToCString().get()); | 12049 PrintStringProperty("name", name->ToCString().get()); |
12050 PrintIndent(); | 12050 PrintIndent(); |
12051 trace_.Add("method \"%s:%d\"\n", | 12051 trace_.Add("method \"%s:%d\"\n", |
12052 name->ToCString().get(), | 12052 name->ToCString().get(), |
12053 info->optimization_id()); | 12053 info->optimization_id()); |
12054 } else { | 12054 } else { |
12055 CodeStub::Major major_key = info->code_stub()->MajorKey(); | 12055 CodeStub::Major major_key = info->code_stub()->MajorKey(); |
12056 PrintStringProperty("name", CodeStub::MajorName(major_key, false)); | 12056 PrintStringProperty("name", CodeStub::MajorName(major_key, false)); |
12057 PrintStringProperty("method", "stub"); | 12057 PrintStringProperty("method", "stub"); |
12058 } | 12058 } |
12059 PrintLongProperty("date", static_cast<int64_t>(OS::TimeCurrentMillis())); | 12059 PrintLongProperty("date", |
| 12060 static_cast<int64_t>(base::OS::TimeCurrentMillis())); |
12060 } | 12061 } |
12061 | 12062 |
12062 | 12063 |
12063 void HTracer::TraceLithium(const char* name, LChunk* chunk) { | 12064 void HTracer::TraceLithium(const char* name, LChunk* chunk) { |
12064 ASSERT(!chunk->isolate()->concurrent_recompilation_enabled()); | 12065 ASSERT(!chunk->isolate()->concurrent_recompilation_enabled()); |
12065 AllowHandleDereference allow_deref; | 12066 AllowHandleDereference allow_deref; |
12066 AllowDeferredHandleDereference allow_deferred_deref; | 12067 AllowDeferredHandleDereference allow_deferred_deref; |
12067 Trace(name, chunk->graph(), chunk); | 12068 Trace(name, chunk->graph(), chunk); |
12068 } | 12069 } |
12069 | 12070 |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12296 | 12297 |
12297 | 12298 |
12298 void HStatistics::Initialize(CompilationInfo* info) { | 12299 void HStatistics::Initialize(CompilationInfo* info) { |
12299 if (info->shared_info().is_null()) return; | 12300 if (info->shared_info().is_null()) return; |
12300 source_size_ += info->shared_info()->SourceSize(); | 12301 source_size_ += info->shared_info()->SourceSize(); |
12301 } | 12302 } |
12302 | 12303 |
12303 | 12304 |
12304 void HStatistics::Print() { | 12305 void HStatistics::Print() { |
12305 PrintF("Timing results:\n"); | 12306 PrintF("Timing results:\n"); |
12306 TimeDelta sum; | 12307 base::TimeDelta sum; |
12307 for (int i = 0; i < times_.length(); ++i) { | 12308 for (int i = 0; i < times_.length(); ++i) { |
12308 sum += times_[i]; | 12309 sum += times_[i]; |
12309 } | 12310 } |
12310 | 12311 |
12311 for (int i = 0; i < names_.length(); ++i) { | 12312 for (int i = 0; i < names_.length(); ++i) { |
12312 PrintF("%32s", names_[i]); | 12313 PrintF("%32s", names_[i]); |
12313 double ms = times_[i].InMillisecondsF(); | 12314 double ms = times_[i].InMillisecondsF(); |
12314 double percent = times_[i].PercentOf(sum); | 12315 double percent = times_[i].PercentOf(sum); |
12315 PrintF(" %8.3f ms / %4.1f %% ", ms, percent); | 12316 PrintF(" %8.3f ms / %4.1f %% ", ms, percent); |
12316 | 12317 |
12317 unsigned size = sizes_[i]; | 12318 unsigned size = sizes_[i]; |
12318 double size_percent = static_cast<double>(size) * 100 / total_size_; | 12319 double size_percent = static_cast<double>(size) * 100 / total_size_; |
12319 PrintF(" %9u bytes / %4.1f %%\n", size, size_percent); | 12320 PrintF(" %9u bytes / %4.1f %%\n", size, size_percent); |
12320 } | 12321 } |
12321 | 12322 |
12322 PrintF("----------------------------------------" | 12323 PrintF("----------------------------------------" |
12323 "---------------------------------------\n"); | 12324 "---------------------------------------\n"); |
12324 TimeDelta total = create_graph_ + optimize_graph_ + generate_code_; | 12325 base::TimeDelta total = create_graph_ + optimize_graph_ + generate_code_; |
12325 PrintF("%32s %8.3f ms / %4.1f %% \n", | 12326 PrintF("%32s %8.3f ms / %4.1f %% \n", |
12326 "Create graph", | 12327 "Create graph", |
12327 create_graph_.InMillisecondsF(), | 12328 create_graph_.InMillisecondsF(), |
12328 create_graph_.PercentOf(total)); | 12329 create_graph_.PercentOf(total)); |
12329 PrintF("%32s %8.3f ms / %4.1f %% \n", | 12330 PrintF("%32s %8.3f ms / %4.1f %% \n", |
12330 "Optimize graph", | 12331 "Optimize graph", |
12331 optimize_graph_.InMillisecondsF(), | 12332 optimize_graph_.InMillisecondsF(), |
12332 optimize_graph_.PercentOf(total)); | 12333 optimize_graph_.PercentOf(total)); |
12333 PrintF("%32s %8.3f ms / %4.1f %% \n", | 12334 PrintF("%32s %8.3f ms / %4.1f %% \n", |
12334 "Generate and install code", | 12335 "Generate and install code", |
(...skipping 12 matching lines...) Expand all Loading... |
12347 : 0; | 12348 : 0; |
12348 double normalized_size_in_kb = source_size_in_kb > 0 | 12349 double normalized_size_in_kb = source_size_in_kb > 0 |
12349 ? total_size_ / 1024 / source_size_in_kb | 12350 ? total_size_ / 1024 / source_size_in_kb |
12350 : 0; | 12351 : 0; |
12351 PrintF("%32s %8.3f ms %7.3f kB allocated\n", | 12352 PrintF("%32s %8.3f ms %7.3f kB allocated\n", |
12352 "Average per kB source", | 12353 "Average per kB source", |
12353 normalized_time, normalized_size_in_kb); | 12354 normalized_time, normalized_size_in_kb); |
12354 } | 12355 } |
12355 | 12356 |
12356 | 12357 |
12357 void HStatistics::SaveTiming(const char* name, TimeDelta time, unsigned size) { | 12358 void HStatistics::SaveTiming(const char* name, base::TimeDelta time, |
| 12359 unsigned size) { |
12358 total_size_ += size; | 12360 total_size_ += size; |
12359 for (int i = 0; i < names_.length(); ++i) { | 12361 for (int i = 0; i < names_.length(); ++i) { |
12360 if (strcmp(names_[i], name) == 0) { | 12362 if (strcmp(names_[i], name) == 0) { |
12361 times_[i] += time; | 12363 times_[i] += time; |
12362 sizes_[i] += size; | 12364 sizes_[i] += size; |
12363 return; | 12365 return; |
12364 } | 12366 } |
12365 } | 12367 } |
12366 names_.Add(name); | 12368 names_.Add(name); |
12367 times_.Add(time); | 12369 times_.Add(time); |
12368 sizes_.Add(size); | 12370 sizes_.Add(size); |
12369 } | 12371 } |
12370 | 12372 |
12371 | 12373 |
12372 HPhase::~HPhase() { | 12374 HPhase::~HPhase() { |
12373 if (ShouldProduceTraceOutput()) { | 12375 if (ShouldProduceTraceOutput()) { |
12374 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 12376 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); |
12375 } | 12377 } |
12376 | 12378 |
12377 #ifdef DEBUG | 12379 #ifdef DEBUG |
12378 graph_->Verify(false); // No full verify. | 12380 graph_->Verify(false); // No full verify. |
12379 #endif | 12381 #endif |
12380 } | 12382 } |
12381 | 12383 |
12382 } } // namespace v8::internal | 12384 } } // namespace v8::internal |
OLD | NEW |