Implement lowering of JSLoadContext to machine operators.

R=titzer@chromium.org

Review URL: https://codereview.chromium.org/433853002

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22748 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
mstarzinger@chromium.org 2014-07-31 11:20:36 +00:00
parent 633403d151
commit 67388ea26a
5 changed files with 16 additions and 20 deletions

View File

@ -370,9 +370,18 @@ Node* JSGenericLowering::LowerJSInstanceOf(Node* node) {
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;
}

View File

@ -177,6 +177,8 @@ Handle<Code> Pipeline::GenerateCode() {
MachineOperatorBuilder machine(zone());
JSGenericLowering lowering(info(), &jsgraph, &machine, &source_positions);
lowering.LowerAllNodes();
VerifyAndPrintGraph(&graph, "Lowered generic");
}
// Compute a schedule.

View File

@ -9408,20 +9408,6 @@ RUNTIME_FUNCTION(Runtime_StoreLookupSlot) {
}
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);

View File

@ -479,7 +479,6 @@ namespace internal {
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 */ \

View File

@ -47,9 +47,9 @@ EXPAND_MACROS = [
# 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