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; |