LibRegex: Flatten bytecode before performing optimizations

This avoids doing DisjointChunks traversal for every bytecode access,
significantly reducing startup time for large regular expressions.
This commit is contained in:
Andreas Kling 2021-09-29 18:43:58 +02:00
parent 7bdf0be667
commit 2758d99bbc
Notes: sideshowbarker 2024-07-18 03:20:40 +09:00

View File

@ -17,6 +17,8 @@ using Detail::Block;
template<typename Parser>
void Regex<Parser>::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());