Index: src/compiler/x64/instruction-selector-x64.cc |
diff --git a/src/compiler/x64/instruction-selector-x64.cc b/src/compiler/x64/instruction-selector-x64.cc |
index 4c213793f71a59fb313bdca64886a8832d5da0b5..d5ce91d4f56576931ea5b1fdda89fbaae0fec3f4 100644 |
--- a/src/compiler/x64/instruction-selector-x64.cc |
+++ b/src/compiler/x64/instruction-selector-x64.cc |
@@ -2071,12 +2071,8 @@ void VisitWordCompareZero(InstructionSelector* selector, Node* user, |
break; |
case IrOpcode::kInt32Sub: |
return VisitWordCompare(selector, value, kX64Cmp32, cont); |
- case IrOpcode::kInt64Sub: |
- return VisitWord64Compare(selector, value, cont); |
case IrOpcode::kWord32And: |
return VisitWordCompare(selector, value, kX64Test32, cont); |
- case IrOpcode::kWord64And: |
- return VisitWordCompare(selector, value, kX64Test, cont); |
default: |
break; |
} |
@@ -2155,32 +2151,7 @@ void InstructionSelector::VisitWord32Equal(Node* const node) { |
FlagsContinuation cont = FlagsContinuation::ForSet(kEqual, node); |
Int32BinopMatcher m(user); |
if (m.right().Is(0)) { |
- Node* value = m.left().node(); |
- |
- // Try to combine with comparisons against 0 by simply inverting the branch. |
- while (CanCover(user, value) && value->opcode() == IrOpcode::kWord32Equal) { |
- Int32BinopMatcher m(value); |
- if (m.right().Is(0)) { |
- user = value; |
- value = m.left().node(); |
- cont.Negate(); |
- } else { |
- break; |
- } |
- } |
- |
- // Try to combine the branch with a comparison. |
- if (CanCover(user, value)) { |
- switch (value->opcode()) { |
- case IrOpcode::kInt32Sub: |
- return VisitWordCompare(this, value, kX64Cmp32, &cont); |
- case IrOpcode::kWord32And: |
- return VisitWordCompare(this, value, kX64Test32, &cont); |
- default: |
- break; |
- } |
- } |
- return VisitCompareZero(this, value, kX64Cmp32, &cont); |
+ return VisitWordCompareZero(this, m.node(), m.left().node(), &cont); |
} |
VisitWordCompare(this, node, kX64Cmp32, &cont); |
} |