commit fc1c8be451e59491c85ec930e1028f142c56379a
parent fb96cba7f3ea28abac1fb671fa23c0452285e70a
Author: André Bargull <andre.bargull@gmail.com>
Date: Fri, 24 Oct 2025 14:58:55 +0000
Bug 1996086: Use lowerFor{ALU,FPU} when lowering MAbs. r=spidermonkey-reviewers,jandem
Per-architecture lowering for `MAbs` is now no longer needed.
Differential Revision: https://phabricator.services.mozilla.com/D269843
Diffstat:
9 files changed, 10 insertions(+), 33 deletions(-)
diff --git a/js/src/jit/LIROps.yaml b/js/src/jit/LIROps.yaml
@@ -1140,6 +1140,7 @@
result_type: WordSized
operands:
input: WordSized
+ defer_init: true
mir_op: Abs
# Absolute value of a double.
@@ -1147,12 +1148,14 @@
result_type: WordSized
operands:
input: WordSized
+ defer_init: true
# Absolute value of a float32.
- name: AbsF
result_type: WordSized
operands:
input: WordSized
+ defer_init: true
# Copysign for doubles.
- name: CopySignD
diff --git a/js/src/jit/Lowering.cpp b/js/src/jit/Lowering.cpp
@@ -1985,30 +1985,29 @@ void LIRGenerator::visitMinMaxArray(MMinMaxArray* ins) {
define(lir, ins);
}
-LInstructionHelper<1, 1, 0>* LIRGenerator::allocateAbs(MAbs* ins,
- LAllocation input) {
+void LIRGenerator::visitAbs(MAbs* ins) {
MDefinition* num = ins->input();
MOZ_ASSERT(IsNumberType(num->type()));
- LInstructionHelper<1, 1, 0>* lir;
switch (num->type()) {
- case MIRType::Int32:
- lir = new (alloc()) LAbsI(input);
+ case MIRType::Int32: {
+ auto* lir = new (alloc()) LAbsI;
// needed to handle abs(INT32_MIN)
if (ins->fallible()) {
assignSnapshot(lir, ins->bailoutKind());
}
+ lowerForALU(lir, ins, num);
break;
+ }
case MIRType::Float32:
- lir = new (alloc()) LAbsF(input);
+ lowerForFPU(new (alloc()) LAbsF, ins, num);
break;
case MIRType::Double:
- lir = new (alloc()) LAbsD(input);
+ lowerForFPU(new (alloc()) LAbsD, ins, num);
break;
default:
MOZ_CRASH();
}
- return lir;
}
void LIRGenerator::visitClz(MClz* ins) {
diff --git a/js/src/jit/Lowering.h b/js/src/jit/Lowering.h
@@ -61,7 +61,6 @@ class LIRGenerator final : public LIRGeneratorSpecific {
void lowerBitOp(JSOp op, MBinaryInstruction* ins);
void lowerShiftOp(JSOp op, MShiftInstruction* ins);
- LInstructionHelper<1, 1, 0>* allocateAbs(MAbs* ins, LAllocation input);
bool definePhis();
template <typename T>
diff --git a/js/src/jit/arm/Lowering-arm.cpp b/js/src/jit/arm/Lowering-arm.cpp
@@ -355,10 +355,6 @@ void LIRGeneratorARM::lowerDivI(MDiv* div) {
defineReturn(lir, div);
}
-void LIRGenerator::visitAbs(MAbs* ins) {
- define(allocateAbs(ins, useRegisterAtStart(ins->input())), ins);
-}
-
void LIRGeneratorARM::lowerMulI(MMul* mul, MDefinition* lhs, MDefinition* rhs) {
LMulI* lir = new (alloc()) LMulI;
if (mul->fallible()) {
diff --git a/js/src/jit/arm64/Lowering-arm64.cpp b/js/src/jit/arm64/Lowering-arm64.cpp
@@ -397,10 +397,6 @@ void LIRGeneratorARM64::lowerWasmCompareAndSelect(MWasmSelect* ins,
define(lir, ins);
}
-void LIRGenerator::visitAbs(MAbs* ins) {
- define(allocateAbs(ins, useRegisterAtStart(ins->input())), ins);
-}
-
LTableSwitch* LIRGeneratorARM64::newLTableSwitch(const LAllocation& in,
const LDefinition& inputCopy) {
return new (alloc()) LTableSwitch(in, inputCopy, temp());
diff --git a/js/src/jit/loong64/Lowering-loong64.cpp b/js/src/jit/loong64/Lowering-loong64.cpp
@@ -499,10 +499,6 @@ void LIRGenerator::visitUnbox(MUnbox* unbox) {
define(lir, unbox);
}
-void LIRGenerator::visitAbs(MAbs* ins) {
- define(allocateAbs(ins, useRegisterAtStart(ins->input())), ins);
-}
-
void LIRGenerator::visitCopySign(MCopySign* ins) {
MDefinition* lhs = ins->lhs();
MDefinition* rhs = ins->rhs();
diff --git a/js/src/jit/mips-shared/Lowering-mips-shared.cpp b/js/src/jit/mips-shared/Lowering-mips-shared.cpp
@@ -172,10 +172,6 @@ void LIRGeneratorMIPSShared::lowerDivI(MDiv* div) {
define(lir, div);
}
-void LIRGenerator::visitAbs(MAbs* ins) {
- define(allocateAbs(ins, useRegisterAtStart(ins->input())), ins);
-}
-
void LIRGeneratorMIPSShared::lowerMulI(MMul* mul, MDefinition* lhs,
MDefinition* rhs) {
LMulI* lir = new (alloc()) LMulI;
diff --git a/js/src/jit/riscv64/Lowering-riscv64.cpp b/js/src/jit/riscv64/Lowering-riscv64.cpp
@@ -498,10 +498,6 @@ void LIRGenerator::visitUnbox(MUnbox* unbox) {
define(lir, unbox);
}
-void LIRGenerator::visitAbs(MAbs* ins) {
- define(allocateAbs(ins, useRegisterAtStart(ins->input())), ins);
-}
-
void LIRGenerator::visitCopySign(MCopySign* ins) {
MDefinition* lhs = ins->lhs();
MDefinition* rhs = ins->rhs();
diff --git a/js/src/jit/x86-shared/Lowering-x86-shared.cpp b/js/src/jit/x86-shared/Lowering-x86-shared.cpp
@@ -174,10 +174,6 @@ void LIRGeneratorX86Shared::lowerForFPU(LInstructionHelper<1, 2, 0>* ins,
}
}
-void LIRGenerator::visitAbs(MAbs* ins) {
- defineReuseInput(allocateAbs(ins, useRegisterAtStart(ins->input())), ins, 0);
-}
-
void LIRGeneratorX86Shared::lowerMulI(MMul* mul, MDefinition* lhs,
MDefinition* rhs) {
// Note: If we need a negative zero check, lhs is used twice.