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

Side by Side Diff: src/compiler/graph-visualizer.cc

Issue 1578723002: [turbofan] Build s/NULL/nullptr/g and CHECK(x != nullptr) to CHECK_NOT_NULL(x). (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 11 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
« no previous file with comments | « src/compiler/graph-visualizer.h ('k') | src/compiler/ia32/code-generator-ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 23 matching lines...) Expand all
34 SNPrintF(filename, "turbo-%s", debug_name.get()); 34 SNPrintF(filename, "turbo-%s", debug_name.get());
35 } else if (info->has_shared_info()) { 35 } else if (info->has_shared_info()) {
36 SNPrintF(filename, "turbo-%p", static_cast<void*>(info)); 36 SNPrintF(filename, "turbo-%p", static_cast<void*>(info));
37 } else { 37 } else {
38 SNPrintF(filename, "turbo-none-%s", phase); 38 SNPrintF(filename, "turbo-none-%s", phase);
39 } 39 }
40 std::replace(filename.start(), filename.start() + filename.length(), ' ', 40 std::replace(filename.start(), filename.start() + filename.length(), ' ',
41 '_'); 41 '_');
42 42
43 EmbeddedVector<char, 256> full_filename; 43 EmbeddedVector<char, 256> full_filename;
44 if (phase == NULL) { 44 if (phase == nullptr) {
45 SNPrintF(full_filename, "%s.%s", filename.start(), suffix); 45 SNPrintF(full_filename, "%s.%s", filename.start(), suffix);
46 } else { 46 } else {
47 SNPrintF(full_filename, "%s-%s.%s", filename.start(), phase, suffix); 47 SNPrintF(full_filename, "%s-%s.%s", filename.start(), phase, suffix);
48 } 48 }
49 return base::OS::FOpen(full_filename.start(), mode); 49 return base::OS::FOpen(full_filename.start(), mode);
50 } 50 }
51 51
52 52
53 static int SafeId(Node* node) { return node == NULL ? -1 : node->id(); } 53 static int SafeId(Node* node) { return node == nullptr ? -1 : node->id(); }
54 static const char* SafeMnemonic(Node* node) { 54 static const char* SafeMnemonic(Node* node) {
55 return node == NULL ? "null" : node->op()->mnemonic(); 55 return node == nullptr ? "null" : node->op()->mnemonic();
56 } 56 }
57 57
58 #define DEAD_COLOR "#999999" 58 #define DEAD_COLOR "#999999"
59 59
60 class Escaped { 60 class Escaped {
61 public: 61 public:
62 explicit Escaped(const std::ostringstream& os, 62 explicit Escaped(const std::ostringstream& os,
63 const char* escaped_chars = "<>|{}") 63 const char* escaped_chars = "<>|{}")
64 : str_(os.str()), escaped_chars_(escaped_chars) {} 64 : str_(os.str()), escaped_chars_(escaped_chars) {}
65 65
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 : os_(os), all_(zone, graph), first_edge_(true) {} 151 : os_(os), all_(zone, graph), first_edge_(true) {}
152 152
153 void Print() { 153 void Print() {
154 for (Node* const node : all_.live) PrintEdges(node); 154 for (Node* const node : all_.live) PrintEdges(node);
155 os_ << "\n"; 155 os_ << "\n";
156 } 156 }
157 157
158 void PrintEdges(Node* node) { 158 void PrintEdges(Node* node) {
159 for (int i = 0; i < node->InputCount(); i++) { 159 for (int i = 0; i < node->InputCount(); i++) {
160 Node* input = node->InputAt(i); 160 Node* input = node->InputAt(i);
161 if (input == NULL) continue; 161 if (input == nullptr) continue;
162 PrintEdge(node, i, input); 162 PrintEdge(node, i, input);
163 } 163 }
164 } 164 }
165 165
166 void PrintEdge(Node* from, int index, Node* to) { 166 void PrintEdge(Node* from, int index, Node* to) {
167 if (first_edge_) { 167 if (first_edge_) {
168 first_edge_ = false; 168 first_edge_ = false;
169 } else { 169 } else {
170 os_ << ",\n"; 170 os_ << ",\n";
171 } 171 }
172 const char* edge_type = NULL; 172 const char* edge_type = nullptr;
173 if (index < NodeProperties::FirstValueIndex(from)) { 173 if (index < NodeProperties::FirstValueIndex(from)) {
174 edge_type = "unknown"; 174 edge_type = "unknown";
175 } else if (index < NodeProperties::FirstContextIndex(from)) { 175 } else if (index < NodeProperties::FirstContextIndex(from)) {
176 edge_type = "value"; 176 edge_type = "value";
177 } else if (index < NodeProperties::FirstFrameStateIndex(from)) { 177 } else if (index < NodeProperties::FirstFrameStateIndex(from)) {
178 edge_type = "context"; 178 edge_type = "context";
179 } else if (index < NodeProperties::FirstEffectIndex(from)) { 179 } else if (index < NodeProperties::FirstEffectIndex(from)) {
180 edge_type = "frame-state"; 180 edge_type = "frame-state";
181 } else if (index < NodeProperties::FirstControlIndex(from)) { 181 } else if (index < NodeProperties::FirstControlIndex(from)) {
182 edge_type = "effect"; 182 edge_type = "effect";
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 os_ << " \"B" << successor->rpo_number() << "\""; 390 os_ << " \"B" << successor->rpo_number() << "\"";
391 } 391 }
392 os_ << "\n"; 392 os_ << "\n";
393 393
394 PrintIndent(); 394 PrintIndent();
395 os_ << "xhandlers\n"; 395 os_ << "xhandlers\n";
396 396
397 PrintIndent(); 397 PrintIndent();
398 os_ << "flags\n"; 398 os_ << "flags\n";
399 399
400 if (current->dominator() != NULL) { 400 if (current->dominator() != nullptr) {
401 PrintBlockProperty("dominator", current->dominator()->rpo_number()); 401 PrintBlockProperty("dominator", current->dominator()->rpo_number());
402 } 402 }
403 403
404 PrintIntProperty("loop_depth", current->loop_depth()); 404 PrintIntProperty("loop_depth", current->loop_depth());
405 405
406 const InstructionBlock* instruction_block = 406 const InstructionBlock* instruction_block =
407 instructions->InstructionBlockAt( 407 instructions->InstructionBlockAt(
408 RpoNumber::FromInt(current->rpo_number())); 408 RpoNumber::FromInt(current->rpo_number()));
409 if (instruction_block->code_start() >= 0) { 409 if (instruction_block->code_start() >= 0) {
410 int first_index = instruction_block->first_instruction_index(); 410 int first_index = instruction_block->first_instruction_index();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 Node* node = *i; 448 Node* node = *i;
449 if (node->opcode() == IrOpcode::kPhi) continue; 449 if (node->opcode() == IrOpcode::kPhi) continue;
450 int uses = node->UseCount(); 450 int uses = node->UseCount();
451 PrintIndent(); 451 PrintIndent();
452 os_ << "0 " << uses << " "; 452 os_ << "0 " << uses << " ";
453 PrintNode(node); 453 PrintNode(node);
454 if (FLAG_trace_turbo_types) { 454 if (FLAG_trace_turbo_types) {
455 os_ << " "; 455 os_ << " ";
456 PrintType(node); 456 PrintType(node);
457 } 457 }
458 if (positions != NULL) { 458 if (positions != nullptr) {
459 SourcePosition position = positions->GetSourcePosition(node); 459 SourcePosition position = positions->GetSourcePosition(node);
460 if (position.IsKnown()) { 460 if (position.IsKnown()) {
461 os_ << " pos:" << position.raw(); 461 os_ << " pos:" << position.raw();
462 } 462 }
463 } 463 }
464 os_ << " <|@\n"; 464 os_ << " <|@\n";
465 } 465 }
466 466
467 BasicBlock::Control control = current->control(); 467 BasicBlock::Control control = current->control();
468 if (control != BasicBlock::kNone) { 468 if (control != BasicBlock::kNone) {
469 PrintIndent(); 469 PrintIndent();
470 os_ << "0 0 "; 470 os_ << "0 0 ";
471 if (current->control_input() != NULL) { 471 if (current->control_input() != nullptr) {
472 PrintNode(current->control_input()); 472 PrintNode(current->control_input());
473 } else { 473 } else {
474 os_ << -1 - current->rpo_number() << " Goto"; 474 os_ << -1 - current->rpo_number() << " Goto";
475 } 475 }
476 os_ << " ->"; 476 os_ << " ->";
477 for (BasicBlock* successor : current->successors()) { 477 for (BasicBlock* successor : current->successors()) {
478 os_ << " B" << successor->rpo_number(); 478 os_ << " B" << successor->rpo_number();
479 } 479 }
480 if (FLAG_trace_turbo_types && current->control_input() != NULL) { 480 if (FLAG_trace_turbo_types && current->control_input() != nullptr) {
481 os_ << " "; 481 os_ << " ";
482 PrintType(current->control_input()); 482 PrintType(current->control_input());
483 } 483 }
484 os_ << " <|@\n"; 484 os_ << " <|@\n";
485 } 485 }
486 } 486 }
487 487
488 if (instructions != NULL) { 488 if (instructions != nullptr) {
489 Tag LIR_tag(this, "LIR"); 489 Tag LIR_tag(this, "LIR");
490 for (int j = instruction_block->first_instruction_index(); 490 for (int j = instruction_block->first_instruction_index();
491 j <= instruction_block->last_instruction_index(); j++) { 491 j <= instruction_block->last_instruction_index(); j++) {
492 PrintIndent(); 492 PrintIndent();
493 PrintableInstruction printable = { 493 PrintableInstruction printable = {
494 RegisterConfiguration::ArchDefault(RegisterConfiguration::TURBOFAN), 494 RegisterConfiguration::ArchDefault(RegisterConfiguration::TURBOFAN),
495 instructions->InstructionAt(j)}; 495 instructions->InstructionAt(j)};
496 os_ << j << " " << printable << " <|@\n"; 496 os_ << j << " " << printable << " <|@\n";
497 } 497 }
498 } 498 }
(...skipping 25 matching lines...) Expand all
524 if (range == nullptr || range->IsEmpty()) return; 524 if (range == nullptr || range->IsEmpty()) return;
525 int vreg = range->vreg(); 525 int vreg = range->vreg();
526 for (LiveRange* child = range; child != nullptr; child = child->next()) { 526 for (LiveRange* child = range; child != nullptr; child = child->next()) {
527 PrintLiveRange(child, type, vreg); 527 PrintLiveRange(child, type, vreg);
528 } 528 }
529 } 529 }
530 530
531 531
532 void GraphC1Visualizer::PrintLiveRange(LiveRange* range, const char* type, 532 void GraphC1Visualizer::PrintLiveRange(LiveRange* range, const char* type,
533 int vreg) { 533 int vreg) {
534 if (range != NULL && !range->IsEmpty()) { 534 if (range != nullptr && !range->IsEmpty()) {
535 PrintIndent(); 535 PrintIndent();
536 os_ << vreg << ":" << range->relative_id() << " " << type; 536 os_ << vreg << ":" << range->relative_id() << " " << type;
537 if (range->HasRegisterAssigned()) { 537 if (range->HasRegisterAssigned()) {
538 AllocatedOperand op = AllocatedOperand::cast(range->GetAssignedOperand()); 538 AllocatedOperand op = AllocatedOperand::cast(range->GetAssignedOperand());
539 if (op.IsDoubleRegister()) { 539 if (op.IsDoubleRegister()) {
540 DoubleRegister assigned_reg = op.GetDoubleRegister(); 540 DoubleRegister assigned_reg = op.GetDoubleRegister();
541 os_ << " \"" << assigned_reg.ToString() << "\""; 541 os_ << " \"" << assigned_reg.ToString() << "\"";
542 } else { 542 } else {
543 DCHECK(op.IsRegister()); 543 DCHECK(op.IsRegister());
544 Register assigned_reg = op.GetRegister(); 544 Register assigned_reg = op.GetRegister();
(...skipping 19 matching lines...) Expand all
564 } 564 }
565 565
566 os_ << " " << vreg; 566 os_ << " " << vreg;
567 for (auto interval = range->first_interval(); interval != nullptr; 567 for (auto interval = range->first_interval(); interval != nullptr;
568 interval = interval->next()) { 568 interval = interval->next()) {
569 os_ << " [" << interval->start().value() << ", " 569 os_ << " [" << interval->start().value() << ", "
570 << interval->end().value() << "["; 570 << interval->end().value() << "[";
571 } 571 }
572 572
573 UsePosition* current_pos = range->first_pos(); 573 UsePosition* current_pos = range->first_pos();
574 while (current_pos != NULL) { 574 while (current_pos != nullptr) {
575 if (current_pos->RegisterIsBeneficial() || FLAG_trace_all_uses) { 575 if (current_pos->RegisterIsBeneficial() || FLAG_trace_all_uses) {
576 os_ << " " << current_pos->pos().value() << " M"; 576 os_ << " " << current_pos->pos().value() << " M";
577 } 577 }
578 current_pos = current_pos->next(); 578 current_pos = current_pos->next();
579 } 579 }
580 580
581 os_ << " \"\"\n"; 581 os_ << " \"\"\n";
582 } 582 }
583 } 583 }
584 584
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 os << "#" << SafeId(i) << ":" << SafeMnemonic(i); 637 os << "#" << SafeId(i) << ":" << SafeMnemonic(i);
638 } 638 }
639 os << ")" << std::endl; 639 os << ")" << std::endl;
640 } 640 }
641 } 641 }
642 return os; 642 return os;
643 } 643 }
644 } // namespace compiler 644 } // namespace compiler
645 } // namespace internal 645 } // namespace internal
646 } // namespace v8 646 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/graph-visualizer.h ('k') | src/compiler/ia32/code-generator-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698