Index: src/compiler/simplified-lowering.cc |
diff --git a/src/compiler/simplified-lowering.cc b/src/compiler/simplified-lowering.cc |
index c7700068026500611b6ac30a74c7675b6500b461..86cae22269b2c0482f4977c50b50ec0d9097d92c 100644 |
--- a/src/compiler/simplified-lowering.cc |
+++ b/src/compiler/simplified-lowering.cc |
@@ -807,41 +807,10 @@ class RepresentationSelector { |
VisitBinop(node, UseInfo::TruncatingFloat64(), |
MachineRepresentation::kFloat64); |
} |
- void VisitInt32Binop(Node* node) { |
- VisitBinop(node, UseInfo::TruncatingWord32(), |
- MachineRepresentation::kWord32); |
- } |
void VisitWord32TruncatingBinop(Node* node) { |
VisitBinop(node, UseInfo::TruncatingWord32(), |
MachineRepresentation::kWord32); |
} |
- void VisitUint32Binop(Node* node) { |
- VisitBinop(node, UseInfo::TruncatingWord32(), |
- MachineRepresentation::kWord32); |
- } |
- void VisitInt64Binop(Node* node) { |
- VisitBinop(node, UseInfo::TruncatingWord64(), |
- MachineRepresentation::kWord64); |
- } |
- void VisitUint64Binop(Node* node) { |
- VisitBinop(node, UseInfo::TruncatingWord64(), |
- MachineRepresentation::kWord64); |
- } |
- void VisitFloat64Cmp(Node* node) { |
- VisitBinop(node, UseInfo::TruncatingFloat64(), MachineRepresentation::kBit); |
- } |
- void VisitInt32Cmp(Node* node) { |
- VisitBinop(node, UseInfo::TruncatingWord32(), MachineRepresentation::kBit); |
- } |
- void VisitUint32Cmp(Node* node) { |
- VisitBinop(node, UseInfo::TruncatingWord32(), MachineRepresentation::kBit); |
- } |
- void VisitInt64Cmp(Node* node) { |
- VisitBinop(node, UseInfo::TruncatingWord64(), MachineRepresentation::kBit); |
- } |
- void VisitUint64Cmp(Node* node) { |
- VisitBinop(node, UseInfo::TruncatingWord64(), MachineRepresentation::kBit); |
- } |
// Infer representation for phi-like nodes. |
// The {node} parameter is only used to decide on the int64 representation. |
@@ -1308,12 +1277,9 @@ class RepresentationSelector { |
// tho Start doesn't really produce a value, we have to say Tagged |
// here, otherwise the input conversion will fail. |
return VisitLeaf(node, MachineRepresentation::kTagged); |
- case IrOpcode::kParameter: { |
+ case IrOpcode::kParameter: |
// TODO(titzer): use representation from linkage. |
- ProcessInput(node, 0, UseInfo::None()); |
- SetOutput(node, MachineRepresentation::kTagged); |
- return; |
- } |
+ return VisitUnop(node, UseInfo::None(), MachineRepresentation::kTagged); |
case IrOpcode::kInt32Constant: |
return VisitLeaf(node, MachineRepresentation::kWord32); |
case IrOpcode::kInt64Constant: |
@@ -1381,6 +1347,8 @@ class RepresentationSelector { |
node->AppendInput(jsgraph_->zone(), jsgraph_->Int32Constant(0)); |
NodeProperties::ChangeOp(node, lowering->machine()->Word32Equal()); |
} else { |
+ DCHECK_EQ(input_info->representation(), |
+ MachineRepresentation::kTagged); |
// BooleanNot(x: kRepTagged) => WordEqual(x, #false) |
node->AppendInput(jsgraph_->zone(), jsgraph_->FalseConstant()); |
NodeProperties::ChangeOp(node, lowering->machine()->WordEqual()); |
@@ -1402,7 +1370,8 @@ class RepresentationSelector { |
rhs_type->Is(Type::Unsigned32OrMinusZeroOrNaN()) && |
OneInputCannotBe(node, type_cache_.kZeroish))) { |
// => unsigned Int32Cmp |
- VisitUint32Cmp(node); |
+ VisitBinop(node, UseInfo::TruncatingWord32(), |
+ MachineRepresentation::kBit); |
if (lower()) NodeProperties::ChangeOp(node, Uint32Op(node)); |
return; |
} |
@@ -1412,12 +1381,14 @@ class RepresentationSelector { |
rhs_type->Is(Type::Signed32OrMinusZeroOrNaN()) && |
OneInputCannotBe(node, type_cache_.kZeroish))) { |
// => signed Int32Cmp |
- VisitInt32Cmp(node); |
+ VisitBinop(node, UseInfo::TruncatingWord32(), |
+ MachineRepresentation::kBit); |
if (lower()) NodeProperties::ChangeOp(node, Int32Op(node)); |
return; |
} |
// => Float64Cmp |
- VisitFloat64Cmp(node); |
+ VisitBinop(node, UseInfo::TruncatingFloat64(), |
+ MachineRepresentation::kBit); |
if (lower()) NodeProperties::ChangeOp(node, Float64Op(node)); |
return; |
} |
@@ -1427,16 +1398,19 @@ class RepresentationSelector { |
if (TypeOf(node->InputAt(0))->Is(Type::Unsigned32()) && |
TypeOf(node->InputAt(1))->Is(Type::Unsigned32())) { |
// => unsigned Int32Cmp |
- VisitUint32Cmp(node); |
+ VisitBinop(node, UseInfo::TruncatingWord32(), |
+ MachineRepresentation::kBit); |
if (lower()) NodeProperties::ChangeOp(node, Uint32Op(node)); |
} else if (TypeOf(node->InputAt(0))->Is(Type::Signed32()) && |
TypeOf(node->InputAt(1))->Is(Type::Signed32())) { |
// => signed Int32Cmp |
- VisitInt32Cmp(node); |
+ VisitBinop(node, UseInfo::TruncatingWord32(), |
+ MachineRepresentation::kBit); |
if (lower()) NodeProperties::ChangeOp(node, Int32Op(node)); |
} else { |
// => Float64Cmp |
- VisitFloat64Cmp(node); |
+ VisitBinop(node, UseInfo::TruncatingFloat64(), |
+ MachineRepresentation::kBit); |
if (lower()) NodeProperties::ChangeOp(node, Float64Op(node)); |
} |
return; |
@@ -1460,13 +1434,15 @@ class RepresentationSelector { |
if (TypeOf(node->InputAt(0))->Is(Type::Unsigned32()) && |
TypeOf(node->InputAt(1))->Is(Type::Unsigned32())) { |
// => unsigned Int32Cmp |
- VisitUint32Cmp(node); |
+ VisitBinop(node, UseInfo::TruncatingWord32(), |
+ MachineRepresentation::kBit); |
if (lower()) ChangeToPureOp(node, Uint32Op(node)); |
return; |
} else if (TypeOf(node->InputAt(0))->Is(Type::Signed32()) && |
TypeOf(node->InputAt(1))->Is(Type::Signed32())) { |
// => signed Int32Cmp |
- VisitInt32Cmp(node); |
+ VisitBinop(node, UseInfo::TruncatingWord32(), |
+ MachineRepresentation::kBit); |
if (lower()) ChangeToPureOp(node, Int32Op(node)); |
return; |
} |
@@ -1604,7 +1580,7 @@ class RepresentationSelector { |
if (BothInputsAreSigned32(node)) { |
if (NodeProperties::GetType(node)->Is(Type::Signed32())) { |
// => signed Int32Div |
- VisitInt32Binop(node); |
+ VisitWord32TruncatingBinop(node); |
if (lower()) DeferReplacement(node, lowering->Int32Div(node)); |
return; |
} |
@@ -1675,7 +1651,7 @@ class RepresentationSelector { |
if (BothInputsAreSigned32(node)) { |
if (NodeProperties::GetType(node)->Is(Type::Signed32())) { |
// => signed Int32Div |
- VisitInt32Binop(node); |
+ VisitWord32TruncatingBinop(node); |
if (lower()) DeferReplacement(node, lowering->Int32Div(node)); |
return; |
} |
@@ -1742,7 +1718,7 @@ class RepresentationSelector { |
case IrOpcode::kNumberBitwiseOr: |
case IrOpcode::kNumberBitwiseXor: |
case IrOpcode::kNumberBitwiseAnd: { |
- VisitInt32Binop(node); |
+ VisitWord32TruncatingBinop(node); |
if (lower()) NodeProperties::ChangeOp(node, Int32Op(node)); |
return; |
} |
@@ -1904,13 +1880,13 @@ class RepresentationSelector { |
case IrOpcode::kNumberMax: { |
// TODO(turbofan): We should consider feedback types here as well. |
if (BothInputsAreUnsigned32(node)) { |
- VisitUint32Binop(node); |
+ VisitWord32TruncatingBinop(node); |
if (lower()) { |
lowering->DoMax(node, lowering->machine()->Uint32LessThan(), |
MachineRepresentation::kWord32); |
} |
} else if (BothInputsAreSigned32(node)) { |
- VisitInt32Binop(node); |
+ VisitWord32TruncatingBinop(node); |
if (lower()) { |
lowering->DoMax(node, lowering->machine()->Int32LessThan(), |
MachineRepresentation::kWord32); |
@@ -1930,13 +1906,13 @@ class RepresentationSelector { |
case IrOpcode::kNumberMin: { |
// TODO(turbofan): We should consider feedback types here as well. |
if (BothInputsAreUnsigned32(node)) { |
- VisitUint32Binop(node); |
+ VisitWord32TruncatingBinop(node); |
if (lower()) { |
lowering->DoMin(node, lowering->machine()->Uint32LessThan(), |
MachineRepresentation::kWord32); |
} |
} else if (BothInputsAreSigned32(node)) { |
- VisitInt32Binop(node); |
+ VisitWord32TruncatingBinop(node); |
if (lower()) { |
lowering->DoMin(node, lowering->machine()->Int32LessThan(), |
MachineRepresentation::kWord32); |