| 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);
|
|
|
|
|