void ion::AssertGraphCoherency(MIRGraph &graph) { #ifdef DEBUG // Assert successor and predecessor list coherency. uint32_t count = 0; for (MBasicBlockIterator block(graph.begin()); block != graph.end(); block++) { count++; for (size_t i = 0; i < block->numSuccessors(); i++) JS_ASSERT(CheckSuccessorImpliesPredecessor(*block, block->getSuccessor(i))); for (size_t i = 0; i < block->numPredecessors(); i++) JS_ASSERT(CheckPredecessorImpliesSuccessor(*block, block->getPredecessor(i))); for (MInstructionIterator ins = block->begin(); ins != block->end(); ins++) { for (uint32_t i = 0; i < ins->numOperands(); i++) JS_ASSERT(CheckMarkedAsUse(*ins, ins->getOperand(i))); } } JS_ASSERT(graph.numBlocks() == count); AssertReversePostOrder(graph); #endif }
MInstructionIterator MBasicBlock::discardAt(MInstructionIterator &iter) { for (size_t i = 0; i < iter->numOperands(); i++) iter->replaceOperand(i, NULL); return instructions_.removeAt(iter); }
MInstructionIterator MBasicBlock::discardAt(MInstructionIterator &iter) { AssertSafelyDiscardable(*iter); for (size_t i = 0; i < iter->numOperands(); i++) iter->discardOperand(i); return instructions_.removeAt(iter); }
void MBasicBlock::discardAllInstructionsStartingAt(MInstructionIterator &iter) { while (iter != end()) { for (size_t i = 0, e = iter->numOperands(); i < e; i++) iter->discardOperand(i); iter = instructions_.removeAt(iter); } }
void MBasicBlock::discardAllInstructions() { for (MInstructionIterator iter = begin(); iter != end(); ) { for (size_t i = 0, e = iter->numOperands(); i < e; i++) iter->discardOperand(i); iter = instructions_.removeAt(iter); } lastIns_ = NULL; }