[turbofan] Properly hook up string operators in the effect/control chain.
The string operators not only read memory, but also write memory in case of cons string flattening, so we better make sure to have the stub calls in the effect chain. R=jarin@chromium.org Review-Url: https://codereview.chromium.org/1938383002 Cr-Commit-Position: refs/heads/master@{#35965}
This commit is contained in:
parent
2949e05d1e
commit
79688584f0
@ -1041,7 +1041,8 @@ class RepresentationSelector {
|
||||
VisitBinop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
|
||||
if (lower()) {
|
||||
// StringEqual(x, y) => Call(StringEqualStub, x, y, no-context)
|
||||
Operator::Properties properties = node->op()->properties();
|
||||
Operator::Properties properties =
|
||||
Operator::kCommutative | Operator::kNoThrow;
|
||||
Callable callable = CodeFactory::StringEqual(jsgraph_->isolate());
|
||||
CallDescriptor::Flags flags = CallDescriptor::kNoFlags;
|
||||
CallDescriptor* desc = Linkage::GetStubCallDescriptor(
|
||||
@ -1050,6 +1051,8 @@ class RepresentationSelector {
|
||||
node->InsertInput(jsgraph_->zone(), 0,
|
||||
jsgraph_->HeapConstant(callable.code()));
|
||||
node->AppendInput(jsgraph_->zone(), jsgraph_->NoContextConstant());
|
||||
node->AppendInput(jsgraph_->zone(), jsgraph_->graph()->start());
|
||||
node->AppendInput(jsgraph_->zone(), jsgraph_->graph()->start());
|
||||
NodeProperties::ChangeOp(node, jsgraph_->common()->Call(desc));
|
||||
}
|
||||
break;
|
||||
@ -1058,7 +1061,7 @@ class RepresentationSelector {
|
||||
VisitBinop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
|
||||
if (lower()) {
|
||||
// StringLessThan(x, y) => Call(StringLessThanStub, x, y, no-context)
|
||||
Operator::Properties properties = node->op()->properties();
|
||||
Operator::Properties properties = Operator::kNoThrow;
|
||||
Callable callable = CodeFactory::StringLessThan(jsgraph_->isolate());
|
||||
CallDescriptor::Flags flags = CallDescriptor::kNoFlags;
|
||||
CallDescriptor* desc = Linkage::GetStubCallDescriptor(
|
||||
@ -1067,6 +1070,8 @@ class RepresentationSelector {
|
||||
node->InsertInput(jsgraph_->zone(), 0,
|
||||
jsgraph_->HeapConstant(callable.code()));
|
||||
node->AppendInput(jsgraph_->zone(), jsgraph_->NoContextConstant());
|
||||
node->AppendInput(jsgraph_->zone(), jsgraph_->graph()->start());
|
||||
node->AppendInput(jsgraph_->zone(), jsgraph_->graph()->start());
|
||||
NodeProperties::ChangeOp(node, jsgraph_->common()->Call(desc));
|
||||
}
|
||||
break;
|
||||
@ -1076,7 +1081,7 @@ class RepresentationSelector {
|
||||
if (lower()) {
|
||||
// StringLessThanOrEqual(x, y)
|
||||
// => Call(StringLessThanOrEqualStub, x, y, no-context)
|
||||
Operator::Properties properties = node->op()->properties();
|
||||
Operator::Properties properties = Operator::kNoThrow;
|
||||
Callable callable =
|
||||
CodeFactory::StringLessThanOrEqual(jsgraph_->isolate());
|
||||
CallDescriptor::Flags flags = CallDescriptor::kNoFlags;
|
||||
@ -1086,6 +1091,8 @@ class RepresentationSelector {
|
||||
node->InsertInput(jsgraph_->zone(), 0,
|
||||
jsgraph_->HeapConstant(callable.code()));
|
||||
node->AppendInput(jsgraph_->zone(), jsgraph_->NoContextConstant());
|
||||
node->AppendInput(jsgraph_->zone(), jsgraph_->graph()->start());
|
||||
node->AppendInput(jsgraph_->zone(), jsgraph_->graph()->start());
|
||||
NodeProperties::ChangeOp(node, jsgraph_->common()->Call(desc));
|
||||
}
|
||||
break;
|
||||
@ -1094,7 +1101,7 @@ class RepresentationSelector {
|
||||
VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
|
||||
if (lower()) {
|
||||
// StringToNumber(x) => Call(StringToNumberStub, x, no-context)
|
||||
Operator::Properties properties = node->op()->properties();
|
||||
Operator::Properties properties = Operator::kNoThrow;
|
||||
Callable callable = CodeFactory::StringToNumber(jsgraph_->isolate());
|
||||
CallDescriptor::Flags flags = CallDescriptor::kNoFlags;
|
||||
CallDescriptor* desc = Linkage::GetStubCallDescriptor(
|
||||
@ -1103,6 +1110,8 @@ class RepresentationSelector {
|
||||
node->InsertInput(jsgraph_->zone(), 0,
|
||||
jsgraph_->HeapConstant(callable.code()));
|
||||
node->AppendInput(jsgraph_->zone(), jsgraph_->NoContextConstant());
|
||||
node->AppendInput(jsgraph_->zone(), jsgraph_->graph()->start());
|
||||
node->AppendInput(jsgraph_->zone(), jsgraph_->graph()->start());
|
||||
NodeProperties::ChangeOp(node, jsgraph_->common()->Call(desc));
|
||||
}
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user