[turbofan] Fix bunch of tests failing with --turbo-deoptimization.
authorjarin <jarin@chromium.org>
Fri, 16 Jan 2015 22:23:23 +0000 (14:23 -0800)
committerCommit bot <commit-bot@chromium.org>
Fri, 16 Jan 2015 22:23:32 +0000 (22:23 +0000)
R=bmeurer@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#26115}

src/compiler/linkage.cc
src/compiler/simplified-lowering.cc
src/runtime/runtime-debug.cc
test/mjsunit/mjsunit.status

index 4b301f512f9afc5737d59676fb640c7c0c96bcbe..d05fdeb7ec7da4de7f4108e3f887f536d6489eda 100644 (file)
@@ -152,13 +152,16 @@ bool Linkage::NeedsFrameState(Runtime::FunctionId function) {
     case Runtime::kDebugGetLoadedScripts:
     case Runtime::kDebugGetPropertyDetails:
     case Runtime::kDebugPromiseEvent:
+    case Runtime::kDefaultConstructorSuperCall:
     case Runtime::kDefineAccessorPropertyUnchecked:
     case Runtime::kDefineDataPropertyUnchecked:
     case Runtime::kDeleteProperty:
+    case Runtime::kDeliverObservationChangeRecords:
     case Runtime::kDeoptimizeFunction:
     case Runtime::kFunctionBindArguments:
     case Runtime::kGetDefaultReceiver:
     case Runtime::kGetFrameCount:
+    case Runtime::kGetFrameDetails:
     case Runtime::kGetOwnProperty:
     case Runtime::kGetOwnPropertyNames:
     case Runtime::kGetPropertyNamesFast:
index d7157f6bf04005be6feaf2396bdf25454fade664..74fd277410b639524c78c5f17a34bc7fca5cdcc3 100644 (file)
@@ -1014,8 +1014,9 @@ class RepresentationSelector {
       case IrOpcode::kLoadStackPointer:
         return VisitLeaf(node, kMachPtr);
       case IrOpcode::kStateValues:
+        // State values declare tagged use so that we do not conflate values.
         for (int i = 0; i < node->InputCount(); i++) {
-          ProcessInput(node, i, kTypeAny);
+          Enqueue(node->InputAt(i), kMachAnyTagged);
         }
         SetOutput(node, kMachAnyTagged);
         break;
index 12c5a0d84f3567a2690bdd0fb1e6bee107f6e81d..732e7f9570b947c911dc5a7643211e5b3e289866 100644 (file)
@@ -2202,46 +2202,56 @@ RUNTIME_FUNCTION(Runtime_DebugEvaluate) {
   StackFrame::Id id = UnwrapFrameId(wrapped_id);
   JavaScriptFrameIterator it(isolate, id);
   JavaScriptFrame* frame = it.frame();
-  FrameInspector frame_inspector(frame, inlined_jsframe_index, isolate);
-  Handle<JSFunction> function(JSFunction::cast(frame_inspector.GetFunction()));
-  Handle<SharedFunctionInfo> outer_info(function->shared());
+  Handle<JSFunction> function;
+  Handle<SharedFunctionInfo> outer_info;
+  Handle<JSObject> materialized;
+  Handle<Context> eval_context;
+  {
+    // We need a short scope for re-entrancy as we cannot have two frame
+    // inspectors at the same time (because they are using a global variable).
+    FrameInspector frame_inspector(frame, inlined_jsframe_index, isolate);
+    function =
+        Handle<JSFunction>(JSFunction::cast(frame_inspector.GetFunction()));
+    outer_info = Handle<SharedFunctionInfo>(function->shared());
 
-  // Traverse the saved contexts chain to find the active context for the
-  // selected frame.
-  SaveContext* save = FindSavedContextForFrame(isolate, frame);
+    // Traverse the saved contexts chain to find the active context for the
+    // selected frame.
+    SaveContext* save = FindSavedContextForFrame(isolate, frame);
 
-  SaveContext savex(isolate);
-  isolate->set_context(*(save->context()));
+    SaveContext savex(isolate);
+    isolate->set_context(*(save->context()));
 
-  // Materialize stack locals and the arguments object.
-  Handle<JSObject> materialized = NewJSObjectWithNullProto(isolate);
+    // Materialize stack locals and the arguments object.
+    materialized = NewJSObjectWithNullProto(isolate);
 
-  ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
-      isolate, materialized,
-      MaterializeStackLocalsWithFrameInspector(isolate, materialized, function,
-                                               &frame_inspector));
+    ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
+        isolate, materialized,
+        MaterializeStackLocalsWithFrameInspector(isolate, materialized,
+                                                 function, &frame_inspector));
 
-  ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
-      isolate, materialized,
-      MaterializeArgumentsObject(isolate, materialized, function));
-
-  // At this point, the lookup chain may look like this:
-  // [inner context] -> [function stack]+[function context] -> [outer context]
-  // The function stack is not an actual context, it complements the function
-  // context. In order to have the same lookup chain when debug-evaluating,
-  // we materialize the stack and insert it into the context chain as a
-  // with-context before the function context.
-  // [inner context] -> [with context] -> [function context] -> [outer context]
-  // Ordering the with-context before the function context forces a dynamic
-  // lookup instead of a static lookup that could fail as the scope info is
-  // outdated and may expect variables to still be stack-allocated.
-  // Afterwards, we write changes to the with-context back to the stack
-  // and remove it from the context chain.
-  // This could cause lookup failures if debug-evaluate creates a closure that
-  // uses this temporary context chain.
-
-  Handle<Context> eval_context(Context::cast(frame_inspector.GetContext()));
-  DCHECK(!eval_context.is_null());
+    ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
+        isolate, materialized,
+        MaterializeArgumentsObject(isolate, materialized, function));
+
+    // At this point, the lookup chain may look like this:
+    // [inner context] -> [function stack]+[function context] -> [outer context]
+    // The function stack is not an actual context, it complements the function
+    // context. In order to have the same lookup chain when debug-evaluating,
+    // we materialize the stack and insert it into the context chain as a
+    // with-context before the function context.
+    // [inner context] -> [with context] -> [function context] -> [outer
+    // context]
+    // Ordering the with-context before the function context forces a dynamic
+    // lookup instead of a static lookup that could fail as the scope info is
+    // outdated and may expect variables to still be stack-allocated.
+    // Afterwards, we write changes to the with-context back to the stack
+    // and remove it from the context chain.
+    // This could cause lookup failures if debug-evaluate creates a closure that
+    // uses this temporary context chain.
+
+    eval_context = Handle<Context>(Context::cast(frame_inspector.GetContext()));
+    DCHECK(!eval_context.is_null());
+  }
   Handle<Context> function_context = eval_context;
   Handle<Context> outer_context(function->context(), isolate);
   Handle<Context> inner_context;
index 1f28e95944f6ffe9f6102952f027eb02414d6e14..8eff7c2c6c9fe224bd31a799b979469de9c34d5a 100644 (file)
   'debug-step-turbofan': [PASS, FAIL],
 
   # TODO(jarin): Some tests don't like --turbo-deoptimzation very much.
-  'asm/embenchen/lua_binarytrees': [SKIP],
   'es6/symbols': [PASS, NO_VARIANTS],
-  'es7/object-observe-debug-event': [PASS, NO_VARIANTS],
-  'harmony/classes': [PASS, NO_VARIANTS],
   'regress/regress-354433': [PASS, NO_VARIANTS],  # only on ARM simulator.
-  'regress/regress-crbug-259300': [PASS, NO_VARIANTS],
 
   # TODO(arv): TurboFan does not yet add [[HomeObject]] as needed.
   'harmony/object-literals-super': [PASS, NO_VARIANTS],