Index: src/compiler/instruction-selector.cc |
diff --git a/src/compiler/instruction-selector.cc b/src/compiler/instruction-selector.cc |
index 791aa2911c9decdc19596b50c817d888eb2b7ddd..2efb822310d32dd9298cb257367874c0d67cbe61 100644 |
--- a/src/compiler/instruction-selector.cc |
+++ b/src/compiler/instruction-selector.cc |
@@ -607,7 +607,7 @@ void InstructionSelector::VisitNode(Node* node) { |
// TODO(turbofan): only mark non-smis as references. |
return MarkAsReference(node), VisitConstant(node); |
case IrOpcode::kCall: |
- return VisitCall(node, NULL, NULL); |
+ return VisitCall(node); |
case IrOpcode::kFrameState: |
case IrOpcode::kStateValues: |
return; |
@@ -745,88 +745,6 @@ void InstructionSelector::VisitNode(Node* node) { |
#if V8_TURBOFAN_BACKEND |
-void InstructionSelector::VisitWord32Equal(Node* node) { |
- FlagsContinuation cont(kEqual, node); |
- Int32BinopMatcher m(node); |
- if (m.right().Is(0)) { |
- return VisitWord32Test(m.left().node(), &cont); |
- } |
- VisitWord32Compare(node, &cont); |
-} |
- |
- |
-void InstructionSelector::VisitInt32LessThan(Node* node) { |
- FlagsContinuation cont(kSignedLessThan, node); |
- VisitWord32Compare(node, &cont); |
-} |
- |
- |
-void InstructionSelector::VisitInt32LessThanOrEqual(Node* node) { |
- FlagsContinuation cont(kSignedLessThanOrEqual, node); |
- VisitWord32Compare(node, &cont); |
-} |
- |
- |
-void InstructionSelector::VisitUint32LessThan(Node* node) { |
- FlagsContinuation cont(kUnsignedLessThan, node); |
- VisitWord32Compare(node, &cont); |
-} |
- |
- |
-void InstructionSelector::VisitUint32LessThanOrEqual(Node* node) { |
- FlagsContinuation cont(kUnsignedLessThanOrEqual, node); |
- VisitWord32Compare(node, &cont); |
-} |
- |
- |
-void InstructionSelector::VisitWord64Equal(Node* node) { |
- FlagsContinuation cont(kEqual, node); |
- Int64BinopMatcher m(node); |
- if (m.right().Is(0)) { |
- return VisitWord64Test(m.left().node(), &cont); |
- } |
- VisitWord64Compare(node, &cont); |
-} |
- |
- |
-void InstructionSelector::VisitInt32AddWithOverflow(Node* node) { |
- if (Node* ovf = node->FindProjection(1)) { |
- FlagsContinuation cont(kOverflow, ovf); |
- return VisitInt32AddWithOverflow(node, &cont); |
- } |
- FlagsContinuation cont; |
- VisitInt32AddWithOverflow(node, &cont); |
-} |
- |
- |
-void InstructionSelector::VisitInt32SubWithOverflow(Node* node) { |
- if (Node* ovf = node->FindProjection(1)) { |
- FlagsContinuation cont(kOverflow, ovf); |
- return VisitInt32SubWithOverflow(node, &cont); |
- } |
- FlagsContinuation cont; |
- VisitInt32SubWithOverflow(node, &cont); |
-} |
- |
- |
-void InstructionSelector::VisitInt64LessThan(Node* node) { |
- FlagsContinuation cont(kSignedLessThan, node); |
- VisitWord64Compare(node, &cont); |
-} |
- |
- |
-void InstructionSelector::VisitInt64LessThanOrEqual(Node* node) { |
- FlagsContinuation cont(kSignedLessThanOrEqual, node); |
- VisitWord64Compare(node, &cont); |
-} |
- |
- |
-void InstructionSelector::VisitUint64LessThan(Node* node) { |
- FlagsContinuation cont(kUnsignedLessThan, node); |
- VisitWord64Compare(node, &cont); |
-} |
- |
- |
void InstructionSelector::VisitTruncateFloat64ToInt32(Node* node) { |
OperandGenerator g(this); |
Emit(kArchTruncateDoubleToI, g.DefineAsRegister(node), |
@@ -834,24 +752,6 @@ void InstructionSelector::VisitTruncateFloat64ToInt32(Node* node) { |
} |
-void InstructionSelector::VisitFloat64Equal(Node* node) { |
- FlagsContinuation cont(kUnorderedEqual, node); |
- VisitFloat64Compare(node, &cont); |
-} |
- |
- |
-void InstructionSelector::VisitFloat64LessThan(Node* node) { |
- FlagsContinuation cont(kUnorderedLessThan, node); |
- VisitFloat64Compare(node, &cont); |
-} |
- |
- |
-void InstructionSelector::VisitFloat64LessThanOrEqual(Node* node) { |
- FlagsContinuation cont(kUnorderedLessThanOrEqual, node); |
- VisitFloat64Compare(node, &cont); |
-} |
- |
- |
void InstructionSelector::VisitLoadStackPointer(Node* node) { |
OperandGenerator g(this); |
Emit(kArchStackPointer, g.DefineAsRegister(node)); |
@@ -883,6 +783,9 @@ void InstructionSelector::VisitWord64Sar(Node* node) { UNIMPLEMENTED(); } |
void InstructionSelector::VisitWord64Ror(Node* node) { UNIMPLEMENTED(); } |
+void InstructionSelector::VisitWord64Equal(Node* node) { UNIMPLEMENTED(); } |
+ |
+ |
void InstructionSelector::VisitInt64Add(Node* node) { UNIMPLEMENTED(); } |
@@ -895,12 +798,23 @@ void InstructionSelector::VisitInt64Mul(Node* node) { UNIMPLEMENTED(); } |
void InstructionSelector::VisitInt64Div(Node* node) { UNIMPLEMENTED(); } |
+void InstructionSelector::VisitInt64LessThan(Node* node) { UNIMPLEMENTED(); } |
+ |
+ |
+void InstructionSelector::VisitInt64LessThanOrEqual(Node* node) { |
+ UNIMPLEMENTED(); |
+} |
+ |
+ |
void InstructionSelector::VisitUint64Div(Node* node) { UNIMPLEMENTED(); } |
void InstructionSelector::VisitInt64Mod(Node* node) { UNIMPLEMENTED(); } |
+void InstructionSelector::VisitUint64LessThan(Node* node) { UNIMPLEMENTED(); } |
+ |
+ |
void InstructionSelector::VisitUint64Mod(Node* node) { UNIMPLEMENTED(); } |
@@ -921,23 +835,6 @@ void InstructionSelector::VisitTruncateInt64ToInt32(Node* node) { |
#endif // V8_TARGET_ARCH_32_BIT && V8_TURBOFAN_BACKEND |
-// 32-bit targets and unsupported architectures need dummy implementations of |
-// selected 64-bit ops. |
-#if V8_TARGET_ARCH_32_BIT || !V8_TURBOFAN_BACKEND |
- |
-void InstructionSelector::VisitWord64Test(Node* node, FlagsContinuation* cont) { |
- UNIMPLEMENTED(); |
-} |
- |
- |
-void InstructionSelector::VisitWord64Compare(Node* node, |
- FlagsContinuation* cont) { |
- UNIMPLEMENTED(); |
-} |
- |
-#endif // V8_TARGET_ARCH_32_BIT || !V8_TURBOFAN_BACKEND |
- |
- |
void InstructionSelector::VisitFinish(Node* node) { |
OperandGenerator g(this); |
Node* value = node->InputAt(0); |
@@ -1001,119 +898,6 @@ void InstructionSelector::VisitGoto(BasicBlock* target) { |
} |
-void InstructionSelector::VisitBranch(Node* branch, BasicBlock* tbranch, |
- BasicBlock* fbranch) { |
- OperandGenerator g(this); |
- Node* user = branch; |
- Node* value = branch->InputAt(0); |
- |
- FlagsContinuation cont(kNotEqual, tbranch, fbranch); |
- |
- // If we can fall through to the true block, invert the branch. |
- if (IsNextInAssemblyOrder(tbranch)) { |
- cont.Negate(); |
- cont.SwapBlocks(); |
- } |
- |
- // Try to combine with comparisons against 0 by simply inverting the branch. |
- while (CanCover(user, value)) { |
- if (value->opcode() == IrOpcode::kWord32Equal) { |
- Int32BinopMatcher m(value); |
- if (m.right().Is(0)) { |
- user = value; |
- value = m.left().node(); |
- cont.Negate(); |
- } else { |
- break; |
- } |
- } else if (value->opcode() == IrOpcode::kWord64Equal) { |
- Int64BinopMatcher m(value); |
- if (m.right().Is(0)) { |
- user = value; |
- value = m.left().node(); |
- cont.Negate(); |
- } else { |
- break; |
- } |
- } else { |
- break; |
- } |
- } |
- |
- // Try to combine the branch with a comparison. |
- if (CanCover(user, value)) { |
- switch (value->opcode()) { |
- case IrOpcode::kWord32Equal: |
- cont.OverwriteAndNegateIfEqual(kEqual); |
- return VisitWord32Compare(value, &cont); |
- case IrOpcode::kInt32LessThan: |
- cont.OverwriteAndNegateIfEqual(kSignedLessThan); |
- return VisitWord32Compare(value, &cont); |
- case IrOpcode::kInt32LessThanOrEqual: |
- cont.OverwriteAndNegateIfEqual(kSignedLessThanOrEqual); |
- return VisitWord32Compare(value, &cont); |
- case IrOpcode::kUint32LessThan: |
- cont.OverwriteAndNegateIfEqual(kUnsignedLessThan); |
- return VisitWord32Compare(value, &cont); |
- case IrOpcode::kUint32LessThanOrEqual: |
- cont.OverwriteAndNegateIfEqual(kUnsignedLessThanOrEqual); |
- return VisitWord32Compare(value, &cont); |
- case IrOpcode::kWord64Equal: |
- cont.OverwriteAndNegateIfEqual(kEqual); |
- return VisitWord64Compare(value, &cont); |
- case IrOpcode::kInt64LessThan: |
- cont.OverwriteAndNegateIfEqual(kSignedLessThan); |
- return VisitWord64Compare(value, &cont); |
- case IrOpcode::kInt64LessThanOrEqual: |
- cont.OverwriteAndNegateIfEqual(kSignedLessThanOrEqual); |
- return VisitWord64Compare(value, &cont); |
- case IrOpcode::kUint64LessThan: |
- cont.OverwriteAndNegateIfEqual(kUnsignedLessThan); |
- return VisitWord64Compare(value, &cont); |
- case IrOpcode::kFloat64Equal: |
- cont.OverwriteAndNegateIfEqual(kUnorderedEqual); |
- return VisitFloat64Compare(value, &cont); |
- case IrOpcode::kFloat64LessThan: |
- cont.OverwriteAndNegateIfEqual(kUnorderedLessThan); |
- return VisitFloat64Compare(value, &cont); |
- case IrOpcode::kFloat64LessThanOrEqual: |
- cont.OverwriteAndNegateIfEqual(kUnorderedLessThanOrEqual); |
- return VisitFloat64Compare(value, &cont); |
- case IrOpcode::kProjection: |
- // Check if this is the overflow output projection of an |
- // <Operation>WithOverflow node. |
- if (OpParameter<size_t>(value) == 1u) { |
- // We cannot combine the <Operation>WithOverflow with this branch |
- // unless the 0th projection (the use of the actual value of the |
- // <Operation> is either NULL, which means there's no use of the |
- // actual value, or was already defined, which means it is scheduled |
- // *AFTER* this branch). |
- Node* node = value->InputAt(0); |
- Node* result = node->FindProjection(0); |
- if (result == NULL || IsDefined(result)) { |
- switch (node->opcode()) { |
- case IrOpcode::kInt32AddWithOverflow: |
- cont.OverwriteAndNegateIfEqual(kOverflow); |
- return VisitInt32AddWithOverflow(node, &cont); |
- case IrOpcode::kInt32SubWithOverflow: |
- cont.OverwriteAndNegateIfEqual(kOverflow); |
- return VisitInt32SubWithOverflow(node, &cont); |
- default: |
- break; |
- } |
- } |
- } |
- break; |
- default: |
- break; |
- } |
- } |
- |
- // Branch could not be combined with a compare, emit compare against 0. |
- VisitWord32Test(value, &cont); |
-} |
- |
- |
void InstructionSelector::VisitReturn(Node* value) { |
OperandGenerator g(this); |
if (value != NULL) { |
@@ -1234,37 +1018,7 @@ MACHINE_OP_LIST(DECLARE_UNIMPLEMENTED_SELECTOR) |
#undef DECLARE_UNIMPLEMENTED_SELECTOR |
-void InstructionSelector::VisitInt32AddWithOverflow(Node* node, |
- FlagsContinuation* cont) { |
- UNIMPLEMENTED(); |
-} |
- |
- |
-void InstructionSelector::VisitInt32SubWithOverflow(Node* node, |
- FlagsContinuation* cont) { |
- UNIMPLEMENTED(); |
-} |
- |
- |
-void InstructionSelector::VisitWord32Test(Node* node, FlagsContinuation* cont) { |
- UNIMPLEMENTED(); |
-} |
- |
- |
-void InstructionSelector::VisitWord32Compare(Node* node, |
- FlagsContinuation* cont) { |
- UNIMPLEMENTED(); |
-} |
- |
- |
-void InstructionSelector::VisitFloat64Compare(Node* node, |
- FlagsContinuation* cont) { |
- UNIMPLEMENTED(); |
-} |
- |
- |
-void InstructionSelector::VisitCall(Node* call, BasicBlock* continuation, |
- BasicBlock* deoptimization) {} |
+void InstructionSelector::VisitCall(Node* node) { UNIMPLEMENTED(); } |
#endif // !V8_TURBOFAN_BACKEND |