Index: src/compiler/int64-lowering.cc |
diff --git a/src/compiler/int64-lowering.cc b/src/compiler/int64-lowering.cc |
index ff31abe518f07cdf60fa58d8acac90e2cbf0a907..48f461da0e2fbb679ee00cbf274207d0e1b726db 100644 |
--- a/src/compiler/int64-lowering.cc |
+++ b/src/compiler/int64-lowering.cc |
@@ -167,27 +167,6 @@ void Int64Lowering::LowerNode(Node* node) { |
} |
break; |
} |
- case IrOpcode::kWord64And: { |
- DCHECK(node->InputCount() == 2); |
- Node* left = node->InputAt(0); |
- Node* right = node->InputAt(1); |
- |
- Node* low_node = |
- graph()->NewNode(machine()->Word32And(), GetReplacementLow(left), |
- GetReplacementLow(right)); |
- Node* high_node = |
- graph()->NewNode(machine()->Word32And(), GetReplacementHigh(left), |
- GetReplacementHigh(right)); |
- ReplaceNode(node, low_node, high_node); |
- break; |
- } |
- case IrOpcode::kTruncateInt64ToInt32: { |
- DCHECK(node->InputCount() == 1); |
- Node* input = node->InputAt(0); |
- ReplaceNode(node, GetReplacementLow(input), nullptr); |
- node->NullAllInputs(); |
- break; |
- } |
case IrOpcode::kStart: { |
int parameter_count = GetParameterCountAfterLowering(signature()); |
// Only exchange the node if the parameter count actually changed. |
@@ -248,6 +227,85 @@ void Int64Lowering::LowerNode(Node* node) { |
} |
break; |
} |
+ case IrOpcode::kWord64And: { |
+ DCHECK(node->InputCount() == 2); |
+ Node* left = node->InputAt(0); |
+ Node* right = node->InputAt(1); |
+ |
+ Node* low_node = |
+ graph()->NewNode(machine()->Word32And(), GetReplacementLow(left), |
+ GetReplacementLow(right)); |
+ Node* high_node = |
+ graph()->NewNode(machine()->Word32And(), GetReplacementHigh(left), |
+ GetReplacementHigh(right)); |
+ ReplaceNode(node, low_node, high_node); |
+ break; |
+ } |
+ case IrOpcode::kTruncateInt64ToInt32: { |
+ DCHECK(node->InputCount() == 1); |
+ Node* input = node->InputAt(0); |
+ ReplaceNode(node, GetReplacementLow(input), nullptr); |
+ node->NullAllInputs(); |
+ break; |
+ } |
+ // todo(ahaas): I added a list of missing instructions here to make merging |
+ // easier when I do them one by one. |
+ // kExprI64Add: |
+ // kExprI64Sub: |
+ // kExprI64Mul: |
+ // kExprI64DivS: |
+ // kExprI64DivU: |
+ // kExprI64RemS: |
+ // kExprI64RemU: |
+ // kExprI64Ior: |
+ case IrOpcode::kWord64Or: { |
+ DCHECK(node->InputCount() == 2); |
+ Node* left = node->InputAt(0); |
+ Node* right = node->InputAt(1); |
+ |
+ Node* low_node = |
+ graph()->NewNode(machine()->Word32Or(), GetReplacementLow(left), |
+ GetReplacementLow(right)); |
+ Node* high_node = |
+ graph()->NewNode(machine()->Word32Or(), GetReplacementHigh(left), |
+ GetReplacementHigh(right)); |
+ ReplaceNode(node, low_node, high_node); |
+ break; |
+ } |
+ |
+ // kExprI64Xor: |
+ // kExprI64Shl: |
+ // kExprI64ShrU: |
+ // kExprI64ShrS: |
+ // kExprI64Eq: |
+ // kExprI64Ne: |
+ // kExprI64LtS: |
+ // kExprI64LeS: |
+ // kExprI64LtU: |
+ // kExprI64LeU: |
+ // kExprI64GtS: |
+ // kExprI64GeS: |
+ // kExprI64GtU: |
+ // kExprI64GeU: |
+ |
+ // kExprI64SConvertI32: |
+ // kExprI64UConvertI32: |
+ |
+ // kExprF64ReinterpretI64: |
+ // kExprI64ReinterpretF64: |
+ |
+ // kExprI64Clz: |
+ // kExprI64Ctz: |
+ // kExprI64Popcnt: |
+ |
+ // kExprF32SConvertI64: |
+ // kExprF32UConvertI64: |
+ // kExprF64SConvertI64: |
+ // kExprF64UConvertI64: |
+ // kExprI64SConvertF32: |
+ // kExprI64SConvertF64: |
+ // kExprI64UConvertF32: |
+ // kExprI64UConvertF64: |
default: { DefaultLowering(node); } |
} |
} |