MInstruction* MBasicBlock::safeInsertTop(MDefinition* ins, IgnoreTop ignore) { // Beta nodes and interrupt checks are required to be located at the // beginnings of basic blocks, so we must insert new instructions after any // such instructions. MInstructionIterator insertIter = !ins || ins->isPhi() ? begin() : begin(ins->toInstruction()); while (insertIter->isBeta() || insertIter->isInterruptCheck() || insertIter->isConstant() || (!(ignore & IgnoreRecover) && insertIter->isRecoveredOnBailout())) { insertIter++; } return *insertIter; }
MInstruction* MBasicBlock::safeInsertTop(MDefinition* ins, IgnoreTop ignore) { MOZ_ASSERT(graph().osrBlock() != this, "We are not supposed to add any instruction in OSR blocks."); // Beta nodes and interrupt checks are required to be located at the // beginnings of basic blocks, so we must insert new instructions after any // such instructions. MInstructionIterator insertIter = !ins || ins->isPhi() ? begin() : begin(ins->toInstruction()); while (insertIter->isBeta() || insertIter->isInterruptCheck() || insertIter->isConstant() || insertIter->isParameter() || (!(ignore & IgnoreRecover) && insertIter->isRecoveredOnBailout())) { insertIter++; } return *insertIter; }