Commit 0e95ed13 authored by André Bargull's avatar André Bargull
Browse files

Bug 1686692 - Part 11: Remove LCompareBAndBranch. r=jandem

Depends on D101880

Differential Revision: https://phabricator.services.mozilla.com/D101881
parent 678734a4
Loading
Loading
Loading
Loading
+0 −20
Original line number Diff line number Diff line
@@ -1508,26 +1508,6 @@ void CodeGenerator::visitCompareB(LCompareB* lir) {
  masm.bind(&done);
}

void CodeGenerator::visitCompareBAndBranch(LCompareBAndBranch* lir) {
  MCompare* mir = lir->cmpMir();
  const ValueOperand lhs = ToValue(lir, LCompareBAndBranch::Lhs);
  const LAllocation* rhs = lir->rhs();

  MOZ_ASSERT(mir->jsop() == JSOp::StrictEq || mir->jsop() == JSOp::StrictNe);

  Assembler::Condition cond = masm.testBoolean(Assembler::NotEqual, lhs);
  jumpToBlock((mir->jsop() == JSOp::StrictEq) ? lir->ifFalse() : lir->ifTrue(),
              cond);

  if (rhs->isConstant()) {
    masm.cmp32(lhs.payloadReg(), Imm32(rhs->toConstant()->toBoolean()));
  } else {
    masm.cmp32(lhs.payloadReg(), ToRegister(rhs));
  }
  emitBranch(JSOpToCondition(mir->compareType(), mir->jsop()), lir->ifTrue(),
             lir->ifFalse());
}

