bool StringPolicy<Op>::staticAdjustInputs(TempAllocator &alloc, MInstruction *ins) { MDefinition *in = ins->getOperand(Op); if (in->type() == MIRType_String) return true; MUnbox *replace = MUnbox::New(alloc, in, MIRType_String, MUnbox::Fallible); ins->block()->insertBefore(ins, replace); ins->replaceOperand(Op, replace); return replace->typePolicy()->adjustInputs(alloc, replace); }
bool IntPolicy<Op>::staticAdjustInputs(TempAllocator &alloc, MInstruction *def) { MDefinition *in = def->getOperand(Op); if (in->type() == MIRType_Int32) return true; MUnbox *replace = MUnbox::New(alloc, in, MIRType_Int32, MUnbox::Fallible); def->block()->insertBefore(def, replace); def->replaceOperand(Op, replace); return replace->typePolicy()->adjustInputs(alloc, replace); }
bool ObjectPolicy<Op>::staticAdjustInputs(TempAllocator& alloc, MInstruction* ins) { MDefinition* in = ins->getOperand(Op); if (in->type() == MIRType::Object || in->type() == MIRType::Slots || in->type() == MIRType::Elements) { return true; } MUnbox* replace = MUnbox::New(alloc, in, MIRType::Object, MUnbox::Fallible); ins->block()->insertBefore(ins, replace); ins->replaceOperand(Op, replace); return replace->typePolicy()->adjustInputs(alloc, replace); }