From 7b93b8cea7c3df035f737fec37daad4d9b58684e Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 6 May 2024 16:50:48 +0200 Subject: [PATCH] LibJS/Bytecode: Flatten the interpreter main loop (Clang only) This means inlining all the things. This yields a 40% speedup on the for loop microbenchmark, and everything else gets faster as well. :^) This makes compilation take foreeeever with GCC, so I'm only enabling it for Clang in this commit. We should figure out how to make GCC compile this without timing out CI, since the speedup is amazing. --- Userland/Libraries/LibJS/Bytecode/Interpreter.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp b/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp index def0dc399b5..cb47b2b2c72 100644 --- a/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp +++ b/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp @@ -330,7 +330,14 @@ Interpreter::HandleExceptionResponse Interpreter::handle_exception(size_t& progr VERIFY_NOT_REACHED(); } -void Interpreter::run_bytecode(size_t entry_point) +// FIXME: GCC takes a *long* time to compile with flattening, and it will time out our CI. :| +#if defined(AK_COMPILER_CLANG) +# define FLATTEN_ON_CLANG FLATTEN +#else +# define FLATTEN_ON_CLANG +#endif + +FLATTEN_ON_CLANG void Interpreter::run_bytecode(size_t entry_point) { auto& running_execution_context = vm().running_execution_context(); auto* locals = running_execution_context.locals.data();