mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 01:35:35 +00:00
Bug 1627618 - Part 5: Directly set specialisation when calling MBinaryArithInstruction::New. r=jandem
Instead of manually adjusting the specialisation in `IonBuilder::binaryArithEmitSpecialized()`, directly pass it to `MBinaryArithInstruction::New()`. The constructor changes in the previous parts made it possible to pass `MIRType` to the `MAdd` and `MSub` constructors. Differential Revision: https://phabricator.services.mozilla.com/D69783 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
dfc520a2f2
commit
dcc49bdb1f
@ -3654,8 +3654,7 @@ AbortReasonOr<MBinaryArithInstruction*> IonBuilder::binaryArithEmitSpecialized(
|
||||
MDefinition::Opcode op, MIRType specialization, MDefinition* left,
|
||||
MDefinition* right) {
|
||||
MBinaryArithInstruction* ins =
|
||||
MBinaryArithInstruction::New(alloc(), op, left, right);
|
||||
ins->setSpecialization(specialization);
|
||||
MBinaryArithInstruction::New(alloc(), op, left, right, specialization);
|
||||
|
||||
if (op == MDefinition::Opcode::Add || op == MDefinition::Opcode::Mul) {
|
||||
ins->setCommutative();
|
||||
|
@ -2787,18 +2787,20 @@ void MBinaryArithInstruction::printOpcode(GenericPrinter& out) const {
|
||||
MBinaryArithInstruction* MBinaryArithInstruction::New(TempAllocator& alloc,
|
||||
Opcode op,
|
||||
MDefinition* left,
|
||||
MDefinition* right) {
|
||||
MDefinition* right,
|
||||
MIRType specialization) {
|
||||
MOZ_ASSERT(IsNumberType(specialization));
|
||||
switch (op) {
|
||||
case Opcode::Add:
|
||||
return MAdd::New(alloc, left, right);
|
||||
return MAdd::New(alloc, left, right, specialization);
|
||||
case Opcode::Sub:
|
||||
return MSub::New(alloc, left, right);
|
||||
return MSub::New(alloc, left, right, specialization);
|
||||
case Opcode::Mul:
|
||||
return MMul::New(alloc, left, right);
|
||||
return MMul::New(alloc, left, right, specialization);
|
||||
case Opcode::Div:
|
||||
return MDiv::New(alloc, left, right);
|
||||
return MDiv::New(alloc, left, right, specialization);
|
||||
case Opcode::Mod:
|
||||
return MMod::New(alloc, left, right);
|
||||
return MMod::New(alloc, left, right, specialization);
|
||||
default:
|
||||
MOZ_CRASH("unexpected binary opcode");
|
||||
}
|
||||
|
@ -4788,7 +4788,8 @@ class MBinaryArithInstruction : public MBinaryInstruction,
|
||||
}
|
||||
|
||||
static MBinaryArithInstruction* New(TempAllocator& alloc, Opcode op,
|
||||
MDefinition* left, MDefinition* right);
|
||||
MDefinition* left, MDefinition* right,
|
||||
MIRType specialization);
|
||||
|
||||
bool constantDoubleResult(TempAllocator& alloc);
|
||||
|
||||
@ -5709,6 +5710,10 @@ class MMod : public MBinaryArithInstruction {
|
||||
MDefinition* right) {
|
||||
return new (alloc) MMod(left, right, MIRType::Value);
|
||||
}
|
||||
static MMod* New(TempAllocator& alloc, MDefinition* left, MDefinition* right,
|
||||
MIRType type) {
|
||||
return new (alloc) MMod(left, right, type);
|
||||
}
|
||||
static MMod* New(
|
||||
TempAllocator& alloc, MDefinition* left, MDefinition* right, MIRType type,
|
||||
bool unsignd, bool trapOnError = false,
|
||||
|
@ -267,9 +267,9 @@ BEGIN_TEST(testJitGVN_PinnedPhis) {
|
||||
|
||||
innerBackedge->end(MGoto::New(func.alloc, innerHeader));
|
||||
|
||||
MInstruction* z4 = MAdd::New(func.alloc, phi0, phi1);
|
||||
MInstruction* z4 = MAdd::New(func.alloc, phi0, phi1, MIRType::Int32);
|
||||
MConstant* z5 = MConstant::New(func.alloc, Int32Value(4));
|
||||
MInstruction* z6 = MAdd::New(func.alloc, phi2, phi3);
|
||||
MInstruction* z6 = MAdd::New(func.alloc, phi2, phi3, MIRType::Int32);
|
||||
MConstant* z7 = MConstant::New(func.alloc, Int32Value(6));
|
||||
MOZ_RELEASE_ASSERT(phi0->addInputSlow(z4));
|
||||
MOZ_RELEASE_ASSERT(phi1->addInputSlow(z5));
|
||||
|
Loading…
Reference in New Issue
Block a user