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

Side by Side Diff: src/compiler/pipeline.cc

Issue 1642823002: [turbofan] Jump threading awareness of frame elision. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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/pipeline.h" 5 #include "src/compiler/pipeline.h"
6 6
7 #include <fstream> // NOLINT(readability/streams) 7 #include <fstream> // NOLINT(readability/streams)
8 #include <sstream> 8 #include <sstream>
9 9
10 #include "src/base/adapters.h" 10 #include "src/base/adapters.h"
(...skipping 964 matching lines...) Expand 10 before | Expand all | Expand 10 after
975 975
976 void Run(PipelineData* data, Zone* temp_zone) { 976 void Run(PipelineData* data, Zone* temp_zone) {
977 FrameElider(data->sequence()).Run(); 977 FrameElider(data->sequence()).Run();
978 } 978 }
979 }; 979 };
980 980
981 981
982 struct JumpThreadingPhase { 982 struct JumpThreadingPhase {
983 static const char* phase_name() { return "jump threading"; } 983 static const char* phase_name() { return "jump threading"; }
984 984
985 void Run(PipelineData* data, Zone* temp_zone) { 985 void Run(PipelineData* data, Zone* temp_zone, bool frame_at_start) {
986 ZoneVector<RpoNumber> result(temp_zone); 986 ZoneVector<RpoNumber> result(temp_zone);
987 if (JumpThreading::ComputeForwarding(temp_zone, result, data->sequence())) { 987 if (JumpThreading::ComputeForwarding(temp_zone, result, data->sequence(),
988 frame_at_start)) {
988 JumpThreading::ApplyForwarding(result, data->sequence()); 989 JumpThreading::ApplyForwarding(result, data->sequence());
989 } 990 }
990 } 991 }
991 }; 992 };
992 993
993 994
994 struct GenerateCodePhase { 995 struct GenerateCodePhase {
995 static const char* phase_name() { return "generate code"; } 996 static const char* phase_name() { return "generate code"; }
996 997
997 void Run(PipelineData* data, Zone* temp_zone, Linkage* linkage) { 998 void Run(PipelineData* data, Zone* temp_zone, Linkage* linkage) {
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
1327 // Allocate registers. 1328 // Allocate registers.
1328 AllocateRegisters( 1329 AllocateRegisters(
1329 RegisterConfiguration::ArchDefault(RegisterConfiguration::TURBOFAN), 1330 RegisterConfiguration::ArchDefault(RegisterConfiguration::TURBOFAN),
1330 call_descriptor, run_verifier); 1331 call_descriptor, run_verifier);
1331 if (data->compilation_failed()) { 1332 if (data->compilation_failed()) {
1332 info()->AbortOptimization(kNotEnoughVirtualRegistersRegalloc); 1333 info()->AbortOptimization(kNotEnoughVirtualRegistersRegalloc);
1333 return Handle<Code>(); 1334 return Handle<Code>();
1334 } 1335 }
1335 1336
1336 BeginPhaseKind("code generation"); 1337 BeginPhaseKind("code generation");
1337 1338 // TODO(mtrofin): move this off to the register allocator.
Jarin 2016/01/28 05:26:58 Yes, please do.
1339 bool generate_frame_at_start =
1340 !FLAG_turbo_frame_elision || !data_->info()->IsStub() ||
1341 !data_->frame()->needs_frame() ||
1342 data_->sequence()->instruction_blocks().front()->needs_frame() ||
1343 linkage.GetIncomingDescriptor()->CalleeSavedFPRegisters() != 0 ||
1344 linkage.GetIncomingDescriptor()->CalleeSavedRegisters() != 0;
1338 // Optimimize jumps. 1345 // Optimimize jumps.
1339 if (FLAG_turbo_jt) { 1346 if (FLAG_turbo_jt) {
1340 Run<JumpThreadingPhase>(); 1347 Run<JumpThreadingPhase>(generate_frame_at_start);
1341 } 1348 }
1342 1349
1343 // Generate final machine code. 1350 // Generate final machine code.
1344 Run<GenerateCodePhase>(&linkage); 1351 Run<GenerateCodePhase>(&linkage);
1345 1352
1346 Handle<Code> code = data->code(); 1353 Handle<Code> code = data->code();
1347 if (profiler_data != nullptr) { 1354 if (profiler_data != nullptr) {
1348 #if ENABLE_DISASSEMBLER 1355 #if ENABLE_DISASSEMBLER
1349 std::ostringstream os; 1356 std::ostringstream os;
1350 code->Disassemble(nullptr, os); 1357 code->Disassemble(nullptr, os);
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1473 tcf << AsC1VRegisterAllocationData("CodeGen", 1480 tcf << AsC1VRegisterAllocationData("CodeGen",
1474 data->register_allocation_data()); 1481 data->register_allocation_data());
1475 } 1482 }
1476 1483
1477 data->DeleteRegisterAllocationZone(); 1484 data->DeleteRegisterAllocationZone();
1478 } 1485 }
1479 1486
1480 } // namespace compiler 1487 } // namespace compiler
1481 } // namespace internal 1488 } // namespace internal
1482 } // namespace v8 1489 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698