Index: src/compiler/instruction-selector.cc |
diff --git a/src/compiler/instruction-selector.cc b/src/compiler/instruction-selector.cc |
index 1e2ab974854fd563640ae20861be9871eb9dfceb..3d6c1fedf77201810e0f606dd3e577214a0dee8d 100644 |
--- a/src/compiler/instruction-selector.cc |
+++ b/src/compiler/instruction-selector.cc |
@@ -241,70 +241,17 @@ void InstructionSelector::MarkAsUsed(Node* node) { |
} |
-bool InstructionSelector::IsDouble(const Node* node) const { |
- DCHECK_NOT_NULL(node); |
- int const virtual_register = virtual_registers_[node->id()]; |
- if (virtual_register == InstructionOperand::kInvalidVirtualRegister) { |
- return false; |
- } |
- return sequence()->IsDouble(virtual_register); |
-} |
- |
- |
-void InstructionSelector::MarkAsDouble(Node* node) { |
- DCHECK_NOT_NULL(node); |
- DCHECK(!IsReference(node)); |
- sequence()->MarkAsDouble(GetVirtualRegister(node)); |
-} |
- |
- |
-bool InstructionSelector::IsReference(const Node* node) const { |
- DCHECK_NOT_NULL(node); |
- int const virtual_register = virtual_registers_[node->id()]; |
- if (virtual_register == InstructionOperand::kInvalidVirtualRegister) { |
- return false; |
- } |
- return sequence()->IsReference(virtual_register); |
-} |
- |
- |
-void InstructionSelector::MarkAsReference(Node* node) { |
- DCHECK_NOT_NULL(node); |
- DCHECK(!IsDouble(node)); |
- sequence()->MarkAsReference(GetVirtualRegister(node)); |
-} |
- |
- |
void InstructionSelector::MarkAsRepresentation(MachineType rep, |
const InstructionOperand& op) { |
UnallocatedOperand unalloc = UnallocatedOperand::cast(op); |
- switch (RepresentationOf(rep)) { |
- case kRepFloat32: |
- case kRepFloat64: |
- sequence()->MarkAsDouble(unalloc.virtual_register()); |
- break; |
- case kRepTagged: |
- sequence()->MarkAsReference(unalloc.virtual_register()); |
- break; |
- default: |
- break; |
- } |
+ rep = RepresentationOf(rep); |
+ sequence()->MarkAsRepresentation(rep, unalloc.virtual_register()); |
} |
void InstructionSelector::MarkAsRepresentation(MachineType rep, Node* node) { |
- DCHECK_NOT_NULL(node); |
- switch (RepresentationOf(rep)) { |
- case kRepFloat32: |
- case kRepFloat64: |
- MarkAsDouble(node); |
- break; |
- case kRepTagged: |
- MarkAsReference(node); |
- break; |
- default: |
- break; |
- } |
+ rep = RepresentationOf(rep); |
+ sequence()->MarkAsRepresentation(rep, GetVirtualRegister(node)); |
} |
@@ -625,9 +572,9 @@ void InstructionSelector::VisitNode(Node* node) { |
case IrOpcode::kExternalConstant: |
return VisitConstant(node); |
case IrOpcode::kFloat32Constant: |
- return MarkAsDouble(node), VisitConstant(node); |
+ return MarkAsFloat32(node), VisitConstant(node); |
case IrOpcode::kFloat64Constant: |
- return MarkAsDouble(node), VisitConstant(node); |
+ return MarkAsFloat64(node), VisitConstant(node); |
case IrOpcode::kHeapConstant: |
return MarkAsReference(node), VisitConstant(node); |
case IrOpcode::kNumberConstant: { |
@@ -648,125 +595,125 @@ void InstructionSelector::VisitNode(Node* node) { |
case IrOpcode::kStore: |
return VisitStore(node); |
case IrOpcode::kWord32And: |
- return VisitWord32And(node); |
+ return MarkAsWord32(node), VisitWord32And(node); |
case IrOpcode::kWord32Or: |
- return VisitWord32Or(node); |
+ return MarkAsWord32(node), VisitWord32Or(node); |
case IrOpcode::kWord32Xor: |
- return VisitWord32Xor(node); |
+ return MarkAsWord32(node), VisitWord32Xor(node); |
case IrOpcode::kWord32Shl: |
- return VisitWord32Shl(node); |
+ return MarkAsWord32(node), VisitWord32Shl(node); |
case IrOpcode::kWord32Shr: |
- return VisitWord32Shr(node); |
+ return MarkAsWord32(node), VisitWord32Shr(node); |
case IrOpcode::kWord32Sar: |
- return VisitWord32Sar(node); |
+ return MarkAsWord32(node), VisitWord32Sar(node); |
case IrOpcode::kWord32Ror: |
- return VisitWord32Ror(node); |
+ return MarkAsWord32(node), VisitWord32Ror(node); |
case IrOpcode::kWord32Equal: |
return VisitWord32Equal(node); |
case IrOpcode::kWord32Clz: |
- return VisitWord32Clz(node); |
+ return MarkAsWord32(node), VisitWord32Clz(node); |
case IrOpcode::kWord64And: |
- return VisitWord64And(node); |
+ return MarkAsWord64(node), VisitWord64And(node); |
case IrOpcode::kWord64Or: |
- return VisitWord64Or(node); |
+ return MarkAsWord64(node), VisitWord64Or(node); |
case IrOpcode::kWord64Xor: |
- return VisitWord64Xor(node); |
+ return MarkAsWord64(node), VisitWord64Xor(node); |
case IrOpcode::kWord64Shl: |
- return VisitWord64Shl(node); |
+ return MarkAsWord64(node), VisitWord64Shl(node); |
case IrOpcode::kWord64Shr: |
- return VisitWord64Shr(node); |
+ return MarkAsWord64(node), VisitWord64Shr(node); |
case IrOpcode::kWord64Sar: |
- return VisitWord64Sar(node); |
+ return MarkAsWord64(node), VisitWord64Sar(node); |
case IrOpcode::kWord64Ror: |
- return VisitWord64Ror(node); |
+ return MarkAsWord64(node), VisitWord64Ror(node); |
case IrOpcode::kWord64Equal: |
return VisitWord64Equal(node); |
case IrOpcode::kInt32Add: |
- return VisitInt32Add(node); |
+ return MarkAsWord32(node), VisitInt32Add(node); |
case IrOpcode::kInt32AddWithOverflow: |
- return VisitInt32AddWithOverflow(node); |
+ return MarkAsWord32(node), VisitInt32AddWithOverflow(node); |
case IrOpcode::kInt32Sub: |
- return VisitInt32Sub(node); |
+ return MarkAsWord32(node), VisitInt32Sub(node); |
case IrOpcode::kInt32SubWithOverflow: |
return VisitInt32SubWithOverflow(node); |
case IrOpcode::kInt32Mul: |
- return VisitInt32Mul(node); |
+ return MarkAsWord32(node), VisitInt32Mul(node); |
case IrOpcode::kInt32MulHigh: |
return VisitInt32MulHigh(node); |
case IrOpcode::kInt32Div: |
- return VisitInt32Div(node); |
+ return MarkAsWord32(node), VisitInt32Div(node); |
case IrOpcode::kInt32Mod: |
- return VisitInt32Mod(node); |
+ return MarkAsWord32(node), VisitInt32Mod(node); |
case IrOpcode::kInt32LessThan: |
return VisitInt32LessThan(node); |
case IrOpcode::kInt32LessThanOrEqual: |
return VisitInt32LessThanOrEqual(node); |
case IrOpcode::kUint32Div: |
- return VisitUint32Div(node); |
+ return MarkAsWord32(node), VisitUint32Div(node); |
case IrOpcode::kUint32LessThan: |
return VisitUint32LessThan(node); |
case IrOpcode::kUint32LessThanOrEqual: |
return VisitUint32LessThanOrEqual(node); |
case IrOpcode::kUint32Mod: |
- return VisitUint32Mod(node); |
+ return MarkAsWord32(node), VisitUint32Mod(node); |
case IrOpcode::kUint32MulHigh: |
return VisitUint32MulHigh(node); |
case IrOpcode::kInt64Add: |
- return VisitInt64Add(node); |
+ return MarkAsWord64(node), VisitInt64Add(node); |
case IrOpcode::kInt64Sub: |
- return VisitInt64Sub(node); |
+ return MarkAsWord64(node), VisitInt64Sub(node); |
case IrOpcode::kInt64Mul: |
- return VisitInt64Mul(node); |
+ return MarkAsWord64(node), VisitInt64Mul(node); |
case IrOpcode::kInt64Div: |
- return VisitInt64Div(node); |
+ return MarkAsWord64(node), VisitInt64Div(node); |
case IrOpcode::kInt64Mod: |
- return VisitInt64Mod(node); |
+ return MarkAsWord64(node), VisitInt64Mod(node); |
case IrOpcode::kInt64LessThan: |
return VisitInt64LessThan(node); |
case IrOpcode::kInt64LessThanOrEqual: |
return VisitInt64LessThanOrEqual(node); |
case IrOpcode::kUint64Div: |
- return VisitUint64Div(node); |
+ return MarkAsWord64(node), VisitUint64Div(node); |
case IrOpcode::kUint64LessThan: |
return VisitUint64LessThan(node); |
case IrOpcode::kUint64Mod: |
- return VisitUint64Mod(node); |
+ return MarkAsWord64(node), VisitUint64Mod(node); |
case IrOpcode::kChangeFloat32ToFloat64: |
- return MarkAsDouble(node), VisitChangeFloat32ToFloat64(node); |
+ return MarkAsFloat64(node), VisitChangeFloat32ToFloat64(node); |
case IrOpcode::kChangeInt32ToFloat64: |
- return MarkAsDouble(node), VisitChangeInt32ToFloat64(node); |
+ return MarkAsFloat64(node), VisitChangeInt32ToFloat64(node); |
case IrOpcode::kChangeUint32ToFloat64: |
- return MarkAsDouble(node), VisitChangeUint32ToFloat64(node); |
+ return MarkAsFloat64(node), VisitChangeUint32ToFloat64(node); |
case IrOpcode::kChangeFloat64ToInt32: |
- return VisitChangeFloat64ToInt32(node); |
+ return MarkAsWord32(node), VisitChangeFloat64ToInt32(node); |
case IrOpcode::kChangeFloat64ToUint32: |
- return VisitChangeFloat64ToUint32(node); |
+ return MarkAsWord32(node), VisitChangeFloat64ToUint32(node); |
case IrOpcode::kChangeInt32ToInt64: |
- return VisitChangeInt32ToInt64(node); |
+ return MarkAsWord64(node), VisitChangeInt32ToInt64(node); |
case IrOpcode::kChangeUint32ToUint64: |
- return VisitChangeUint32ToUint64(node); |
+ return MarkAsWord64(node), VisitChangeUint32ToUint64(node); |
case IrOpcode::kTruncateFloat64ToFloat32: |
- return MarkAsDouble(node), VisitTruncateFloat64ToFloat32(node); |
+ return MarkAsFloat32(node), VisitTruncateFloat64ToFloat32(node); |
case IrOpcode::kTruncateFloat64ToInt32: |
- return VisitTruncateFloat64ToInt32(node); |
+ return MarkAsWord32(node), VisitTruncateFloat64ToInt32(node); |
case IrOpcode::kTruncateInt64ToInt32: |
- return VisitTruncateInt64ToInt32(node); |
+ return MarkAsWord32(node), VisitTruncateInt64ToInt32(node); |
case IrOpcode::kFloat32Add: |
- return MarkAsDouble(node), VisitFloat32Add(node); |
+ return MarkAsFloat32(node), VisitFloat32Add(node); |
case IrOpcode::kFloat32Sub: |
- return MarkAsDouble(node), VisitFloat32Sub(node); |
+ return MarkAsFloat32(node), VisitFloat32Sub(node); |
case IrOpcode::kFloat32Mul: |
- return MarkAsDouble(node), VisitFloat32Mul(node); |
+ return MarkAsFloat32(node), VisitFloat32Mul(node); |
case IrOpcode::kFloat32Div: |
- return MarkAsDouble(node), VisitFloat32Div(node); |
+ return MarkAsFloat32(node), VisitFloat32Div(node); |
case IrOpcode::kFloat32Min: |
- return MarkAsDouble(node), VisitFloat32Min(node); |
+ return MarkAsFloat32(node), VisitFloat32Min(node); |
case IrOpcode::kFloat32Max: |
- return MarkAsDouble(node), VisitFloat32Max(node); |
+ return MarkAsFloat32(node), VisitFloat32Max(node); |
case IrOpcode::kFloat32Abs: |
- return MarkAsDouble(node), VisitFloat32Abs(node); |
+ return MarkAsFloat32(node), VisitFloat32Abs(node); |
case IrOpcode::kFloat32Sqrt: |
- return MarkAsDouble(node), VisitFloat32Sqrt(node); |
+ return MarkAsFloat32(node), VisitFloat32Sqrt(node); |
case IrOpcode::kFloat32Equal: |
return VisitFloat32Equal(node); |
case IrOpcode::kFloat32LessThan: |
@@ -774,23 +721,23 @@ void InstructionSelector::VisitNode(Node* node) { |
case IrOpcode::kFloat32LessThanOrEqual: |
return VisitFloat32LessThanOrEqual(node); |
case IrOpcode::kFloat64Add: |
- return MarkAsDouble(node), VisitFloat64Add(node); |
+ return MarkAsFloat64(node), VisitFloat64Add(node); |
case IrOpcode::kFloat64Sub: |
- return MarkAsDouble(node), VisitFloat64Sub(node); |
+ return MarkAsFloat64(node), VisitFloat64Sub(node); |
case IrOpcode::kFloat64Mul: |
- return MarkAsDouble(node), VisitFloat64Mul(node); |
+ return MarkAsFloat64(node), VisitFloat64Mul(node); |
case IrOpcode::kFloat64Div: |
- return MarkAsDouble(node), VisitFloat64Div(node); |
+ return MarkAsFloat64(node), VisitFloat64Div(node); |
case IrOpcode::kFloat64Mod: |
- return MarkAsDouble(node), VisitFloat64Mod(node); |
+ return MarkAsFloat64(node), VisitFloat64Mod(node); |
case IrOpcode::kFloat64Min: |
- return MarkAsDouble(node), VisitFloat64Min(node); |
+ return MarkAsFloat64(node), VisitFloat64Min(node); |
case IrOpcode::kFloat64Max: |
- return MarkAsDouble(node), VisitFloat64Max(node); |
+ return MarkAsFloat64(node), VisitFloat64Max(node); |
case IrOpcode::kFloat64Abs: |
- return MarkAsDouble(node), VisitFloat64Abs(node); |
+ return MarkAsFloat64(node), VisitFloat64Abs(node); |
case IrOpcode::kFloat64Sqrt: |
- return MarkAsDouble(node), VisitFloat64Sqrt(node); |
+ return MarkAsFloat64(node), VisitFloat64Sqrt(node); |
case IrOpcode::kFloat64Equal: |
return VisitFloat64Equal(node); |
case IrOpcode::kFloat64LessThan: |
@@ -798,19 +745,19 @@ void InstructionSelector::VisitNode(Node* node) { |
case IrOpcode::kFloat64LessThanOrEqual: |
return VisitFloat64LessThanOrEqual(node); |
case IrOpcode::kFloat64RoundDown: |
- return MarkAsDouble(node), VisitFloat64RoundDown(node); |
+ return MarkAsFloat64(node), VisitFloat64RoundDown(node); |
case IrOpcode::kFloat64RoundTruncate: |
- return MarkAsDouble(node), VisitFloat64RoundTruncate(node); |
+ return MarkAsFloat64(node), VisitFloat64RoundTruncate(node); |
case IrOpcode::kFloat64RoundTiesAway: |
- return MarkAsDouble(node), VisitFloat64RoundTiesAway(node); |
+ return MarkAsFloat64(node), VisitFloat64RoundTiesAway(node); |
case IrOpcode::kFloat64ExtractLowWord32: |
- return VisitFloat64ExtractLowWord32(node); |
+ return MarkAsWord32(node), VisitFloat64ExtractLowWord32(node); |
case IrOpcode::kFloat64ExtractHighWord32: |
- return VisitFloat64ExtractHighWord32(node); |
+ return MarkAsWord32(node), VisitFloat64ExtractHighWord32(node); |
case IrOpcode::kFloat64InsertLowWord32: |
- return MarkAsDouble(node), VisitFloat64InsertLowWord32(node); |
+ return MarkAsFloat64(node), VisitFloat64InsertLowWord32(node); |
case IrOpcode::kFloat64InsertHighWord32: |
- return MarkAsDouble(node), VisitFloat64InsertHighWord32(node); |
+ return MarkAsFloat64(node), VisitFloat64InsertHighWord32(node); |
case IrOpcode::kLoadStackPointer: |
return VisitLoadStackPointer(node); |
case IrOpcode::kCheckedLoad: { |