| Index: src/compiler/pipeline.cc
|
| diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc
|
| index 3a0d27b0593f51ad1306350ac95b4cfb25da4093..2ab614e3c0df05ab8e4bf32cecf12af4954f5f78 100644
|
| --- a/src/compiler/pipeline.cc
|
| +++ b/src/compiler/pipeline.cc
|
| @@ -21,6 +21,7 @@
|
| #include "src/compiler/js-generic-lowering.h"
|
| #include "src/compiler/js-inlining.h"
|
| #include "src/compiler/js-typed-lowering.h"
|
| +#include "src/compiler/jump-threading.h"
|
| #include "src/compiler/machine-operator-reducer.h"
|
| #include "src/compiler/pipeline-statistics.h"
|
| #include "src/compiler/register-allocator.h"
|
| @@ -578,6 +579,18 @@ struct ResolveControlFlowPhase {
|
| };
|
|
|
|
|
| +struct JumpThreadingPhase {
|
| + static const char* phase_name() { return "jump threading"; }
|
| +
|
| + void Run(PipelineData* data, Zone* temp_zone) {
|
| + ZoneVector<BasicBlock::RpoNumber> result(temp_zone);
|
| + if (JumpThreading::ComputeForwarding(temp_zone, result, data->sequence())) {
|
| + JumpThreading::ApplyForwarding(result, data->sequence());
|
| + }
|
| + }
|
| +};
|
| +
|
| +
|
| struct GenerateCodePhase {
|
| static const char* phase_name() { return "generate code"; }
|
|
|
| @@ -902,7 +915,12 @@ void Pipeline::GenerateCode(Linkage* linkage) {
|
|
|
| BeginPhaseKind("code generation");
|
|
|
| - // Generate native sequence.
|
| + // Optimimize jumps.
|
| + if (FLAG_turbo_jt) {
|
| + Run<JumpThreadingPhase>();
|
| + }
|
| +
|
| + // Generate final machine code.
|
| Run<GenerateCodePhase>(linkage);
|
|
|
| if (profiler_data != NULL) {
|
|
|