diff --git a/js/src/jit/IonAnalysis.cpp b/js/src/jit/IonAnalysis.cpp index f2ac82850161..485d0cad417f 100644 --- a/js/src/jit/IonAnalysis.cpp +++ b/js/src/jit/IonAnalysis.cpp @@ -1385,11 +1385,6 @@ jit::AssertBasicGraphCoherency(MIRGraph &graph) for (size_t i = 0; i < block->numPredecessors(); i++) JS_ASSERT(CheckPredecessorImpliesSuccessor(*block, block->getPredecessor(i))); - // Assert that use chains are valid for this instruction. - for (MDefinitionIterator iter(*block); iter; iter++) { - for (uint32_t i = 0, e = iter->numOperands(); i < e; i++) - JS_ASSERT(CheckOperandImpliesUse(*iter, iter->getOperand(i))); - } for (MResumePointIterator iter(block->resumePointsBegin()); iter != block->resumePointsEnd(); iter++) { for (uint32_t i = 0, e = iter->numOperands(); i < e; i++) { if (iter->getUseFor(i)->hasProducer()) @@ -1398,11 +1393,16 @@ jit::AssertBasicGraphCoherency(MIRGraph &graph) } for (MPhiIterator phi(block->phisBegin()); phi != block->phisEnd(); phi++) { JS_ASSERT(phi->numOperands() == block->numPredecessors()); + MOZ_ASSERT(!phi->isRecoveredOnBailout()); } for (MDefinitionIterator iter(*block); iter; iter++) { JS_ASSERT(iter->block() == *block); - for (MUseIterator i(iter->usesBegin()); i != iter->usesEnd(); i++) - JS_ASSERT(CheckUseImpliesOperand(*iter, *i)); + + // Assert that use chains are valid for this instruction. + for (uint32_t i = 0, end = iter->numOperands(); i < end; i++) + JS_ASSERT(CheckOperandImpliesUse(*iter, iter->getOperand(i))); + for (MUseIterator use(iter->usesBegin()); use != iter->usesEnd(); use++) + JS_ASSERT(CheckUseImpliesOperand(*iter, *use)); if (iter->isInstruction()) { if (MResumePoint *resume = iter->toInstruction()->resumePoint()) { @@ -1410,6 +1410,9 @@ jit::AssertBasicGraphCoherency(MIRGraph &graph) JS_ASSERT(ins->block() == iter->block()); } } + + if (iter->isRecoveredOnBailout()) + MOZ_ASSERT(!iter->hasLiveDefUses()); } }