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

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

Issue 1060373006: [turbofan] Get rid of SourcePositionInstruction. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 8 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/instruction.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 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 Register reg = 179 Register reg =
180 Register::FromAllocationIndex(RegisterOperand::cast(operand).index()); 180 Register::FromAllocationIndex(RegisterOperand::cast(operand).index());
181 safepoint.DefinePointerRegister(reg, zone()); 181 safepoint.DefinePointerRegister(reg, zone());
182 } 182 }
183 } 183 }
184 } 184 }
185 185
186 186
187 void CodeGenerator::AssembleInstruction(Instruction* instr) { 187 void CodeGenerator::AssembleInstruction(Instruction* instr) {
188 AssembleGaps(instr); 188 AssembleGaps(instr);
189 if (instr->IsSourcePosition()) { 189 AssembleSourcePosition(instr);
190 AssembleSourcePosition(SourcePositionInstruction::cast(instr)); 190 // Assemble architecture-specific code for the instruction.
191 } else { 191 AssembleArchInstruction(instr);
192 // Assemble architecture-specific code for the instruction.
193 AssembleArchInstruction(instr);
194 192
195 FlagsMode mode = FlagsModeField::decode(instr->opcode()); 193 FlagsMode mode = FlagsModeField::decode(instr->opcode());
196 FlagsCondition condition = FlagsConditionField::decode(instr->opcode()); 194 FlagsCondition condition = FlagsConditionField::decode(instr->opcode());
197 if (mode == kFlags_branch) { 195 if (mode == kFlags_branch) {
198 // Assemble a branch after this instruction. 196 // Assemble a branch after this instruction.
199 InstructionOperandConverter i(this, instr); 197 InstructionOperandConverter i(this, instr);
200 RpoNumber true_rpo = i.InputRpo(instr->InputCount() - 2); 198 RpoNumber true_rpo = i.InputRpo(instr->InputCount() - 2);
201 RpoNumber false_rpo = i.InputRpo(instr->InputCount() - 1); 199 RpoNumber false_rpo = i.InputRpo(instr->InputCount() - 1);
202 200
203 if (true_rpo == false_rpo) { 201 if (true_rpo == false_rpo) {
204 // redundant branch. 202 // redundant branch.
205 if (!IsNextInAssemblyOrder(true_rpo)) { 203 if (!IsNextInAssemblyOrder(true_rpo)) {
206 AssembleArchJump(true_rpo); 204 AssembleArchJump(true_rpo);
207 }
208 return;
209 } 205 }
210 if (IsNextInAssemblyOrder(true_rpo)) { 206 return;
211 // true block is next, can fall through if condition negated.
212 std::swap(true_rpo, false_rpo);
213 condition = NegateFlagsCondition(condition);
214 }
215 BranchInfo branch;
216 branch.condition = condition;
217 branch.true_label = GetLabel(true_rpo);
218 branch.false_label = GetLabel(false_rpo);
219 branch.fallthru = IsNextInAssemblyOrder(false_rpo);
220 // Assemble architecture-specific branch.
221 AssembleArchBranch(instr, &branch);
222 } else if (mode == kFlags_set) {
223 // Assemble a boolean materialization after this instruction.
224 AssembleArchBoolean(instr, condition);
225 } 207 }
208 if (IsNextInAssemblyOrder(true_rpo)) {
209 // true block is next, can fall through if condition negated.
210 std::swap(true_rpo, false_rpo);
211 condition = NegateFlagsCondition(condition);
212 }
213 BranchInfo branch;
214 branch.condition = condition;
215 branch.true_label = GetLabel(true_rpo);
216 branch.false_label = GetLabel(false_rpo);
217 branch.fallthru = IsNextInAssemblyOrder(false_rpo);
218 // Assemble architecture-specific branch.
219 AssembleArchBranch(instr, &branch);
220 } else if (mode == kFlags_set) {
221 // Assemble a boolean materialization after this instruction.
222 AssembleArchBoolean(instr, condition);
226 } 223 }
227 } 224 }
228 225
229 226
230 void CodeGenerator::AssembleSourcePosition(SourcePositionInstruction* instr) { 227 void CodeGenerator::AssembleSourcePosition(Instruction* instr) {
231 SourcePosition source_position = instr->source_position(); 228 SourcePosition source_position;
229 if (!code()->GetSourcePosition(instr, &source_position)) return;
232 if (source_position == current_source_position_) return; 230 if (source_position == current_source_position_) return;
233 DCHECK(!source_position.IsInvalid()); 231 DCHECK(!source_position.IsInvalid());
234 if (!source_position.IsUnknown()) { 232 current_source_position_ = source_position;
235 int code_pos = source_position.raw(); 233 if (source_position.IsUnknown()) return;
236 masm()->positions_recorder()->RecordPosition(source_position.raw()); 234 int code_pos = source_position.raw();
237 masm()->positions_recorder()->WriteRecordedPositions(); 235 masm()->positions_recorder()->RecordPosition(source_position.raw());
238 if (FLAG_code_comments) { 236 masm()->positions_recorder()->WriteRecordedPositions();
239 Vector<char> buffer = Vector<char>::New(256); 237 if (FLAG_code_comments) {
240 CompilationInfo* info = this->info(); 238 Vector<char> buffer = Vector<char>::New(256);
241 int ln = Script::GetLineNumber(info->script(), code_pos); 239 CompilationInfo* info = this->info();
242 int cn = Script::GetColumnNumber(info->script(), code_pos); 240 int ln = Script::GetLineNumber(info->script(), code_pos);
243 if (info->script()->name()->IsString()) { 241 int cn = Script::GetColumnNumber(info->script(), code_pos);
244 Handle<String> file(String::cast(info->script()->name())); 242 if (info->script()->name()->IsString()) {
245 base::OS::SNPrintF(buffer.start(), buffer.length(), "-- %s:%d:%d --", 243 Handle<String> file(String::cast(info->script()->name()));
246 file->ToCString().get(), ln, cn); 244 base::OS::SNPrintF(buffer.start(), buffer.length(), "-- %s:%d:%d --",
247 } else { 245 file->ToCString().get(), ln, cn);
248 base::OS::SNPrintF(buffer.start(), buffer.length(), 246 } else {
249 "-- <unknown>:%d:%d --", ln, cn); 247 base::OS::SNPrintF(buffer.start(), buffer.length(),
250 } 248 "-- <unknown>:%d:%d --", ln, cn);
251 masm()->RecordComment(buffer.start());
252 } 249 }
250 masm()->RecordComment(buffer.start());
253 } 251 }
254 current_source_position_ = source_position;
255 } 252 }
256 253
257 254
258 void CodeGenerator::AssembleGaps(Instruction* instr) { 255 void CodeGenerator::AssembleGaps(Instruction* instr) {
259 for (int i = Instruction::FIRST_GAP_POSITION; 256 for (int i = Instruction::FIRST_GAP_POSITION;
260 i <= Instruction::LAST_GAP_POSITION; i++) { 257 i <= Instruction::LAST_GAP_POSITION; i++) {
261 Instruction::GapPosition inner_pos = 258 Instruction::GapPosition inner_pos =
262 static_cast<Instruction::GapPosition>(i); 259 static_cast<Instruction::GapPosition>(i);
263 ParallelMove* move = instr->GetParallelMove(inner_pos); 260 ParallelMove* move = instr->GetParallelMove(inner_pos);
264 if (move != nullptr) resolver()->Resolve(move); 261 if (move != nullptr) resolver()->Resolve(move);
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 : masm_(gen->masm()), next_(gen->ools_) { 636 : masm_(gen->masm()), next_(gen->ools_) {
640 gen->ools_ = this; 637 gen->ools_ = this;
641 } 638 }
642 639
643 640
644 OutOfLineCode::~OutOfLineCode() {} 641 OutOfLineCode::~OutOfLineCode() {}
645 642
646 } // namespace compiler 643 } // namespace compiler
647 } // namespace internal 644 } // namespace internal
648 } // namespace v8 645 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/code-generator.h ('k') | src/compiler/instruction.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698