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

Side by Side Diff: src/compiler/code-generator.cc

Issue 951553005: [turbofan] remove dependence of InstructionBlock on BasicBlock (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 9 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/code-generator.h ('k') | src/compiler/code-generator-impl.h » ('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/code-generator.h" 5 #include "src/compiler/code-generator.h"
6 6
7 #include "src/compiler/code-generator-impl.h" 7 #include "src/compiler/code-generator-impl.h"
8 #include "src/compiler/linkage.h" 8 #include "src/compiler/linkage.h"
9 #include "src/compiler/pipeline.h" 9 #include "src/compiler/pipeline.h"
10 10
(...skipping 19 matching lines...) Expand all
30 }; 30 };
31 31
32 32
33 CodeGenerator::CodeGenerator(Frame* frame, Linkage* linkage, 33 CodeGenerator::CodeGenerator(Frame* frame, Linkage* linkage,
34 InstructionSequence* code, CompilationInfo* info) 34 InstructionSequence* code, CompilationInfo* info)
35 : frame_(frame), 35 : frame_(frame),
36 linkage_(linkage), 36 linkage_(linkage),
37 code_(code), 37 code_(code),
38 info_(info), 38 info_(info),
39 labels_(zone()->NewArray<Label>(code->InstructionBlockCount())), 39 labels_(zone()->NewArray<Label>(code->InstructionBlockCount())),
40 current_block_(BasicBlock::RpoNumber::Invalid()), 40 current_block_(RpoNumber::Invalid()),
41 current_source_position_(SourcePosition::Invalid()), 41 current_source_position_(SourcePosition::Invalid()),
42 masm_(info->isolate(), NULL, 0), 42 masm_(info->isolate(), NULL, 0),
43 resolver_(this), 43 resolver_(this),
44 safepoints_(code->zone()), 44 safepoints_(code->zone()),
45 handlers_(code->zone()), 45 handlers_(code->zone()),
46 deoptimization_states_(code->zone()), 46 deoptimization_states_(code->zone()),
47 deoptimization_literals_(code->zone()), 47 deoptimization_literals_(code->zone()),
48 translations_(code->zone()), 48 translations_(code->zone()),
49 last_lazy_deopt_pc_(0), 49 last_lazy_deopt_pc_(0),
50 jump_tables_(nullptr), 50 jump_tables_(nullptr),
(...skipping 27 matching lines...) Expand all
78 if (block->IsDeferred() == (deferred == 0)) { 78 if (block->IsDeferred() == (deferred == 0)) {
79 continue; 79 continue;
80 } 80 }
81 // Align loop headers on 16-byte boundaries. 81 // Align loop headers on 16-byte boundaries.
82 if (block->IsLoopHeader()) masm()->Align(16); 82 if (block->IsLoopHeader()) masm()->Align(16);
83 // Bind a label for a block. 83 // Bind a label for a block.
84 current_block_ = block->rpo_number(); 84 current_block_ = block->rpo_number();
85 if (FLAG_code_comments) { 85 if (FLAG_code_comments) {
86 // TODO(titzer): these code comments are a giant memory leak. 86 // TODO(titzer): these code comments are a giant memory leak.
87 Vector<char> buffer = Vector<char>::New(32); 87 Vector<char> buffer = Vector<char>::New(32);
88 SNPrintF(buffer, "-- B%d start --", block->id().ToInt()); 88 SNPrintF(buffer, "-- B%d start --", block->rpo_number().ToInt());
89 masm()->RecordComment(buffer.start()); 89 masm()->RecordComment(buffer.start());
90 } 90 }
91 masm()->bind(GetLabel(current_block_)); 91 masm()->bind(GetLabel(current_block_));
92 for (int i = block->code_start(); i < block->code_end(); ++i) { 92 for (int i = block->code_start(); i < block->code_end(); ++i) {
93 AssembleInstruction(code()->InstructionAt(i)); 93 AssembleInstruction(code()->InstructionAt(i));
94 } 94 }
95 } 95 }
96 } 96 }
97 97
98 // Assemble all out-of-line code. 98 // Assemble all out-of-line code.
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 } 152 }
153 153
154 // Emit a code line info recording stop event. 154 // Emit a code line info recording stop event.
155 void* line_info = recorder->DetachJITHandlerData(); 155 void* line_info = recorder->DetachJITHandlerData();
156 LOG_CODE_EVENT(isolate(), CodeEndLinePosInfoRecordEvent(*result, line_info)); 156 LOG_CODE_EVENT(isolate(), CodeEndLinePosInfoRecordEvent(*result, line_info));
157 157
158 return result; 158 return result;
159 } 159 }
160 160
161 161
162 bool CodeGenerator::IsNextInAssemblyOrder(BasicBlock::RpoNumber block) const { 162 bool CodeGenerator::IsNextInAssemblyOrder(RpoNumber block) const {
163 return code()->InstructionBlockAt(current_block_)->ao_number().IsNext( 163 return code()->InstructionBlockAt(current_block_)->ao_number().IsNext(
164 code()->InstructionBlockAt(block)->ao_number()); 164 code()->InstructionBlockAt(block)->ao_number());
165 } 165 }
166 166
167 167
168 void CodeGenerator::RecordSafepoint(PointerMap* pointers, Safepoint::Kind kind, 168 void CodeGenerator::RecordSafepoint(PointerMap* pointers, Safepoint::Kind kind,
169 int arguments, 169 int arguments,
170 Safepoint::DeoptMode deopt_mode) { 170 Safepoint::DeoptMode deopt_mode) {
171 const ZoneList<InstructionOperand*>* operands = 171 const ZoneList<InstructionOperand*>* operands =
172 pointers->GetNormalizedOperands(); 172 pointers->GetNormalizedOperands();
(...skipping 19 matching lines...) Expand all
192 AssembleSourcePosition(SourcePositionInstruction::cast(instr)); 192 AssembleSourcePosition(SourcePositionInstruction::cast(instr));
193 } else { 193 } else {
194 // Assemble architecture-specific code for the instruction. 194 // Assemble architecture-specific code for the instruction.
195 AssembleArchInstruction(instr); 195 AssembleArchInstruction(instr);
196 196
197 FlagsMode mode = FlagsModeField::decode(instr->opcode()); 197 FlagsMode mode = FlagsModeField::decode(instr->opcode());
198 FlagsCondition condition = FlagsConditionField::decode(instr->opcode()); 198 FlagsCondition condition = FlagsConditionField::decode(instr->opcode());
199 if (mode == kFlags_branch) { 199 if (mode == kFlags_branch) {
200 // Assemble a branch after this instruction. 200 // Assemble a branch after this instruction.
201 InstructionOperandConverter i(this, instr); 201 InstructionOperandConverter i(this, instr);
202 BasicBlock::RpoNumber true_rpo = i.InputRpo(instr->InputCount() - 2); 202 RpoNumber true_rpo = i.InputRpo(instr->InputCount() - 2);
203 BasicBlock::RpoNumber false_rpo = i.InputRpo(instr->InputCount() - 1); 203 RpoNumber false_rpo = i.InputRpo(instr->InputCount() - 1);
204 204
205 if (true_rpo == false_rpo) { 205 if (true_rpo == false_rpo) {
206 // redundant branch. 206 // redundant branch.
207 if (!IsNextInAssemblyOrder(true_rpo)) { 207 if (!IsNextInAssemblyOrder(true_rpo)) {
208 AssembleArchJump(true_rpo); 208 AssembleArchJump(true_rpo);
209 } 209 }
210 return; 210 return;
211 } 211 }
212 if (IsNextInAssemblyOrder(true_rpo)) { 212 if (IsNextInAssemblyOrder(true_rpo)) {
213 // true block is next, can fall through if condition negated. 213 // true block is next, can fall through if condition negated.
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 CallDescriptor::Flags flags(MiscField::decode(instr->opcode())); 336 CallDescriptor::Flags flags(MiscField::decode(instr->opcode()));
337 337
338 bool needs_frame_state = (flags & CallDescriptor::kNeedsFrameState); 338 bool needs_frame_state = (flags & CallDescriptor::kNeedsFrameState);
339 339
340 RecordSafepoint( 340 RecordSafepoint(
341 instr->pointer_map(), Safepoint::kSimple, 0, 341 instr->pointer_map(), Safepoint::kSimple, 0,
342 needs_frame_state ? Safepoint::kLazyDeopt : Safepoint::kNoLazyDeopt); 342 needs_frame_state ? Safepoint::kLazyDeopt : Safepoint::kNoLazyDeopt);
343 343
344 if (flags & CallDescriptor::kHasExceptionHandler) { 344 if (flags & CallDescriptor::kHasExceptionHandler) {
345 InstructionOperandConverter i(this, instr); 345 InstructionOperandConverter i(this, instr);
346 BasicBlock::RpoNumber handler_rpo = 346 RpoNumber handler_rpo =
347 i.InputRpo(static_cast<int>(instr->InputCount()) - 1); 347 i.InputRpo(static_cast<int>(instr->InputCount()) - 1);
348 handlers_.push_back({GetLabel(handler_rpo), masm()->pc_offset()}); 348 handlers_.push_back({GetLabel(handler_rpo), masm()->pc_offset()});
349 } 349 }
350 350
351 if (flags & CallDescriptor::kNeedsNopAfterCall) { 351 if (flags & CallDescriptor::kNeedsNopAfterCall) {
352 AddNopForSmiCodeInlining(); 352 AddNopForSmiCodeInlining();
353 } 353 }
354 354
355 if (needs_frame_state) { 355 if (needs_frame_state) {
356 MarkLazyDeoptSite(); 356 MarkLazyDeoptSite();
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 UNIMPLEMENTED(); 585 UNIMPLEMENTED();
586 } 586 }
587 587
588 588
589 void CodeGenerator::AssembleArchBoolean(Instruction* instr, 589 void CodeGenerator::AssembleArchBoolean(Instruction* instr,
590 FlagsCondition condition) { 590 FlagsCondition condition) {
591 UNIMPLEMENTED(); 591 UNIMPLEMENTED();
592 } 592 }
593 593
594 594
595 void CodeGenerator::AssembleArchJump(BasicBlock::RpoNumber target) { 595 void CodeGenerator::AssembleArchJump(RpoNumber target) { UNIMPLEMENTED(); }
596 UNIMPLEMENTED();
597 }
598 596
599 597
600 void CodeGenerator::AssembleDeoptimizerCall(int deoptimization_id) { 598 void CodeGenerator::AssembleDeoptimizerCall(int deoptimization_id) {
601 UNIMPLEMENTED(); 599 UNIMPLEMENTED();
602 } 600 }
603 601
604 602
605 void CodeGenerator::AssemblePrologue() { UNIMPLEMENTED(); } 603 void CodeGenerator::AssemblePrologue() { UNIMPLEMENTED(); }
606 604
607 605
(...skipping 26 matching lines...) Expand all
634 : masm_(gen->masm()), next_(gen->ools_) { 632 : masm_(gen->masm()), next_(gen->ools_) {
635 gen->ools_ = this; 633 gen->ools_ = this;
636 } 634 }
637 635
638 636
639 OutOfLineCode::~OutOfLineCode() {} 637 OutOfLineCode::~OutOfLineCode() {}
640 638
641 } // namespace compiler 639 } // namespace compiler
642 } // namespace internal 640 } // namespace internal
643 } // namespace v8 641 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/code-generator.h ('k') | src/compiler/code-generator-impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698