| Index: src/compiler/mips64/instruction-selector-mips64.cc
|
| diff --git a/src/compiler/mips64/instruction-selector-mips64.cc b/src/compiler/mips64/instruction-selector-mips64.cc
|
| index 248b334164a74e96aa92a38547012a2922b4777a..707d3d2c7e6a7d9b6da140ab5fd49abd1ca7bcbc 100644
|
| --- a/src/compiler/mips64/instruction-selector-mips64.cc
|
| +++ b/src/compiler/mips64/instruction-selector-mips64.cc
|
| @@ -57,35 +57,6 @@ class Mips64OperandGenerator FINAL : public OperandGenerator {
|
| }
|
| }
|
|
|
| -
|
| - bool CanBeImmediate(Node* node, InstructionCode opcode,
|
| - FlagsContinuation* cont) {
|
| - int64_t value;
|
| - if (node->opcode() == IrOpcode::kInt32Constant)
|
| - value = OpParameter<int32_t>(node);
|
| - else if (node->opcode() == IrOpcode::kInt64Constant)
|
| - value = OpParameter<int64_t>(node);
|
| - else
|
| - return false;
|
| - switch (ArchOpcodeField::decode(opcode)) {
|
| - case kMips64Cmp32:
|
| - switch (cont->condition()) {
|
| - case kUnsignedLessThan:
|
| - case kUnsignedGreaterThanOrEqual:
|
| - case kUnsignedLessThanOrEqual:
|
| - case kUnsignedGreaterThan:
|
| - // Immediate operands for unsigned 32-bit compare operations
|
| - // should not be sign-extended.
|
| - return is_uint15(value);
|
| - default:
|
| - return false;
|
| - }
|
| - default:
|
| - return is_int16(value);
|
| - }
|
| - }
|
| -
|
| -
|
| private:
|
| bool ImmediateFitsAddrMode1Instruction(int32_t imm) const {
|
| TRACE_UNIMPL();
|
| @@ -830,10 +801,10 @@ void VisitWordCompare(InstructionSelector* selector, Node* node,
|
| Node* right = node->InputAt(1);
|
|
|
| // Match immediates on left or right side of comparison.
|
| - if (g.CanBeImmediate(right, opcode, cont)) {
|
| + if (g.CanBeImmediate(right, opcode)) {
|
| VisitCompare(selector, opcode, g.UseRegister(left), g.UseImmediate(right),
|
| cont);
|
| - } else if (g.CanBeImmediate(left, opcode, cont)) {
|
| + } else if (g.CanBeImmediate(left, opcode)) {
|
| if (!commutative) cont->Commute();
|
| VisitCompare(selector, opcode, g.UseRegister(right), g.UseImmediate(left),
|
| cont);
|
| @@ -846,7 +817,7 @@ void VisitWordCompare(InstructionSelector* selector, Node* node,
|
|
|
| void VisitWord32Compare(InstructionSelector* selector, Node* node,
|
| FlagsContinuation* cont) {
|
| - VisitWordCompare(selector, node, kMips64Cmp32, cont, false);
|
| + VisitWordCompare(selector, node, kMips64Cmp, cont, false);
|
| }
|
|
|
|
|
| @@ -858,10 +829,10 @@ void VisitWord64Compare(InstructionSelector* selector, Node* node,
|
| } // namespace
|
|
|
|
|
| -void EmitWordCompareZero(InstructionSelector* selector, InstructionCode opcode,
|
| - Node* value, FlagsContinuation* cont) {
|
| +void EmitWordCompareZero(InstructionSelector* selector, Node* value,
|
| + FlagsContinuation* cont) {
|
| Mips64OperandGenerator g(selector);
|
| - opcode = cont->Encode(opcode);
|
| + InstructionCode opcode = cont->Encode(kMips64Cmp);
|
| InstructionOperand const value_operand = g.UseRegister(value);
|
| if (cont->IsBranch()) {
|
| selector->Emit(opcode, g.NoOutput(), value_operand, g.TempImmediate(0),
|
| @@ -877,13 +848,7 @@ void EmitWordCompareZero(InstructionSelector* selector, InstructionCode opcode,
|
| // Shared routine for word comparisons against zero.
|
| void VisitWordCompareZero(InstructionSelector* selector, Node* user,
|
| Node* value, FlagsContinuation* cont) {
|
| - // Initially set comparison against 0 to be 64-bit variant for branches that
|
| - // cannot combine.
|
| - InstructionCode opcode = kMips64Cmp;
|
| while (selector->CanCover(user, value)) {
|
| - if (user->opcode() == IrOpcode::kWord32Equal) {
|
| - opcode = kMips64Cmp32;
|
| - }
|
| switch (value->opcode()) {
|
| case IrOpcode::kWord32Equal: {
|
| // Combine with comparisons against 0 by simply inverting the
|
| @@ -893,7 +858,6 @@ void VisitWordCompareZero(InstructionSelector* selector, Node* user,
|
| user = value;
|
| value = m.left().node();
|
| cont->Negate();
|
| - opcode = kMips64Cmp32;
|
| continue;
|
| }
|
| cont->OverwriteAndNegateIfEqual(kEqual);
|
| @@ -968,7 +932,6 @@ void VisitWordCompareZero(InstructionSelector* selector, Node* user,
|
| }
|
| break;
|
| case IrOpcode::kWord32And:
|
| - return VisitWordCompare(selector, value, kMips64Tst32, cont, true);
|
| case IrOpcode::kWord64And:
|
| return VisitWordCompare(selector, value, kMips64Tst, cont, true);
|
| default:
|
| @@ -978,7 +941,7 @@ void VisitWordCompareZero(InstructionSelector* selector, Node* user,
|
| }
|
|
|
| // Continuation could not be combined with a compare, emit compare against 0.
|
| - EmitWordCompareZero(selector, opcode, value, cont);
|
| + EmitWordCompareZero(selector, value, cont);
|
| }
|
|
|
|
|
|
|