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:
parent
633403d151
commit
67388ea26a
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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);
|
||||
|
@ -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 */ \
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user