| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 3c4ff159eb22b9b92595a5843f83c492c6c2d589..db5befd3cde1a8a857ef1b5aca4566fe6e045125 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -4319,12 +4319,17 @@ void HOptimizedGraphBuilder::VisitDoWhileStatement(DoWhileStatement* stmt) {
|
| HBasicBlock* loop_successor = NULL;
|
| if (body_exit != NULL && !stmt->cond()->ToBooleanIsTrue()) {
|
| set_current_block(body_exit);
|
| - // The block for a true condition, the actual predecessor block of the
|
| - // back edge.
|
| - body_exit = graph()->CreateBasicBlock();
|
| loop_successor = graph()->CreateBasicBlock();
|
| - CHECK_BAILOUT(VisitForControl(stmt->cond(), body_exit, loop_successor));
|
| - if (body_exit->HasPredecessor()) {
|
| + if (stmt->cond()->ToBooleanIsFalse()) {
|
| + Goto(loop_successor);
|
| + body_exit = NULL;
|
| + } else {
|
| + // The block for a true condition, the actual predecessor block of the
|
| + // back edge.
|
| + body_exit = graph()->CreateBasicBlock();
|
| + CHECK_BAILOUT(VisitForControl(stmt->cond(), body_exit, loop_successor));
|
| + }
|
| + if (body_exit != NULL && body_exit->HasPredecessor()) {
|
| body_exit->SetJoinId(stmt->BackEdgeId());
|
| } else {
|
| body_exit = NULL;
|
|
|