Lines Matching refs:ins

76       MNode* ins = *iter++;  in run()  local
77 if (ins->isDefinition()) { in run()
78 MDefinition* def = ins->toDefinition(); in run()
88 view.visitResumePoint(ins->toResumePoint()); in run()
109 static bool IsObjectEscaped(MInstruction* ins,
148 static inline bool IsOptimizableObjectInstruction(MInstruction* ins) { in IsOptimizableObjectInstruction() argument
149 return ins->isNewObject() || ins->isNewPlainObject() || in IsOptimizableObjectInstruction()
150 ins->isCreateThisWithTemplate() || ins->isNewCallObject() || in IsOptimizableObjectInstruction()
151 ins->isNewIterator(); in IsOptimizableObjectInstruction()
159 static bool IsObjectEscaped(MInstruction* ins, const Shape* shapeDefault) { in IsObjectEscaped() argument
160 MOZ_ASSERT(ins->type() == MIRType::Object); in IsObjectEscaped()
162 JitSpewDef(JitSpew_Escape, "Check object\n", ins); in IsObjectEscaped()
167 if (ins->isNewPlainObject()) { in IsObjectEscaped()
168 shape = ins->toNewPlainObject()->shape(); in IsObjectEscaped()
169 } else if (JSObject* templateObj = MObjectState::templateObjectOf(ins)) { in IsObjectEscaped()
182 for (MUseIterator i(ins->usesBegin()); i != ins->usesEnd(); i++) { in IsObjectEscaped()
212 MSlots* ins = def->toSlots(); in IsObjectEscaped() local
213 MOZ_ASSERT(ins->object() != 0); in IsObjectEscaped()
214 for (MUseIterator i(ins->usesBegin()); i != ins->usesEnd(); i++) { in IsObjectEscaped()
227 MOZ_ASSERT(!ins->isGuardShape()); in IsObjectEscaped()
321 void visitObjectState(MObjectState* ins);
322 void visitStoreFixedSlot(MStoreFixedSlot* ins);
323 void visitLoadFixedSlot(MLoadFixedSlot* ins);
324 void visitPostWriteBarrier(MPostWriteBarrier* ins);
325 void visitStoreDynamicSlot(MStoreDynamicSlot* ins);
326 void visitLoadDynamicSlot(MLoadDynamicSlot* ins);
327 void visitGuardShape(MGuardShape* ins);
328 void visitCheckIsObj(MCheckIsObj* ins);
329 void visitUnbox(MUnbox* ins);
330 void visitFunctionEnvironment(MFunctionEnvironment* ins);
331 void visitLambda(MLambda* ins);
332 void visitLambdaArrow(MLambdaArrow* ins);
333 void visitFunctionWithProto(MFunctionWithProto* ins);
336 void visitObjectGuard(MInstruction* ins, MDefinition* operand);
480 MNode* ins = (*i)->consumer(); in assertSuccess() local
484 if (ins->isResumePoint() || in assertSuccess()
485 (def = ins->toDefinition())->isRecoveredOnBailout()) { in assertSuccess()
508 void ObjectMemoryView::visitObjectState(MObjectState* ins) { in visitObjectState() argument
509 if (ins->isInWorklist()) { in visitObjectState()
510 ins->setNotInWorklist(); in visitObjectState()
514 void ObjectMemoryView::visitStoreFixedSlot(MStoreFixedSlot* ins) { in visitStoreFixedSlot() argument
516 if (ins->object() != obj_) { in visitStoreFixedSlot()
521 if (state_->hasFixedSlot(ins->slot())) { in visitStoreFixedSlot()
528 state_->setFixedSlot(ins->slot(), ins->value()); in visitStoreFixedSlot()
529 ins->block()->insertBefore(ins->toInstruction(), state_); in visitStoreFixedSlot()
534 ins->block()->insertBefore(ins, bailout); in visitStoreFixedSlot()
538 ins->block()->discard(ins); in visitStoreFixedSlot()
541 void ObjectMemoryView::visitLoadFixedSlot(MLoadFixedSlot* ins) { in visitLoadFixedSlot() argument
543 if (ins->object() != obj_) { in visitLoadFixedSlot()
548 if (state_->hasFixedSlot(ins->slot())) { in visitLoadFixedSlot()
549 ins->replaceAllUsesWith(state_->getFixedSlot(ins->slot())); in visitLoadFixedSlot()
554 ins->block()->insertBefore(ins, bailout); in visitLoadFixedSlot()
555 ins->replaceAllUsesWith(undefinedVal_); in visitLoadFixedSlot()
559 ins->block()->discard(ins); in visitLoadFixedSlot()
562 void ObjectMemoryView::visitPostWriteBarrier(MPostWriteBarrier* ins) { in visitPostWriteBarrier() argument
564 if (ins->object() != obj_) { in visitPostWriteBarrier()
569 ins->block()->discard(ins); in visitPostWriteBarrier()
572 void ObjectMemoryView::visitStoreDynamicSlot(MStoreDynamicSlot* ins) { in visitStoreDynamicSlot() argument
574 MSlots* slots = ins->slots()->toSlots(); in visitStoreDynamicSlot()
583 if (state_->hasDynamicSlot(ins->slot())) { in visitStoreDynamicSlot()
590 state_->setDynamicSlot(ins->slot(), ins->value()); in visitStoreDynamicSlot()
591 ins->block()->insertBefore(ins->toInstruction(), state_); in visitStoreDynamicSlot()
596 ins->block()->insertBefore(ins, bailout); in visitStoreDynamicSlot()
600 ins->block()->discard(ins); in visitStoreDynamicSlot()
603 void ObjectMemoryView::visitLoadDynamicSlot(MLoadDynamicSlot* ins) { in visitLoadDynamicSlot() argument
605 MSlots* slots = ins->slots()->toSlots(); in visitLoadDynamicSlot()
614 if (state_->hasDynamicSlot(ins->slot())) { in visitLoadDynamicSlot()
615 ins->replaceAllUsesWith(state_->getDynamicSlot(ins->slot())); in visitLoadDynamicSlot()
620 ins->block()->insertBefore(ins, bailout); in visitLoadDynamicSlot()
621 ins->replaceAllUsesWith(undefinedVal_); in visitLoadDynamicSlot()
625 ins->block()->discard(ins); in visitLoadDynamicSlot()
628 void ObjectMemoryView::visitObjectGuard(MInstruction* ins, in visitObjectGuard() argument
630 MOZ_ASSERT(ins->numOperands() == 1); in visitObjectGuard()
631 MOZ_ASSERT(ins->getOperand(0) == operand); in visitObjectGuard()
632 MOZ_ASSERT(ins->type() == MIRType::Object); in visitObjectGuard()
640 ins->replaceAllUsesWith(obj_); in visitObjectGuard()
643 ins->block()->discard(ins); in visitObjectGuard()
646 void ObjectMemoryView::visitGuardShape(MGuardShape* ins) { in visitGuardShape() argument
647 visitObjectGuard(ins, ins->object()); in visitGuardShape()
650 void ObjectMemoryView::visitCheckIsObj(MCheckIsObj* ins) { in visitCheckIsObj() argument
652 if (ins->input() != obj_) { in visitCheckIsObj()
657 ins->replaceAllUsesWith(obj_); in visitCheckIsObj()
660 ins->block()->discard(ins); in visitCheckIsObj()
663 void ObjectMemoryView::visitUnbox(MUnbox* ins) { in visitUnbox() argument
665 if (ins->input() != obj_) { in visitUnbox()
668 MOZ_ASSERT(ins->type() == MIRType::Object); in visitUnbox()
671 ins->replaceAllUsesWith(obj_); in visitUnbox()
674 ins->block()->discard(ins); in visitUnbox()
677 void ObjectMemoryView::visitFunctionEnvironment(MFunctionEnvironment* ins) { in visitFunctionEnvironment() argument
679 MDefinition* input = ins->input(); in visitFunctionEnvironment()
697 ins->replaceAllUsesWith(obj_); in visitFunctionEnvironment()
700 ins->block()->discard(ins); in visitFunctionEnvironment()
703 void ObjectMemoryView::visitLambda(MLambda* ins) { in visitLambda() argument
704 if (ins->environmentChain() != obj_) { in visitLambda()
710 ins->setIncompleteObject(); in visitLambda()
713 void ObjectMemoryView::visitLambdaArrow(MLambdaArrow* ins) { in visitLambdaArrow() argument
714 if (ins->environmentChain() != obj_) { in visitLambdaArrow()
718 ins->setIncompleteObject(); in visitLambdaArrow()
721 void ObjectMemoryView::visitFunctionWithProto(MFunctionWithProto* ins) { in visitFunctionWithProto() argument
722 if (ins->environmentChain() != obj_) { in visitFunctionWithProto()
726 ins->setIncompleteObject(); in visitFunctionWithProto()
729 static bool IndexOf(MDefinition* ins, int32_t* res) { in IndexOf() argument
730 MOZ_ASSERT(ins->isLoadElement() || ins->isStoreElement()); in IndexOf()
731 MDefinition* indexDef = ins->getOperand(1); // ins->index(); in IndexOf()
838 static inline bool IsOptimizableArrayInstruction(MInstruction* ins) { in IsOptimizableArrayInstruction() argument
839 return ins->isNewArray() || ins->isNewArrayObject(); in IsOptimizableArrayInstruction()
847 static bool IsArrayEscaped(MInstruction* ins, MInstruction* newArray) { in IsArrayEscaped() argument
848 MOZ_ASSERT(ins->type() == MIRType::Object); in IsArrayEscaped()
851 JitSpewDef(JitSpew_Escape, "Check array\n", ins); in IsArrayEscaped()
877 for (MUseIterator i(ins->usesBegin()); i != ins->usesEnd(); i++) { in IsArrayEscaped()
892 MOZ_ASSERT(elem->object() == ins); in IsArrayEscaped()
1004 void discardInstruction(MInstruction* ins, MDefinition* elements);
1008 void visitArrayState(MArrayState* ins);
1009 void visitStoreElement(MStoreElement* ins);
1010 void visitLoadElement(MLoadElement* ins);
1011 void visitSetInitializedLength(MSetInitializedLength* ins);
1012 void visitInitializedLength(MInitializedLength* ins);
1013 void visitArrayLength(MArrayLength* ins);
1014 void visitPostWriteBarrier(MPostWriteBarrier* ins);
1015 void visitPostWriteElementBarrier(MPostWriteElementBarrier* ins);
1016 void visitGuardShape(MGuardShape* ins);
1017 void visitGuardToClass(MGuardToClass* ins);
1018 void visitUnbox(MUnbox* ins);
1173 void ArrayMemoryView::visitArrayState(MArrayState* ins) { in visitArrayState() argument
1174 if (ins->isInWorklist()) { in visitArrayState()
1175 ins->setNotInWorklist(); in visitArrayState()
1183 void ArrayMemoryView::discardInstruction(MInstruction* ins, in discardInstruction() argument
1186 ins->block()->discard(ins); in discardInstruction()
1192 void ArrayMemoryView::visitStoreElement(MStoreElement* ins) { in visitStoreElement() argument
1194 MDefinition* elements = ins->elements(); in visitStoreElement()
1201 MOZ_ALWAYS_TRUE(IndexOf(ins, &index)); in visitStoreElement()
1208 state_->setElement(index, ins->value()); in visitStoreElement()
1209 ins->block()->insertBefore(ins, state_); in visitStoreElement()
1212 discardInstruction(ins, elements); in visitStoreElement()
1215 void ArrayMemoryView::visitLoadElement(MLoadElement* ins) { in visitLoadElement() argument
1217 MDefinition* elements = ins->elements(); in visitLoadElement()
1224 MOZ_ALWAYS_TRUE(IndexOf(ins, &index)); in visitLoadElement()
1232 ins->replaceAllUsesWith(element); in visitLoadElement()
1235 discardInstruction(ins, elements); in visitLoadElement()
1238 void ArrayMemoryView::visitSetInitializedLength(MSetInitializedLength* ins) { in visitSetInitializedLength() argument
1240 MDefinition* elements = ins->elements(); in visitSetInitializedLength()
1255 int32_t initLengthValue = ins->index()->maybeConstantValue()->toInt32() + 1; in visitSetInitializedLength()
1257 ins->block()->insertBefore(ins, initLength); in visitSetInitializedLength()
1258 ins->block()->insertBefore(ins, state_); in visitSetInitializedLength()
1262 discardInstruction(ins, elements); in visitSetInitializedLength()
1265 void ArrayMemoryView::visitInitializedLength(MInitializedLength* ins) { in visitInitializedLength() argument
1267 MDefinition* elements = ins->elements(); in visitInitializedLength()
1273 ins->replaceAllUsesWith(state_->initializedLength()); in visitInitializedLength()
1276 discardInstruction(ins, elements); in visitInitializedLength()
1279 void ArrayMemoryView::visitArrayLength(MArrayLength* ins) { in visitArrayLength() argument
1281 MDefinition* elements = ins->elements(); in visitArrayLength()
1291 ins->replaceAllUsesWith(length_); in visitArrayLength()
1294 discardInstruction(ins, elements); in visitArrayLength()
1297 void ArrayMemoryView::visitPostWriteBarrier(MPostWriteBarrier* ins) { in visitPostWriteBarrier() argument
1299 if (ins->object() != arr_) { in visitPostWriteBarrier()
1304 ins->block()->discard(ins); in visitPostWriteBarrier()
1308 MPostWriteElementBarrier* ins) { in visitPostWriteElementBarrier() argument
1310 if (ins->object() != arr_) { in visitPostWriteElementBarrier()
1315 ins->block()->discard(ins); in visitPostWriteElementBarrier()
1318 void ArrayMemoryView::visitGuardShape(MGuardShape* ins) { in visitGuardShape() argument
1320 if (ins->object() != arr_) { in visitGuardShape()
1325 ins->replaceAllUsesWith(arr_); in visitGuardShape()
1328 ins->block()->discard(ins); in visitGuardShape()
1331 void ArrayMemoryView::visitGuardToClass(MGuardToClass* ins) { in visitGuardToClass() argument
1333 if (ins->object() != arr_) { in visitGuardToClass()
1338 ins->replaceAllUsesWith(arr_); in visitGuardToClass()
1341 ins->block()->discard(ins); in visitGuardToClass()
1344 void ArrayMemoryView::visitUnbox(MUnbox* ins) { in visitUnbox() argument
1346 if (ins->getOperand(0) != arr_) { in visitUnbox()
1349 MOZ_ASSERT(ins->type() == MIRType::Object); in visitUnbox()
1352 ins->replaceAllUsesWith(arr_); in visitUnbox()
1355 ins->block()->discard(ins); in visitUnbox()
1358 static inline bool IsOptimizableArgumentsInstruction(MInstruction* ins) { in IsOptimizableArgumentsInstruction() argument
1359 return ins->isCreateArgumentsObject() || in IsOptimizableArgumentsInstruction()
1360 ins->isCreateInlinedArgumentsObject(); in IsOptimizableArgumentsInstruction()
1375 void visitGuardToClass(MGuardToClass* ins);
1376 void visitGuardArgumentsObjectFlags(MGuardArgumentsObjectFlags* ins);
1377 void visitUnbox(MUnbox* ins);
1378 void visitGetArgumentsObjectArg(MGetArgumentsObjectArg* ins);
1379 void visitLoadArgumentsObjectArg(MLoadArgumentsObjectArg* ins);
1380 void visitArgumentsObjectLength(MArgumentsObjectLength* ins);
1381 void visitApplyArgsObj(MApplyArgsObj* ins);
1382 void visitLoadFixedSlot(MLoadFixedSlot* ins);
1390 bool escapes(MInstruction* ins, bool guardedForMapped = false);
1396 bool ArgumentsReplacer::escapes(MInstruction* ins, bool guardedForMapped) { in escapes() argument
1397 MOZ_ASSERT(ins->type() == MIRType::Object); in escapes()
1399 JitSpewDef(JitSpew_Escape, "Check arguments object\n", ins); in escapes()
1405 if (ins->isCreateArgumentsObject() && graph_.osrBlock()) { in escapes()
1412 for (MUseIterator i(ins->usesBegin()); i != ins->usesEnd(); i++) { in escapes()
1474 if (ins == def->toApplyArgsObj()->getThis()) { in escapes()
1478 MOZ_ASSERT(ins == def->toApplyArgsObj()->getArgsObj()); in escapes()
1521 MNode* ins = *iter++; in run() local
1522 if (ins->isDefinition()) { in run()
1523 MDefinition* def = ins->toDefinition(); in run()
1545 void ArgumentsReplacer::visitGuardToClass(MGuardToClass* ins) { in visitGuardToClass() argument
1547 if (ins->object() != args_) { in visitGuardToClass()
1550 MOZ_ASSERT(ins->isArgumentsObjectClass()); in visitGuardToClass()
1553 ins->replaceAllUsesWith(args_); in visitGuardToClass()
1556 ins->block()->discard(ins); in visitGuardToClass()
1560 MGuardArgumentsObjectFlags* ins) { in visitGuardArgumentsObjectFlags() argument
1562 if (ins->argsObject() != args_) { in visitGuardArgumentsObjectFlags()
1584 MOZ_ASSERT((ins->flags() & ~supportedBits) == 0); in visitGuardArgumentsObjectFlags()
1585 MOZ_ASSERT_IF(ins->flags() & ArgumentsObject::FORWARDED_ARGUMENTS_BIT, in visitGuardArgumentsObjectFlags()
1590 ins->replaceAllUsesWith(args_); in visitGuardArgumentsObjectFlags()
1593 ins->block()->discard(ins); in visitGuardArgumentsObjectFlags()
1596 void ArgumentsReplacer::visitUnbox(MUnbox* ins) { in visitUnbox() argument
1598 if (ins->getOperand(0) != args_) { in visitUnbox()
1601 MOZ_ASSERT(ins->type() == MIRType::Object); in visitUnbox()
1604 ins->replaceAllUsesWith(args_); in visitUnbox()
1607 ins->block()->discard(ins); in visitUnbox()
1611 MGetArgumentsObjectArg* ins) { in visitGetArgumentsObjectArg() argument
1613 if (ins->argsObject() != args_) { in visitGetArgumentsObjectArg()
1624 if (ins->argno() < actualArgs->numActuals()) { in visitGetArgumentsObjectArg()
1625 getArg = actualArgs->getArg(ins->argno()); in visitGetArgumentsObjectArg()
1630 ins->block()->insertBefore(ins, undef); in visitGetArgumentsObjectArg()
1635 auto* index = MConstant::New(alloc(), Int32Value(ins->argno())); in visitGetArgumentsObjectArg()
1636 ins->block()->insertBefore(ins, index); in visitGetArgumentsObjectArg()
1639 ins->block()->insertBefore(ins, loadArg); in visitGetArgumentsObjectArg()
1642 ins->replaceAllUsesWith(getArg); in visitGetArgumentsObjectArg()
1645 ins->block()->discard(ins); in visitGetArgumentsObjectArg()
1649 MLoadArgumentsObjectArg* ins) { in visitLoadArgumentsObjectArg() argument
1651 if (ins->argsObject() != args_) { in visitLoadArgumentsObjectArg()
1655 MDefinition* index = ins->index(); in visitLoadArgumentsObjectArg()
1664 ins->block()->insertBefore(ins, length); in visitLoadArgumentsObjectArg()
1667 check->setBailoutKind(ins->bailoutKind()); in visitLoadArgumentsObjectArg()
1668 ins->block()->insertBefore(ins, check); in visitLoadArgumentsObjectArg()
1678 ins->block()->insertBefore(ins, length); in visitLoadArgumentsObjectArg()
1681 check->setBailoutKind(ins->bailoutKind()); in visitLoadArgumentsObjectArg()
1682 ins->block()->insertBefore(ins, check); in visitLoadArgumentsObjectArg()
1690 ins->block()->insertBefore(ins, check); in visitLoadArgumentsObjectArg()
1695 ins->block()->insertBefore(ins, loadArg); in visitLoadArgumentsObjectArg()
1696 ins->replaceAllUsesWith(loadArg); in visitLoadArgumentsObjectArg()
1699 ins->block()->discard(ins); in visitLoadArgumentsObjectArg()
1703 MArgumentsObjectLength* ins) { in visitArgumentsObjectLength() argument
1705 if (ins->argsObject() != args_) { in visitArgumentsObjectLength()
1716 ins->block()->insertBefore(ins, length); in visitArgumentsObjectLength()
1717 ins->replaceAllUsesWith(length); in visitArgumentsObjectLength()
1720 ins->block()->discard(ins); in visitArgumentsObjectLength()
1723 void ArgumentsReplacer::visitApplyArgsObj(MApplyArgsObj* ins) { in visitApplyArgsObj() argument
1725 if (ins->getArgsObj() != args_) { in visitApplyArgsObj()
1733 ins->ignoresReturnValue()); in visitApplyArgsObj()
1735 callInfo.initForApplyInlinedArgs(ins->getFunction(), ins->getThis(), in visitApplyArgsObj()
1741 auto addUndefined = [this, &ins]() -> MConstant* { in visitApplyArgsObj()
1743 ins->block()->insertBefore(ins, undef); in visitApplyArgsObj()
1750 ins->getSingleTarget(), isDOMCall); in visitApplyArgsObj()
1751 if (!ins->maybeCrossRealm()) { in visitApplyArgsObj()
1757 ins->block()->insertBefore(ins, numArgs); in visitApplyArgsObj()
1760 auto* apply = MApplyArgs::New(alloc(), ins->getSingleTarget(), in visitApplyArgsObj()
1761 ins->getFunction(), numArgs, ins->getThis()); in visitApplyArgsObj()
1762 apply->setBailoutKind(ins->bailoutKind()); in visitApplyArgsObj()
1763 if (!ins->maybeCrossRealm()) { in visitApplyArgsObj()
1766 if (ins->ignoresReturnValue()) { in visitApplyArgsObj()
1772 ins->block()->insertBefore(ins, newIns); in visitApplyArgsObj()
1773 ins->replaceAllUsesWith(newIns); in visitApplyArgsObj()
1775 newIns->stealResumePoint(ins); in visitApplyArgsObj()
1776 ins->block()->discard(ins); in visitApplyArgsObj()
1779 void ArgumentsReplacer::visitLoadFixedSlot(MLoadFixedSlot* ins) { in visitLoadFixedSlot() argument
1781 if (ins->object() != args_) { in visitLoadFixedSlot()
1785 MOZ_ASSERT(ins->slot() == ArgumentsObject::CALLEE_SLOT); in visitLoadFixedSlot()
1792 ins->block()->insertBefore(ins, callee); in visitLoadFixedSlot()
1795 ins->replaceAllUsesWith(replacement); in visitLoadFixedSlot()
1798 ins->block()->discard(ins); in visitLoadFixedSlot()
1814 for (MInstructionIterator ins = block->begin(); ins != block->end(); in ScalarReplacement() local
1815 ins++) { in ScalarReplacement()
1816 if (IsOptimizableObjectInstruction(*ins) && !IsObjectEscaped(*ins)) { in ScalarReplacement()
1817 ObjectMemoryView view(graph.alloc(), *ins); in ScalarReplacement()
1826 if (IsOptimizableArrayInstruction(*ins) && !IsArrayEscaped(*ins, *ins)) { in ScalarReplacement()
1827 ArrayMemoryView view(graph.alloc(), *ins); in ScalarReplacement()
1836 if (IsOptimizableArgumentsInstruction(*ins)) { in ScalarReplacement()
1837 ArgumentsReplacer replacer(mir, graph, *ins); in ScalarReplacement()
1838 if (replacer.escapes(*ins)) { in ScalarReplacement()