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/compiler/graph-visualizer.h" | 5 #include "src/compiler/graph-visualizer.h" |
6 | 6 |
7 #include <sstream> | 7 #include <sstream> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
399 const SourcePositionTable* positions, | 399 const SourcePositionTable* positions, |
400 const InstructionSequence* instructions); | 400 const InstructionSequence* instructions); |
401 void PrintAllocator(const char* phase, const RegisterAllocator* allocator); | 401 void PrintAllocator(const char* phase, const RegisterAllocator* allocator); |
402 Zone* zone() const { return zone_; } | 402 Zone* zone() const { return zone_; } |
403 | 403 |
404 private: | 404 private: |
405 void PrintIndent(); | 405 void PrintIndent(); |
406 void PrintStringProperty(const char* name, const char* value); | 406 void PrintStringProperty(const char* name, const char* value); |
407 void PrintLongProperty(const char* name, int64_t value); | 407 void PrintLongProperty(const char* name, int64_t value); |
408 void PrintIntProperty(const char* name, int value); | 408 void PrintIntProperty(const char* name, int value); |
409 void PrintBlockProperty(const char* name, BasicBlock::Id block_id); | 409 void PrintBlockProperty(const char* name, int rpo_number); |
410 void PrintNodeId(Node* n); | 410 void PrintNodeId(Node* n); |
411 void PrintNode(Node* n); | 411 void PrintNode(Node* n); |
412 void PrintInputs(Node* n); | 412 void PrintInputs(Node* n); |
413 template <typename InputIterator> | 413 template <typename InputIterator> |
414 void PrintInputs(InputIterator* i, int count, const char* prefix); | 414 void PrintInputs(InputIterator* i, int count, const char* prefix); |
415 void PrintType(Node* node); | 415 void PrintType(Node* node); |
416 | 416 |
417 void PrintLiveRange(LiveRange* range, const char* type); | 417 void PrintLiveRange(LiveRange* range, const char* type); |
418 class Tag FINAL BASE_EMBEDDED { | 418 class Tag FINAL BASE_EMBEDDED { |
419 public: | 419 public: |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 os_ << name << " \"" << value << "\"\n"; | 462 os_ << name << " \"" << value << "\"\n"; |
463 } | 463 } |
464 | 464 |
465 | 465 |
466 void GraphC1Visualizer::PrintLongProperty(const char* name, int64_t value) { | 466 void GraphC1Visualizer::PrintLongProperty(const char* name, int64_t value) { |
467 PrintIndent(); | 467 PrintIndent(); |
468 os_ << name << " " << static_cast<int>(value / 1000) << "\n"; | 468 os_ << name << " " << static_cast<int>(value / 1000) << "\n"; |
469 } | 469 } |
470 | 470 |
471 | 471 |
472 void GraphC1Visualizer::PrintBlockProperty(const char* name, | 472 void GraphC1Visualizer::PrintBlockProperty(const char* name, int rpo_number) { |
473 BasicBlock::Id block_id) { | |
474 PrintIndent(); | 473 PrintIndent(); |
475 os_ << name << " \"B" << block_id << "\"\n"; | 474 os_ << name << " \"B" << rpo_number << "\"\n"; |
476 } | 475 } |
477 | 476 |
478 | 477 |
479 void GraphC1Visualizer::PrintIntProperty(const char* name, int value) { | 478 void GraphC1Visualizer::PrintIntProperty(const char* name, int value) { |
480 PrintIndent(); | 479 PrintIndent(); |
481 os_ << name << " " << value << "\n"; | 480 os_ << name << " " << value << "\n"; |
482 } | 481 } |
483 | 482 |
484 | 483 |
485 void GraphC1Visualizer::PrintCompilation(const CompilationInfo* info) { | 484 void GraphC1Visualizer::PrintCompilation(const CompilationInfo* info) { |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
551 void GraphC1Visualizer::PrintSchedule(const char* phase, | 550 void GraphC1Visualizer::PrintSchedule(const char* phase, |
552 const Schedule* schedule, | 551 const Schedule* schedule, |
553 const SourcePositionTable* positions, | 552 const SourcePositionTable* positions, |
554 const InstructionSequence* instructions) { | 553 const InstructionSequence* instructions) { |
555 Tag tag(this, "cfg"); | 554 Tag tag(this, "cfg"); |
556 PrintStringProperty("name", phase); | 555 PrintStringProperty("name", phase); |
557 const BasicBlockVector* rpo = schedule->rpo_order(); | 556 const BasicBlockVector* rpo = schedule->rpo_order(); |
558 for (size_t i = 0; i < rpo->size(); i++) { | 557 for (size_t i = 0; i < rpo->size(); i++) { |
559 BasicBlock* current = (*rpo)[i]; | 558 BasicBlock* current = (*rpo)[i]; |
560 Tag block_tag(this, "block"); | 559 Tag block_tag(this, "block"); |
561 PrintBlockProperty("name", current->id()); | 560 PrintBlockProperty("name", current->rpo_number()); |
562 PrintIntProperty("from_bci", -1); | 561 PrintIntProperty("from_bci", -1); |
563 PrintIntProperty("to_bci", -1); | 562 PrintIntProperty("to_bci", -1); |
564 | 563 |
565 PrintIndent(); | 564 PrintIndent(); |
566 os_ << "predecessors"; | 565 os_ << "predecessors"; |
567 for (BasicBlock* predecessor : current->predecessors()) { | 566 for (BasicBlock* predecessor : current->predecessors()) { |
568 os_ << " \"B" << predecessor->id() << "\""; | 567 os_ << " \"B" << predecessor->rpo_number() << "\""; |
569 } | 568 } |
570 os_ << "\n"; | 569 os_ << "\n"; |
571 | 570 |
572 PrintIndent(); | 571 PrintIndent(); |
573 os_ << "successors"; | 572 os_ << "successors"; |
574 for (BasicBlock* successor : current->successors()) { | 573 for (BasicBlock* successor : current->successors()) { |
575 os_ << " \"B" << successor->id() << "\""; | 574 os_ << " \"B" << successor->rpo_number() << "\""; |
576 } | 575 } |
577 os_ << "\n"; | 576 os_ << "\n"; |
578 | 577 |
579 PrintIndent(); | 578 PrintIndent(); |
580 os_ << "xhandlers\n"; | 579 os_ << "xhandlers\n"; |
581 | 580 |
582 PrintIndent(); | 581 PrintIndent(); |
583 os_ << "flags\n"; | 582 os_ << "flags\n"; |
584 | 583 |
585 if (current->dominator() != NULL) { | 584 if (current->dominator() != NULL) { |
586 PrintBlockProperty("dominator", current->dominator()->id()); | 585 PrintBlockProperty("dominator", current->dominator()->rpo_number()); |
587 } | 586 } |
588 | 587 |
589 PrintIntProperty("loop_depth", current->loop_depth()); | 588 PrintIntProperty("loop_depth", current->loop_depth()); |
590 | 589 |
591 const InstructionBlock* instruction_block = | 590 const InstructionBlock* instruction_block = |
592 instructions->InstructionBlockAt(current->GetRpoNumber()); | 591 instructions->InstructionBlockAt( |
| 592 RpoNumber::FromInt(current->rpo_number())); |
593 if (instruction_block->code_start() >= 0) { | 593 if (instruction_block->code_start() >= 0) { |
594 int first_index = instruction_block->first_instruction_index(); | 594 int first_index = instruction_block->first_instruction_index(); |
595 int last_index = instruction_block->last_instruction_index(); | 595 int last_index = instruction_block->last_instruction_index(); |
596 PrintIntProperty("first_lir_id", LifetimePosition::FromInstructionIndex( | 596 PrintIntProperty("first_lir_id", LifetimePosition::FromInstructionIndex( |
597 first_index).Value()); | 597 first_index).Value()); |
598 PrintIntProperty("last_lir_id", LifetimePosition::FromInstructionIndex( | 598 PrintIntProperty("last_lir_id", LifetimePosition::FromInstructionIndex( |
599 last_index).Value()); | 599 last_index).Value()); |
600 } | 600 } |
601 | 601 |
602 { | 602 { |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
647 os_ << " <|@\n"; | 647 os_ << " <|@\n"; |
648 } | 648 } |
649 | 649 |
650 BasicBlock::Control control = current->control(); | 650 BasicBlock::Control control = current->control(); |
651 if (control != BasicBlock::kNone) { | 651 if (control != BasicBlock::kNone) { |
652 PrintIndent(); | 652 PrintIndent(); |
653 os_ << "0 0 "; | 653 os_ << "0 0 "; |
654 if (current->control_input() != NULL) { | 654 if (current->control_input() != NULL) { |
655 PrintNode(current->control_input()); | 655 PrintNode(current->control_input()); |
656 } else { | 656 } else { |
657 os_ << -1 - current->id().ToInt() << " Goto"; | 657 os_ << -1 - current->rpo_number() << " Goto"; |
658 } | 658 } |
659 os_ << " ->"; | 659 os_ << " ->"; |
660 for (BasicBlock* successor : current->successors()) { | 660 for (BasicBlock* successor : current->successors()) { |
661 os_ << " B" << successor->id(); | 661 os_ << " B" << successor->rpo_number(); |
662 } | 662 } |
663 if (FLAG_trace_turbo_types && current->control_input() != NULL) { | 663 if (FLAG_trace_turbo_types && current->control_input() != NULL) { |
664 os_ << " "; | 664 os_ << " "; |
665 PrintType(current->control_input()); | 665 PrintType(current->control_input()); |
666 } | 666 } |
667 os_ << " <|@\n"; | 667 os_ << " <|@\n"; |
668 } | 668 } |
669 } | 669 } |
670 | 670 |
671 if (instructions != NULL) { | 671 if (instructions != NULL) { |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
815 os << "#" << SafeId(i) << ":" << SafeMnemonic(i); | 815 os << "#" << SafeId(i) << ":" << SafeMnemonic(i); |
816 } | 816 } |
817 os << ")" << std::endl; | 817 os << ")" << std::endl; |
818 } | 818 } |
819 } | 819 } |
820 return os; | 820 return os; |
821 } | 821 } |
822 } | 822 } |
823 } | 823 } |
824 } // namespace v8::internal::compiler | 824 } // namespace v8::internal::compiler |
OLD | NEW |