| Index: src/compiler/simplified-lowering.cc
|
| diff --git a/src/compiler/simplified-lowering.cc b/src/compiler/simplified-lowering.cc
|
| index 825de35aa5aa69deb8b085d31ac613b41e90c47b..68e7567a5c7ccd346d766fe29ab2b27ad2ee9f67 100644
|
| --- a/src/compiler/simplified-lowering.cc
|
| +++ b/src/compiler/simplified-lowering.cc
|
| @@ -689,6 +689,21 @@ class RepresentationSelector {
|
| if (lower()) node->set_op(Float64Op(node));
|
| break;
|
| }
|
| + case IrOpcode::kNumberShiftLeft: {
|
| + VisitBinop(node, kMachInt32, kMachUint32, kMachInt32);
|
| + if (lower()) lowering->DoShift(node, lowering->machine()->Word32Shl());
|
| + break;
|
| + }
|
| + case IrOpcode::kNumberShiftRight: {
|
| + VisitBinop(node, kMachInt32, kMachUint32, kMachInt32);
|
| + if (lower()) lowering->DoShift(node, lowering->machine()->Word32Sar());
|
| + break;
|
| + }
|
| + case IrOpcode::kNumberShiftRightLogical: {
|
| + VisitBinop(node, kMachUint32, kMachUint32, kMachUint32);
|
| + if (lower()) lowering->DoShift(node, lowering->machine()->Word32Shr());
|
| + break;
|
| + }
|
| case IrOpcode::kNumberToInt32: {
|
| MachineTypeUnion use_rep = use & kRepMask;
|
| Node* input = node->InputAt(0);
|
| @@ -1118,6 +1133,14 @@ Node* SimplifiedLowering::IsTagged(Node* node) {
|
| }
|
|
|
|
|
| +SimplifiedLowering::SimplifiedLowering(JSGraph* jsgraph, Zone* zone,
|
| + SourcePositionTable* source_positions)
|
| + : jsgraph_(jsgraph),
|
| + zone_(zone),
|
| + zero_thirtyone_range_(Type::Range(0, 31, zone)),
|
| + source_positions_(source_positions) {}
|
| +
|
| +
|
| void SimplifiedLowering::LowerAllNodes() {
|
| SimplifiedOperatorBuilder simplified(graph()->zone());
|
| RepresentationChanger changer(jsgraph(), &simplified, jsgraph()->isolate());
|
| @@ -1576,6 +1599,17 @@ Node* SimplifiedLowering::Uint32Mod(Node* const node) {
|
| }
|
|
|
|
|
| +void SimplifiedLowering::DoShift(Node* node, Operator const* op) {
|
| + node->set_op(op);
|
| + Node* const rhs = NodeProperties::GetValueInput(node, 1);
|
| + Type* const rhs_type = NodeProperties::GetBounds(rhs).upper;
|
| + if (!rhs_type->Is(zero_thirtyone_range_)) {
|
| + node->ReplaceInput(1, graph()->NewNode(machine()->Word32And(), rhs,
|
| + jsgraph()->Int32Constant(0x1f)));
|
| + }
|
| +}
|
| +
|
| +
|
| void SimplifiedLowering::DoStringEqual(Node* node) {
|
| node->set_op(machine()->WordEqual());
|
| node->ReplaceInput(0, StringComparison(node, false));
|
|
|