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

Side by Side Diff: src/hydrogen.cc

Issue 17572011: Split HPhase for Lithium and Hydrogen using common CompilationPhase base. (Closed) Base URL: git@github.com:v8/v8.git@master
Patch Set: Created 7 years, 6 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 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 945 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 builder_->set_current_block(exit_block_); 956 builder_->set_current_block(exit_block_);
957 // Pop the phi from the expression stack 957 // Pop the phi from the expression stack
958 builder_->environment()->Pop(); 958 builder_->environment()->Pop();
959 finished_ = true; 959 finished_ = true;
960 } 960 }
961 961
962 962
963 HGraph* HGraphBuilder::CreateGraph() { 963 HGraph* HGraphBuilder::CreateGraph() {
964 graph_ = new(zone()) HGraph(info_); 964 graph_ = new(zone()) HGraph(info_);
965 if (FLAG_hydrogen_stats) isolate()->GetHStatistics()->Initialize(info_); 965 if (FLAG_hydrogen_stats) isolate()->GetHStatistics()->Initialize(info_);
966 HPhase phase("H_Block building", isolate(), zone()); 966 CompilationPhase phase("H_Block building", isolate(), zone());
967 set_current_block(graph()->entry_block()); 967 set_current_block(graph()->entry_block());
968 if (!BuildGraph()) return NULL; 968 if (!BuildGraph()) return NULL;
969 graph()->FinalizeUniqueValueIds(); 969 graph()->FinalizeUniqueValueIds();
970 return graph_; 970 return graph_;
971 } 971 }
972 972
973 973
974 HInstruction* HGraphBuilder::AddInstruction(HInstruction* instr) { 974 HInstruction* HGraphBuilder::AddInstruction(HInstruction* instr) {
975 ASSERT(current_block() != NULL); 975 ASSERT(current_block() != NULL);
976 current_block()->AddInstruction(instr); 976 current_block()->AddInstruction(instr);
(...skipping 1400 matching lines...) Expand 10 before | Expand all | Expand 10 after
2377 HLoopInformation* loop_; 2377 HLoopInformation* loop_;
2378 HBasicBlock* block_; 2378 HBasicBlock* block_;
2379 HBasicBlock* loop_header_; 2379 HBasicBlock* loop_header_;
2380 int loop_index; 2380 int loop_index;
2381 int loop_length; 2381 int loop_length;
2382 HSuccessorIterator successor_iterator; 2382 HSuccessorIterator successor_iterator;
2383 }; 2383 };
2384 2384
2385 2385
2386 void HGraph::OrderBlocks() { 2386 void HGraph::OrderBlocks() {
2387 HPhase phase("H_Block ordering", isolate(), zone()); 2387 CompilationPhase phase("H_Block ordering", isolate(), zone());
2388 BitVector visited(blocks_.length(), zone()); 2388 BitVector visited(blocks_.length(), zone());
2389 2389
2390 ZoneList<HBasicBlock*> reverse_result(8, zone()); 2390 ZoneList<HBasicBlock*> reverse_result(8, zone());
2391 HBasicBlock* start = blocks_[0]; 2391 HBasicBlock* start = blocks_[0];
2392 PostorderProcessor* postorder = 2392 PostorderProcessor* postorder =
2393 PostorderProcessor::CreateEntryProcessor(zone(), start, &visited); 2393 PostorderProcessor::CreateEntryProcessor(zone(), start, &visited);
2394 while (postorder != NULL) { 2394 while (postorder != NULL) {
2395 postorder = postorder->PerformStep(zone(), &visited, &reverse_result); 2395 postorder = postorder->PerformStep(zone(), &visited, &reverse_result);
2396 } 2396 }
2397 blocks_.Rewind(0); 2397 blocks_.Rewind(0);
(...skipping 9094 matching lines...) Expand 10 before | Expand all | Expand 10 after
11492 double normalized_size_in_kb = source_size_in_kb > 0 11492 double normalized_size_in_kb = source_size_in_kb > 0
11493 ? total_size_ / 1024 / source_size_in_kb 11493 ? total_size_ / 1024 / source_size_in_kb
11494 : 0; 11494 : 0;
11495 PrintF("%30s - %8.3f ms %7.3f kB allocated\n", 11495 PrintF("%30s - %8.3f ms %7.3f kB allocated\n",
11496 "Average per kB source", 11496 "Average per kB source",
11497 normalized_time, normalized_size_in_kb); 11497 normalized_time, normalized_size_in_kb);
11498 } 11498 }
11499 11499
11500 11500
11501 void HStatistics::SaveTiming(const char* name, int64_t ticks, unsigned size) { 11501 void HStatistics::SaveTiming(const char* name, int64_t ticks, unsigned size) {
11502 if (name == HPhase::kFullCodeGen) { 11502 total_size_ += size;
11503 full_code_gen_ += ticks; 11503 for (int i = 0; i < names_.length(); ++i) {
11504 } else { 11504 if (strcmp(names_[i], name) == 0) {
11505 total_size_ += size; 11505 timing_[i] += ticks;
11506 for (int i = 0; i < names_.length(); ++i) { 11506 sizes_[i] += size;
11507 if (strcmp(names_[i], name) == 0) { 11507 return;
11508 timing_[i] += ticks;
11509 sizes_[i] += size;
11510 return;
11511 }
11512 } 11508 }
11513 names_.Add(name);
11514 timing_.Add(ticks);
11515 sizes_.Add(size);
11516 } 11509 }
11510 names_.Add(name);
11511 timing_.Add(ticks);
11512 sizes_.Add(size);
11517 } 11513 }
11518 11514
11519 11515
11520 const char* const HPhase::kFullCodeGen = "Full code generator"; 11516 HPhase::HPhase(const char* name, HGraph* graph)
11521 11517 : CompilationPhase(name, graph->isolate(), graph->zone()), graph_(graph) { }
11522
11523 HPhase::HPhase(const char* name, Isolate* isolate, Zone* zone) {
11524 Init(isolate, name, zone, NULL, NULL, NULL);
11525 }
11526
11527
11528 HPhase::HPhase(const char* name, HGraph* graph) {
11529 Init(graph->isolate(), name, graph->zone(), graph, NULL, NULL);
11530 }
11531
11532
11533 HPhase::HPhase(const char* name, LChunk* chunk) {
11534 Init(chunk->isolate(), name, chunk->zone(), NULL, chunk, NULL);
11535 }
11536
11537
11538 HPhase::HPhase(const char* name, LAllocator* allocator) {
11539 Init(allocator->isolate(), name, allocator->zone(), NULL, NULL, allocator);
11540 }
11541
11542
11543 void HPhase::Init(Isolate* isolate,
11544 const char* name,
11545 Zone* zone,
11546 HGraph* graph,
11547 LChunk* chunk,
11548 LAllocator* allocator) {
11549 isolate_ = isolate;
11550 name_ = name;
11551 zone_ = zone;
11552 graph_ = graph;
11553 chunk_ = chunk;
11554 allocator_ = allocator;
11555 if (allocator != NULL && chunk_ == NULL) {
11556 chunk_ = allocator->chunk();
11557 }
11558 if (FLAG_hydrogen_stats) {
11559 start_ticks_ = OS::Ticks();
11560 start_allocation_size_ = zone_->allocation_size();
11561 }
11562 }
11563 11518
11564 11519
11565 HPhase::~HPhase() { 11520 HPhase::~HPhase() {
11566 if (FLAG_hydrogen_stats) { 11521 if (ShouldProduceTraceOutput()) {
11567 int64_t ticks = OS::Ticks() - start_ticks_; 11522 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
11568 unsigned size = zone_->allocation_size() - start_allocation_size_;
11569 isolate_->GetHStatistics()->SaveTiming(name_, ticks, size);
11570 }
11571
11572 // Produce trace output if flag is set so that the first letter of the
11573 // phase name matches the command line parameter FLAG_trace_phase.
11574 if (FLAG_trace_hydrogen &&
11575 OS::StrChr(const_cast<char*>(FLAG_trace_phase), name_[0]) != NULL) {
11576 if (graph_ != NULL) {
11577 isolate_->GetHTracer()->TraceHydrogen(name_, graph_);
11578 }
11579 if (chunk_ != NULL) {
11580 isolate_->GetHTracer()->TraceLithium(name_, chunk_);
11581 }
11582 if (allocator_ != NULL) {
11583 isolate_->GetHTracer()->TraceLiveRanges(name_, allocator_);
11584 }
11585 } 11523 }
11586 11524
11587 #ifdef DEBUG 11525 #ifdef DEBUG
11588 if (graph_ != NULL) graph_->Verify(false); // No full verify. 11526 graph_->Verify(false); // No full verify.
11589 if (allocator_ != NULL) allocator_->Verify();
11590 #endif 11527 #endif
11591 } 11528 }
11592 11529
11593 } } // namespace v8::internal 11530 } } // namespace v8::internal
OLDNEW
« src/compiler.cc ('K') | « src/hydrogen.h ('k') | src/ia32/lithium-codegen-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698