| Index: src/compiler/simplified-lowering.cc
|
| diff --git a/src/compiler/simplified-lowering.cc b/src/compiler/simplified-lowering.cc
|
| index 67886a9acc816697123447db6cde098cf7a0c709..b8e7d8d4b6b9428780fc73c2f77029e4a653725c 100644
|
| --- a/src/compiler/simplified-lowering.cc
|
| +++ b/src/compiler/simplified-lowering.cc
|
| @@ -506,7 +506,7 @@ class RepresentationSelector {
|
| }
|
| case IrOpcode::kStringEqual: {
|
| VisitBinop(node, kMachAnyTagged, kRepBit);
|
| - // TODO(titzer): lower StringEqual to stub/runtime call.
|
| + if (lower()) lowering->DoStringEqual(node);
|
| break;
|
| }
|
| case IrOpcode::kStringLessThan: {
|
| @@ -826,7 +826,7 @@ void SimplifiedLowering::DoStringAdd(Node* node) {
|
| CodeStubInterfaceDescriptor* d = stub.GetInterfaceDescriptor();
|
| CallDescriptor::Flags flags = CallDescriptor::kNoFlags;
|
| CallDescriptor* desc = Linkage::GetStubCallDescriptor(d, 0, flags, zone());
|
| - node->set_op(jsgraph()->common()->Call(desc));
|
| + node->set_op(common()->Call(desc));
|
| node->InsertInput(zone(), 0, jsgraph()->HeapConstant(stub.GetCode()));
|
| node->AppendInput(zone(), jsgraph()->UndefinedConstant());
|
| node->AppendInput(zone(), graph()->start());
|
| @@ -834,6 +834,27 @@ void SimplifiedLowering::DoStringAdd(Node* node) {
|
| }
|
|
|
|
|
| +void SimplifiedLowering::DoStringEqual(Node* node) {
|
| + CEntryStub stub(zone()->isolate(), 1);
|
| + ExternalReference ref(Runtime::kStringEquals, zone()->isolate());
|
| + Operator::Properties props = node->op()->properties();
|
| + // TODO(mstarzinger): We should call StringCompareStub here instead, once an
|
| + // interface descriptor is available for it.
|
| + CallDescriptor* desc = Linkage::GetRuntimeCallDescriptor(
|
| + Runtime::kStringEquals, 2, props, zone());
|
| + Node* call = graph()->NewNode(common()->Call(desc),
|
| + jsgraph()->HeapConstant(stub.GetCode()),
|
| + NodeProperties::GetValueInput(node, 0),
|
| + NodeProperties::GetValueInput(node, 1),
|
| + jsgraph()->ExternalConstant(ref),
|
| + jsgraph()->Int32Constant(2),
|
| + jsgraph()->UndefinedConstant());
|
| + node->set_op(machine()->WordEqual());
|
| + node->ReplaceInput(0, call);
|
| + node->ReplaceInput(1, jsgraph()->SmiConstant(EQUAL));
|
| +}
|
| +
|
| +
|
| } // namespace compiler
|
| } // namespace internal
|
| } // namespace v8
|
|
|