Index: src/compiler/simplified-lowering.cc |
diff --git a/src/compiler/simplified-lowering.cc b/src/compiler/simplified-lowering.cc |
index d1ab441f5d4d58ae2c57f72190ef3472671cdd88..c0dda8c15f4b8d50d6e4f345227abe34e31404cc 100644 |
--- a/src/compiler/simplified-lowering.cc |
+++ b/src/compiler/simplified-lowering.cc |
@@ -783,6 +783,13 @@ class RepresentationSelector { |
if (lower()) lowering->DoStringAdd(node); |
break; |
} |
+ case IrOpcode::kAllocate: { |
+ ProcessInput(node, 0, kMachAnyTagged); |
+ ProcessRemainingInputs(node, 1); |
+ SetOutput(node, kMachAnyTagged); |
+ if (lower()) lowering->DoAllocate(node); |
+ break; |
+ } |
case IrOpcode::kLoadField: { |
FieldAccess access = FieldAccessOf(node->op()); |
ProcessInput(node, 0, changer_->TypeForBasePointer(access)); |
@@ -1159,6 +1166,23 @@ WriteBarrierKind ComputeWriteBarrierKind(BaseTaggedness base_is_tagged, |
} // namespace |
+void SimplifiedLowering::DoAllocate(Node* node) { |
+ PretenureFlag pretenure = OpParameter<PretenureFlag>(node->op()); |
+ AllocationSpace space = pretenure == TENURED ? OLD_SPACE : NEW_SPACE; |
+ Runtime::FunctionId f = Runtime::kAllocateInTargetSpace; |
+ Operator::Properties props = node->op()->properties(); |
+ CallDescriptor* desc = Linkage::GetRuntimeCallDescriptor(zone(), f, 2, props); |
+ node->set_op(common()->Call(desc)); |
+ ExternalReference ref(f, jsgraph()->isolate()); |
+ int32_t flags = AllocateTargetSpace::encode(space); |
+ node->InsertInput(graph()->zone(), 0, jsgraph()->CEntryStubConstant(1)); |
+ node->InsertInput(graph()->zone(), 2, jsgraph()->SmiConstant(flags)); |
+ node->InsertInput(graph()->zone(), 3, jsgraph()->ExternalConstant(ref)); |
+ node->InsertInput(graph()->zone(), 4, jsgraph()->Int32Constant(2)); |
+ node->InsertInput(graph()->zone(), 5, jsgraph()->NoContextConstant()); |
+} |
+ |
+ |
void SimplifiedLowering::DoLoadField(Node* node) { |
const FieldAccess& access = FieldAccessOf(node->op()); |
node->set_op(machine()->Load(access.machine_type)); |
@@ -1303,7 +1327,6 @@ void SimplifiedLowering::DoStringAdd(Node* node) { |
Node* SimplifiedLowering::StringComparison(Node* node, bool requires_ordering) { |
- CEntryStub stub(jsgraph()->isolate(), 1); |
Runtime::FunctionId f = |
requires_ordering ? Runtime::kStringCompareRT : Runtime::kStringEquals; |
ExternalReference ref(f, jsgraph()->isolate()); |
@@ -1312,12 +1335,12 @@ Node* SimplifiedLowering::StringComparison(Node* node, bool requires_ordering) { |
// interface descriptor is available for it. |
CallDescriptor* desc = Linkage::GetRuntimeCallDescriptor(zone(), f, 2, props); |
return graph()->NewNode(common()->Call(desc), |
- jsgraph()->HeapConstant(stub.GetCode()), |
+ jsgraph()->CEntryStubConstant(1), |
NodeProperties::GetValueInput(node, 0), |
NodeProperties::GetValueInput(node, 1), |
jsgraph()->ExternalConstant(ref), |
jsgraph()->Int32Constant(2), |
- jsgraph()->UndefinedConstant()); |
+ jsgraph()->NoContextConstant()); |
} |