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

Unified Diff: src/compiler.cc

Issue 1420963009: [Interpreter]: Add ignition blacklist to mjsunit.status and test262.status. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add ignition variable to run-deopt-fuzzer Created 5 years, 1 month 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 | « no previous file | src/flag-definitions.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler.cc
diff --git a/src/compiler.cc b/src/compiler.cc
index 4bc4e8031845018c00bc389946038d4e2520f0c0..d55bf33babca94fb6c90f85b1996065e2a1c462e 100644
--- a/src/compiler.cc
+++ b/src/compiler.cc
@@ -691,24 +691,6 @@ static void RecordFunctionCompilation(Logger::LogEventsAndTags tag,
}
-// Checks whether top level functions should be passed by {raw_filter}.
-// TODO(rmcilroy): Remove filtering once ignition can handle test262 harness.
-static bool TopLevelFunctionPassesFilter(const char* raw_filter) {
- Vector<const char> filter = CStrVector(raw_filter);
- return (filter.length() == 0) || (filter.length() == 1 && filter[0] == '*');
-}
-
-
-// Checks whether the passed {raw_filter} is a prefix of the given scripts name.
-// TODO(rmcilroy): Remove filtering once ignition can handle test262 harness.
-static bool ScriptPassesFilter(const char* raw_filter, Handle<Script> script) {
- Vector<const char> filter = CStrVector(raw_filter);
- if (!script->name()->IsString()) return filter.length() == 0;
- String* name = String::cast(script->name());
- return name->IsUtf8EqualTo(filter, true);
-}
-
-
static bool CompileUnoptimizedCode(CompilationInfo* info) {
DCHECK(AllowCompilation::IsAllowed(info->isolate()));
if (!Compiler::Analyze(info->parse_info()) ||
@@ -721,15 +703,37 @@ static bool CompileUnoptimizedCode(CompilationInfo* info) {
}
+// TODO(rmcilroy): Remove this temporary work-around when ignition supports
+// catch and eval.
+static bool IgnitionShouldFallbackToFullCodeGen(Scope* scope) {
+ if (!FLAG_ignition_fallback_on_eval_and_catch) return false;
+
+ if (scope->is_eval_scope() || scope->is_catch_scope() ||
+ scope->calls_eval()) {
+ return true;
+ }
+ for (auto inner_scope : *scope->inner_scopes()) {
+ if (IgnitionShouldFallbackToFullCodeGen(inner_scope)) return true;
+ }
+ return false;
+}
+
+
static bool GenerateBytecode(CompilationInfo* info) {
DCHECK(AllowCompilation::IsAllowed(info->isolate()));
- if (!Compiler::Analyze(info->parse_info()) ||
- !interpreter::Interpreter::MakeBytecode(info)) {
+ bool success = false;
+ if (Compiler::Analyze(info->parse_info())) {
+ if (IgnitionShouldFallbackToFullCodeGen(info->scope())) {
+ success = FullCodeGenerator::MakeCode(info);
+ } else {
+ success = interpreter::Interpreter::MakeBytecode(info);
+ }
+ }
+ if (!success) {
Isolate* isolate = info->isolate();
if (!isolate->has_pending_exception()) isolate->StackOverflow();
- return false;
}
- return true;
+ return success;
}
@@ -747,8 +751,7 @@ MUST_USE_RESULT static MaybeHandle<Code> GetUnoptimizedCodeCommon(
MaybeDisableOptimization(shared, lit->dont_optimize_reason());
if (FLAG_ignition && !shared->HasBuiltinFunctionId() &&
- info->closure()->PassesFilter(FLAG_ignition_filter) &&
- ScriptPassesFilter(FLAG_ignition_script_filter, info->script())) {
+ info->closure()->PassesFilter(FLAG_ignition_filter)) {
// Compile bytecode for the interpreter.
if (!GenerateBytecode(info)) return MaybeHandle<Code>();
} else {
@@ -1173,6 +1176,13 @@ void Compiler::CompileForLiveEdit(Handle<Script> script) {
}
+// Checks whether top level functions should be passed by {raw_filter}.
+static bool TopLevelFunctionPassesFilter(const char* raw_filter) {
+ Vector<const char> filter = CStrVector(raw_filter);
+ return (filter.length() == 0) || (filter.length() == 1 && filter[0] == '*');
+}
+
+
static Handle<SharedFunctionInfo> CompileToplevel(CompilationInfo* info) {
Isolate* isolate = info->isolate();
PostponeInterruptsScope postpone(isolate);
@@ -1236,8 +1246,7 @@ static Handle<SharedFunctionInfo> CompileToplevel(CompilationInfo* info) {
HistogramTimerScope timer(rate);
// Compile the code.
- if (FLAG_ignition && TopLevelFunctionPassesFilter(FLAG_ignition_filter) &&
- ScriptPassesFilter(FLAG_ignition_script_filter, script)) {
+ if (FLAG_ignition && TopLevelFunctionPassesFilter(FLAG_ignition_filter)) {
if (!GenerateBytecode(info)) {
return Handle<SharedFunctionInfo>::null();
}
« no previous file with comments | « no previous file | src/flag-definitions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698