Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(930)

Unified Diff: src/runtime/runtime-compiler.cc

Issue 2184553003: Revert of [interpreter] Add explicit OSR polling bytecode. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@local_interpreter-osr-1
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/interpreter/interpreter-assembler.cc ('k') | test/mjsunit/ignition/osr-from-bytecode.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/runtime/runtime-compiler.cc
diff --git a/src/runtime/runtime-compiler.cc b/src/runtime/runtime-compiler.cc
index 862fefcd5045ad3fbc7a5dcd85c2b032be34387a..258975375cf7dfcff431d4d02fb378bea023ef9f 100644
--- a/src/runtime/runtime-compiler.cc
+++ b/src/runtime/runtime-compiler.cc
@@ -217,75 +217,38 @@
return true;
}
-namespace {
-
-BailoutId DetermineEntryAndDisarmOSRForBaseline(JavaScriptFrame* frame) {
- Handle<Code> caller_code(frame->function()->shared()->code());
-
- // Passing the PC in the JavaScript frame from the caller directly is
+
+RUNTIME_FUNCTION(Runtime_CompileForOnStackReplacement) {
+ HandleScope scope(isolate);
+ DCHECK(args.length() == 1);
+ CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
+ Handle<Code> caller_code(function->shared()->code());
+
+ // We're not prepared to handle a function with arguments object.
+ DCHECK(!function->shared()->uses_arguments());
+
+ CHECK(FLAG_use_osr);
+
+ // Passing the PC in the javascript frame from the caller directly is
// not GC safe, so we walk the stack to get it.
+ JavaScriptFrameIterator it(isolate);
+ JavaScriptFrame* frame = it.frame();
if (!caller_code->contains(frame->pc())) {
// Code on the stack may not be the code object referenced by the shared
// function info. It may have been replaced to include deoptimization data.
caller_code = Handle<Code>(frame->LookupCode());
}
- DCHECK_EQ(frame->LookupCode(), *caller_code);
- DCHECK_EQ(Code::FUNCTION, caller_code->kind());
- DCHECK(caller_code->contains(frame->pc()));
-
- // Revert the patched back edge table, regardless of whether OSR succeeds.
- BackEdgeTable::Revert(frame->isolate(), *caller_code);
-
uint32_t pc_offset =
static_cast<uint32_t>(frame->pc() - caller_code->instruction_start());
- return caller_code->TranslatePcOffsetToAstId(pc_offset);
-}
-
-BailoutId DetermineEntryAndDisarmOSRForInterpreter(JavaScriptFrame* frame) {
- InterpretedFrame* iframe = reinterpret_cast<InterpretedFrame*>(frame);
-
- // Note that the bytecode array active on the stack might be different from
- // the one installed on the function (e.g. patched by debugger). This however
- // is fine because we guarantee the layout to be in sync, hence any BailoutId
- // representing the entry point will be valid for any copy of the bytecode.
- Handle<BytecodeArray> bytecode(iframe->GetBytecodeArray());
-
- DCHECK(frame->LookupCode()->is_interpreter_trampoline_builtin());
- DCHECK(frame->function()->shared()->HasBytecodeArray());
- DCHECK(frame->is_interpreted());
- DCHECK(FLAG_ignition_osr);
-
- // Reset the OSR loop nesting depth to disarm back edges.
- bytecode->set_osr_loop_nesting_level(0);
-
- return BailoutId(iframe->GetBytecodeOffset());
-}
-
-} // namespace
-
-RUNTIME_FUNCTION(Runtime_CompileForOnStackReplacement) {
- HandleScope scope(isolate);
- DCHECK(args.length() == 1);
- CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
-
- // We're not prepared to handle a function with arguments object.
- DCHECK(!function->shared()->uses_arguments());
-
- // Only reachable when OST is enabled.
- CHECK(FLAG_use_osr);
-
- // Determine frame triggering OSR request.
- JavaScriptFrameIterator it(isolate);
- JavaScriptFrame* frame = it.frame();
+#ifdef DEBUG
DCHECK_EQ(frame->function(), *function);
-
- // Determine the entry point for which this OSR request has been fired and
- // also disarm all back edges in the calling code to stop new requests.
- BailoutId ast_id = frame->is_interpreted()
- ? DetermineEntryAndDisarmOSRForInterpreter(frame)
- : DetermineEntryAndDisarmOSRForBaseline(frame);
+ DCHECK_EQ(frame->LookupCode(), *caller_code);
+ DCHECK(caller_code->contains(frame->pc()));
+#endif // DEBUG
+
+ BailoutId ast_id = caller_code->TranslatePcOffsetToAstId(pc_offset);
DCHECK(!ast_id.IsNone());
MaybeHandle<Code> maybe_result;
@@ -297,6 +260,9 @@
}
maybe_result = Compiler::GetOptimizedCodeForOSR(function, ast_id, frame);
}
+
+ // Revert the patched back edge table, regardless of whether OSR succeeds.
+ BackEdgeTable::Revert(isolate, *caller_code);
// Check whether we ended up with usable optimized code.
Handle<Code> result;
« no previous file with comments | « src/interpreter/interpreter-assembler.cc ('k') | test/mjsunit/ignition/osr-from-bytecode.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698