OLD | NEW |
---|---|
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/schedule.h" | 5 #include "src/compiler/schedule.h" |
6 | 6 |
7 #include "src/compiler/node.h" | 7 #include "src/compiler/node.h" |
8 #include "src/compiler/node-properties.h" | 8 #include "src/compiler/node-properties.h" |
9 #include "src/ostreams.h" | 9 #include "src/ostreams.h" |
10 | 10 |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
192 SetBlockForNode(block, node); | 192 SetBlockForNode(block, node); |
193 } | 193 } |
194 | 194 |
195 | 195 |
196 void Schedule::AddGoto(BasicBlock* block, BasicBlock* succ) { | 196 void Schedule::AddGoto(BasicBlock* block, BasicBlock* succ) { |
197 DCHECK_EQ(BasicBlock::kNone, block->control()); | 197 DCHECK_EQ(BasicBlock::kNone, block->control()); |
198 block->set_control(BasicBlock::kGoto); | 198 block->set_control(BasicBlock::kGoto); |
199 AddSuccessor(block, succ); | 199 AddSuccessor(block, succ); |
200 } | 200 } |
201 | 201 |
202 #if DEBUG | |
203 namespace { | |
204 | |
205 bool IsPotentiallyThrowingCall(IrOpcode::Value opcode) { | |
206 switch (opcode) { | |
207 #define BUILD_BLOCK_JS_CASE(Name) case IrOpcode::k##Name: | |
208 JS_OP_LIST(BUILD_BLOCK_JS_CASE) | |
209 #undef BUILD_BLOCK_JS_CASE | |
210 case IrOpcode::kCall: | |
211 return true; | |
212 default: | |
213 return false; | |
214 } | |
215 } | |
216 | |
217 } // namespace | |
218 #endif // DEBUG | |
202 | 219 |
203 void Schedule::AddCall(BasicBlock* block, Node* call, BasicBlock* success_block, | 220 void Schedule::AddCall(BasicBlock* block, Node* call, BasicBlock* success_block, |
204 BasicBlock* exception_block) { | 221 BasicBlock* exception_block) { |
205 DCHECK_EQ(BasicBlock::kNone, block->control()); | 222 DCHECK_EQ(BasicBlock::kNone, block->control()); |
206 DCHECK_EQ(IrOpcode::kCall, call->opcode()); | 223 DCHECK(IsPotentiallyThrowingCall(call->opcode())); |
Benedikt Meurer
2016/04/18 04:34:18
Can you just run JSGenericLowering first so that t
Jarin
2016/04/18 07:53:33
I think the scheduler should be able to schedule a
| |
207 block->set_control(BasicBlock::kCall); | 224 block->set_control(BasicBlock::kCall); |
208 AddSuccessor(block, success_block); | 225 AddSuccessor(block, success_block); |
209 AddSuccessor(block, exception_block); | 226 AddSuccessor(block, exception_block); |
210 SetControlInput(block, call); | 227 SetControlInput(block, call); |
211 } | 228 } |
212 | 229 |
213 | 230 |
214 void Schedule::AddBranch(BasicBlock* block, Node* branch, BasicBlock* tblock, | 231 void Schedule::AddBranch(BasicBlock* block, Node* branch, BasicBlock* tblock, |
215 BasicBlock* fblock) { | 232 BasicBlock* fblock) { |
216 DCHECK_EQ(BasicBlock::kNone, block->control()); | 233 DCHECK_EQ(BasicBlock::kNone, block->control()); |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
439 } | 456 } |
440 os << "\n"; | 457 os << "\n"; |
441 } | 458 } |
442 } | 459 } |
443 return os; | 460 return os; |
444 } | 461 } |
445 | 462 |
446 } // namespace compiler | 463 } // namespace compiler |
447 } // namespace internal | 464 } // namespace internal |
448 } // namespace v8 | 465 } // namespace v8 |
OLD | NEW |