| OLD | NEW |
| 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.h" | 5 #include "src/compiler.h" |
| 6 #include "src/compiler/all-nodes.h" | 6 #include "src/compiler/all-nodes.h" |
| 7 #include "src/compiler/common-operator.h" | 7 #include "src/compiler/common-operator.h" |
| 8 #include "src/compiler/control-reducer.h" | 8 #include "src/compiler/control-reducer.h" |
| 9 #include "src/compiler/frame.h" | 9 #include "src/compiler/frame.h" |
| 10 #include "src/compiler/graph.h" | 10 #include "src/compiler/graph.h" |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 CHECK(!osr_loop); // should be only one OSR loop. | 200 CHECK(!osr_loop); // should be only one OSR loop. |
| 201 osr_loop = use; // found the OSR loop. | 201 osr_loop = use; // found the OSR loop. |
| 202 } | 202 } |
| 203 } | 203 } |
| 204 | 204 |
| 205 CHECK(osr_loop); // Should have found the OSR loop. | 205 CHECK(osr_loop); // Should have found the OSR loop. |
| 206 | 206 |
| 207 // Analyze the graph to determine how deeply nested the OSR loop is. | 207 // Analyze the graph to determine how deeply nested the OSR loop is. |
| 208 LoopTree* loop_tree = LoopFinder::BuildLoopTree(graph, tmp_zone); | 208 LoopTree* loop_tree = LoopFinder::BuildLoopTree(graph, tmp_zone); |
| 209 | 209 |
| 210 Node* dead = graph->NewNode(common->Dead()); | 210 Node* dead = jsgraph->DeadControl(); |
| 211 LoopTree::Loop* loop = loop_tree->ContainingLoop(osr_loop); | 211 LoopTree::Loop* loop = loop_tree->ContainingLoop(osr_loop); |
| 212 if (loop->depth() > 0) { | 212 if (loop->depth() > 0) { |
| 213 PeelOuterLoopsForOsr(graph, common, tmp_zone, dead, loop_tree, loop, | 213 PeelOuterLoopsForOsr(graph, common, tmp_zone, dead, loop_tree, loop, |
| 214 osr_normal_entry, osr_loop_entry); | 214 osr_normal_entry, osr_loop_entry); |
| 215 } | 215 } |
| 216 | 216 |
| 217 // Replace the normal entry with {Dead} and the loop entry with {Start} | 217 // Replace the normal entry with {Dead} and the loop entry with {Start} |
| 218 // and run the control reducer to clean up the graph. | 218 // and run the control reducer to clean up the graph. |
| 219 osr_normal_entry->ReplaceUses(dead); | 219 osr_normal_entry->ReplaceUses(dead); |
| 220 osr_loop_entry->ReplaceUses(graph->start()); | 220 osr_loop_entry->ReplaceUses(graph->start()); |
| 221 ControlReducer::ReduceGraph(tmp_zone, jsgraph, common); | 221 ControlReducer::ReduceGraph(tmp_zone, jsgraph, common); |
| 222 | 222 |
| 223 return true; | 223 return true; |
| 224 } | 224 } |
| 225 | 225 |
| 226 | 226 |
| 227 void OsrHelper::SetupFrame(Frame* frame) { | 227 void OsrHelper::SetupFrame(Frame* frame) { |
| 228 // The optimized frame will subsume the unoptimized frame. Do so by reserving | 228 // The optimized frame will subsume the unoptimized frame. Do so by reserving |
| 229 // the first spill slots. | 229 // the first spill slots. |
| 230 frame->ReserveSpillSlots(UnoptimizedFrameSlots()); | 230 frame->ReserveSpillSlots(UnoptimizedFrameSlots()); |
| 231 // The frame needs to be adjusted by the number of unoptimized frame slots. | 231 // The frame needs to be adjusted by the number of unoptimized frame slots. |
| 232 frame->SetOsrStackSlotCount(static_cast<int>(UnoptimizedFrameSlots())); | 232 frame->SetOsrStackSlotCount(static_cast<int>(UnoptimizedFrameSlots())); |
| 233 } | 233 } |
| 234 | 234 |
| 235 | 235 |
| 236 } // namespace compiler | 236 } // namespace compiler |
| 237 } // namespace internal | 237 } // namespace internal |
| 238 } // namespace v8 | 238 } // namespace v8 |
| OLD | NEW |