Index: src/compiler/effect-control-linearizer.cc |
diff --git a/src/compiler/effect-control-linearizer.cc b/src/compiler/effect-control-linearizer.cc |
index 6a75e8cff234aa519a7f413e4befa7f1af09e597..546a45e4f8ea8f171692421f69ade61dcfdfb312 100644 |
--- a/src/compiler/effect-control-linearizer.cc |
+++ b/src/compiler/effect-control-linearizer.cc |
@@ -641,6 +641,9 @@ bool EffectControlLinearizer::TryWireInStateEffect(Node* node, |
case IrOpcode::kCheckReceiver: |
result = LowerCheckReceiver(node, frame_state); |
break; |
+ case IrOpcode::kCheckSymbol: |
+ result = LowerCheckSymbol(node, frame_state); |
+ break; |
case IrOpcode::kCheckString: |
result = LowerCheckString(node, frame_state); |
break; |
@@ -1300,6 +1303,17 @@ Node* EffectControlLinearizer::LowerCheckReceiver(Node* node, |
return value; |
} |
+Node* EffectControlLinearizer::LowerCheckSymbol(Node* node, Node* frame_state) { |
+ Node* value = node->InputAt(0); |
+ |
+ Node* value_map = __ LoadField(AccessBuilder::ForMap(), value); |
+ |
+ Node* check = |
+ __ WordEqual(value_map, __ HeapConstant(factory()->symbol_map())); |
+ __ DeoptimizeUnless(DeoptimizeReason::kNotASymbol, check, frame_state); |
+ return value; |
+} |
+ |
Node* EffectControlLinearizer::LowerCheckString(Node* node, Node* frame_state) { |
Node* value = node->InputAt(0); |