diff options
Diffstat (limited to 'deps/v8/src/compiler/move-optimizer.cc')
-rw-r--r-- | deps/v8/src/compiler/move-optimizer.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/deps/v8/src/compiler/move-optimizer.cc b/deps/v8/src/compiler/move-optimizer.cc index b869185e60..7c2bbe06b8 100644 --- a/deps/v8/src/compiler/move-optimizer.cc +++ b/deps/v8/src/compiler/move-optimizer.cc @@ -59,6 +59,17 @@ void MoveOptimizer::Run() { } for (auto block : code()->instruction_blocks()) { if (block->PredecessorCount() <= 1) continue; + bool has_only_deferred = true; + for (RpoNumber pred_id : block->predecessors()) { + if (!code()->InstructionBlockAt(pred_id)->IsDeferred()) { + has_only_deferred = false; + break; + } + } + // This would pull down common moves. If the moves occur in deferred blocks, + // and the closest common successor is not deferred, we lose the + // optimization of just spilling/filling in deferred blocks. + if (has_only_deferred) continue; OptimizeMerge(block); } for (auto gap : to_finalize_) { |