From 2758d99bbcd44372ebd08bf375b110c8e07bb395 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 29 Sep 2021 18:43:58 +0200 Subject: [PATCH] LibRegex: Flatten bytecode before performing optimizations This avoids doing DisjointChunks traversal for every bytecode access, significantly reducing startup time for large regular expressions. --- Userland/Libraries/LibRegex/RegexOptimizer.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Userland/Libraries/LibRegex/RegexOptimizer.cpp b/Userland/Libraries/LibRegex/RegexOptimizer.cpp index fc82f0d6ac..4546f607b6 100644 --- a/Userland/Libraries/LibRegex/RegexOptimizer.cpp +++ b/Userland/Libraries/LibRegex/RegexOptimizer.cpp @@ -17,6 +17,8 @@ using Detail::Block; template void Regex::run_optimization_passes() { + parser_result.bytecode.flatten(); + // Rewrite fork loops as atomic groups // e.g. a*b -> (ATOMIC a*)b attempt_rewrite_loops_as_atomic_groups(split_basic_blocks());