Node* JSGenericLowering::LowerJSLoadContext(Node* node) {
ContextAccess access = OpParameter<ContextAccess>(node);
- PatchInsertInput(node, 1, SmiConstant(access.depth()));
- PatchInsertInput(node, 2, SmiConstant(access.index()));
- ReplaceWithRuntimeCall(node, Runtime::kLoadContextRelative, 3);
+ // TODO(mstarzinger): Use simplified operators instead of machine operators
+ // here so that load/store optimization can be applied afterwards.
+ for (int i = 0; i < access.depth(); ++i) {
+ node->ReplaceInput(
+ 0, graph()->NewNode(
+ machine()->Load(kMachineTagged),
+ NodeProperties::GetValueInput(node, 0),
+ Int32Constant(Context::SlotOffset(Context::PREVIOUS_INDEX)),
+ NodeProperties::GetEffectInput(node)));
+ }
+ node->ReplaceInput(1, Int32Constant(Context::SlotOffset(access.index())));
+ PatchOperator(node, machine()->Load(kMachineTagged));
return node;
}
MachineOperatorBuilder machine(zone());
JSGenericLowering lowering(info(), &jsgraph, &machine, &source_positions);
lowering.LowerAllNodes();
+
+ VerifyAndPrintGraph(&graph, "Lowered generic");
}
// Compute a schedule.
}
-RUNTIME_FUNCTION(Runtime_LoadContextRelative) {
- SealHandleScope shs(isolate);
- ASSERT(args.length() == 3);
- CONVERT_ARG_CHECKED(Context, context, 0);
- CONVERT_SMI_ARG_CHECKED(depth, 1);
- CONVERT_SMI_ARG_CHECKED(index, 2);
- while (depth-- > 0) {
- context = context->previous();
- ASSERT(context->IsContext());
- }
- return context->get(index);
-}
-
-
RUNTIME_FUNCTION(Runtime_StoreContextRelative) {
SealHandleScope shs(isolate);
ASSERT(args.length() == 4);
F(PushModuleContext, 2, 1) \
F(DeleteLookupSlot, 2, 1) \
F(LoadLookupSlot, 2, 2) \
- F(LoadContextRelative, 3, 1) /* TODO(turbofan): Only temporary */ \
F(LoadLookupSlotNoReferenceError, 2, 2) \
F(StoreLookupSlot, 4, 1) \
F(StoreContextRelative, 4, 1) /* TODO(turbofan): Only temporary */ \
# that the parser doesn't bit-rot. Change the values as needed when you add,
# remove or change runtime functions, but make sure we don't lose our ability
# to parse them!
-EXPECTED_FUNCTION_COUNT = 427
+EXPECTED_FUNCTION_COUNT = 426
EXPECTED_FUZZABLE_COUNT = 338
-EXPECTED_CCTEST_COUNT = 11
+EXPECTED_CCTEST_COUNT = 10
EXPECTED_UNKNOWN_COUNT = 4
EXPECTED_BUILTINS_COUNT = 816