void CodeGenerator::visitBitAndAndBranch(LBitAndAndBranch* baab) {
  ScratchRegisterScope scratch(masm);
  if (baab->right()->isConstant()) {
+0 −24
Original line number Diff line number Diff line
@@ -1436,30 +1436,6 @@ void CodeGenerator::visitCompareB(LCompareB* lir) {
  masm.cmpPtrSet(cond, lhs.valueReg(), scratch, output);
}

void CodeGenerator::visitCompareBAndBranch(LCompareBAndBranch* lir) {
  MCompare* mir = lir->cmpMir();
  const ValueOperand lhs = ToValue(lir, LCompareBAndBranch::Lhs);
  const LAllocation* rhs = lir->rhs();
  const Assembler::Condition cond =
      JSOpToCondition(mir->compareType(), mir->jsop());

  vixl::UseScratchRegisterScope temps(&masm.asVIXL());
  const Register scratch = temps.AcquireX().asUnsized();

  MOZ_ASSERT(mir->jsop() == JSOp::StrictEq || mir->jsop() == JSOp::StrictNe);

  // Load boxed boolean into scratch.
  if (rhs->isConstant()) {
    masm.moveValue(rhs->toConstant()->toJSValue(), ValueOperand(scratch));
  } else {
    masm.boxValue(JSVAL_TYPE_BOOLEAN, ToRegister(rhs), scratch);
  }

  // Compare the entire Value.
  masm.cmpPtr(lhs.valueReg(), scratch);
  emitBranch(cond, lir->ifTrue(), lir->ifFalse());
}

void CodeGenerator::visitBitAndAndBranch(LBitAndAndBranch* baab) {
  if (baab->right()->isConstant()) {
    masm.Tst(toWRegister(baab->left()), Operand(ToInt32(baab->right())));
+0 −22
Original line number Diff line number Diff line
@@ -96,28 +96,6 @@ void CodeGenerator::visitCompareB(LCompareB* lir) {
  masm.bind(&done);
}

void CodeGenerator::visitCompareBAndBranch(LCompareBAndBranch* lir) {
  MCompare* mir = lir->cmpMir();
  const ValueOperand lhs = ToValue(lir, LCompareBAndBranch::Lhs);
  const LAllocation* rhs = lir->rhs();

  MOZ_ASSERT(mir->jsop() == JSOp::StrictEq || mir->jsop() == JSOp::StrictNe);

  MBasicBlock* mirNotBoolean =
      (mir->jsop() == JSOp::StrictEq) ? lir->ifFalse() : lir->ifTrue();
  branchToBlock(lhs.typeReg(), ImmType(JSVAL_TYPE_BOOLEAN), mirNotBoolean,
                Assembler::NotEqual);

  Assembler::Condition cond = JSOpToCondition(mir->compareType(), mir->jsop());
  if (rhs->isConstant()) {
    emitBranch(lhs.payloadReg(), Imm32(rhs->toConstant()->toBoolean()), cond,
               lir->ifTrue(), lir->ifFalse());
  } else {
    emitBranch(lhs.payloadReg(), ToRegister(rhs), cond, lir->ifTrue(),
               lir->ifFalse());
  }
}

void CodeGenerator::visitCompareI64(LCompareI64* lir) {
  MCompare* mir = lir->mir();
  MOZ_ASSERT(mir->compareType() == MCompare::Compare_Int64 ||
+0 −21
Original line number Diff line number Diff line
@@ -150,27 +150,6 @@ void CodeGenerator::visitCompareB(LCompareB* lir) {
  masm.cmpPtrSet(cond, lhs.valueReg(), ScratchRegister, output);
}

void CodeGenerator::visitCompareBAndBranch(LCompareBAndBranch* lir) {
  MCompare* mir = lir->cmpMir();
  const ValueOperand lhs = ToValue(lir, LCompareBAndBranch::Lhs);
  const LAllocation* rhs = lir->rhs();

  MOZ_ASSERT(mir->jsop() == JSOp::StrictEq || mir->jsop() == JSOp::StrictNe);

  // Load boxed boolean in ScratchRegister.
  if (rhs->isConstant()) {
    masm.moveValue(rhs->toConstant()->toJSValue(),
                   ValueOperand(ScratchRegister));
  } else {
    masm.boxValue(JSVAL_TYPE_BOOLEAN, ToRegister(rhs), ScratchRegister);
  }

  // Perform the comparison.
  Assembler::Condition cond = JSOpToCondition(mir->compareType(), mir->jsop());
  emitBranch(lhs.valueReg(), ScratchRegister, cond, lir->ifTrue(),
             lir->ifFalse());
}

void CodeGenerator::visitCompareI64(LCompareI64* lir) {
  MCompare* mir = lir->mir();
  MOZ_ASSERT(mir->compareType() == MCompare::Compare_Int64 ||
+0 −27
Original line number Diff line number Diff line
@@ -1812,33 +1812,6 @@ class LCompareB : public LInstructionHelper<1, BOX_PIECES + 1, 0> {
  MCompare* mir() { return mir_->toCompare(); }
};

class LCompareBAndBranch
    : public LControlInstructionHelper<2, BOX_PIECES + 1, 0> {
  MCompare* cmpMir_;

 public:
  LIR_HEADER(CompareBAndBranch)

  LCompareBAndBranch(MCompare* cmpMir, const LBoxAllocation& lhs,
                     const LAllocation& rhs, MBasicBlock* ifTrue,
                     MBasicBlock* ifFalse)
      : LControlInstructionHelper(classOpcode), cmpMir_(cmpMir) {
    setBoxOperand(Lhs, lhs);
    setOperand(BOX_PIECES, rhs);
    setSuccessor(0, ifTrue);
    setSuccessor(1, ifFalse);
  }

  static const size_t Lhs = 0;

  const LAllocation* rhs() { return getOperand(BOX_PIECES); }

  MBasicBlock* ifTrue() const { return getSuccessor(0); }
  MBasicBlock* ifFalse() const { return getSuccessor(1); }
  MTest* mir() const { return mir_->toTest(); }
  MCompare* cmpMir() const { return cmpMir_; }
};

class LCompareVM : public LCallInstructionHelper<1, 2 * BOX_PIECES, 0> {
 public:
  LIR_HEADER(CompareVM)
Loading