Index: src/compiler/int64-lowering.cc |
diff --git a/src/compiler/int64-lowering.cc b/src/compiler/int64-lowering.cc |
index 116e261fcf0aa5c3cda989962b77ceb899e14881..c495770439d5bcaf0fc0fca4fb66e3efc1b90f13 100644 |
--- a/src/compiler/int64-lowering.cc |
+++ b/src/compiler/int64-lowering.cc |
@@ -449,6 +449,21 @@ void Int64Lowering::LowerNode(Node* node) { |
// kExprI64Clz: |
// kExprI64Ctz: |
+ case IrOpcode::kWord64Popcnt: { |
+ DCHECK(node->InputCount() == 1); |
+ Node* input = node->InputAt(0); |
+ // We assume that a Word64Popcnt node only has been created if |
+ // Word32Popcnt is actually supported. |
+ DCHECK(machine()->Word32Popcnt().IsSupported()); |
+ ReplaceNode(node, graph()->NewNode( |
+ machine()->Int32Add(), |
+ graph()->NewNode(machine()->Word32Popcnt().op(), |
+ GetReplacementLow(input)), |
+ graph()->NewNode(machine()->Word32Popcnt().op(), |
+ GetReplacementHigh(input))), |
+ graph()->NewNode(common()->Int32Constant(0))); |
+ break; |
+ } |
// kExprI64Popcnt: |
default: { DefaultLowering(node); } |