| Index: src/compiler/move-optimizer.cc
|
| diff --git a/src/compiler/move-optimizer.cc b/src/compiler/move-optimizer.cc
|
| index b869185e60ed2aed9dbc939878d1874e92e4eda6..7c2bbe06b874005e74b3260fbcb8275e28df9978 100644
|
| --- a/src/compiler/move-optimizer.cc
|
| +++ b/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_) {
|
|
|