Implement lowering of JSLoadContext to machine operators.
authormstarzinger@chromium.org <mstarzinger@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 31 Jul 2014 11:20:36 +0000 (11:20 +0000)
committermstarzinger@chromium.org <mstarzinger@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 31 Jul 2014 11:20:36 +0000 (11:20 +0000)
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

src/compiler/js-generic-lowering.cc
src/compiler/pipeline.cc
src/runtime.cc
src/runtime.h
tools/generate-runtime-tests.py

index 5085e9f..4679e4c 100644 (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;
 }
 
index 3086e68..ef071bb 100644 (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.
index cb2e8df..7afa3a6 100644 (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);
index ca5a3f1..67e6148 100644 (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 */ \
index a22ac16..d766409 100755 (executable)
@@ -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