ladybird/Userland/Libraries/LibJS/Bytecode
Andreas Kling 4438ec481c LibJS/Bytecode: Add peephole optimization pass and fuse compare+jump
This patch adds a new "Peephole" pass for performing small, local
optimizations to bytecode.

We also introduce the first such optimization, fusing a sequence of
some comparison instruction FooCompare followed by a JumpIf into a
new set of JumpFooCompare instructions.

This gives a ~50% speed-up on the following microbenchmark:

    for (let i = 0; i < 10_000_000; ++i) {
    }

But more traditional benchmarks see a pretty sizable speed-up as well,
for example 15% on Kraken/ai-astar.js and 16% on Kraken/audio-dft.js :^)
2024-03-04 20:54:51 +01:00
..
Pass LibJS/Bytecode: Add peephole optimization pass and fuse compare+jump 2024-03-04 20:54:51 +01:00
ASTCodegen.cpp LibJS/Bytecode: Bring back the bytecode optimization pipeline 2024-03-04 20:54:51 +01:00
BasicBlock.cpp Everywhere: Rename {Deprecated => Byte}String 2023-12-17 18:25:10 +03:30
BasicBlock.h LibJS/Bytecode: Add peephole optimization pass and fuse compare+jump 2024-03-04 20:54:51 +01:00
Builtins.cpp LibJS: Introduce Builtins 2023-11-17 19:06:25 +01:00
Builtins.h LibJS/JIT: Add builtin for Math.exp() 2023-11-24 12:49:15 +01:00
CodeGenerationError.cpp LibJS: Add to_string definitions to CodeGenerationError and ParserError 2023-02-17 09:14:23 -05:00
CodeGenerationError.h LibJS: Remove unused CodeGenerationError::to_deprecated_string 2023-02-17 09:14:23 -05:00
CommonImplementations.h LibJS/Bytecode: Cache realm, global object, and more in interpreter 2024-02-28 21:09:09 +01:00
Executable.cpp LibJS/Bytecode: Make primitive strings be constants 2024-03-03 22:27:44 +01:00
Executable.h LibJS/Bytecode: Make primitive strings be constants 2024-03-03 22:27:44 +01:00
Generator.cpp LibJS/Bytecode: Make primitive strings be constants 2024-03-03 22:27:44 +01:00
Generator.h LibJS/Bytecode: Bring back the bytecode optimization pipeline 2024-03-04 20:54:51 +01:00
IdentifierTable.cpp LibJS: Don't worry about deduplicating bytecode string tables 2023-10-04 20:10:12 +02:00
IdentifierTable.h AK+Everywhere: Rename FlyString to DeprecatedFlyString 2023-01-09 23:00:24 +00:00
Instruction.cpp LibJS/Bytecode: Bring back the bytecode optimization pipeline 2024-03-04 20:54:51 +01:00
Instruction.h LibJS/Bytecode: Add peephole optimization pass and fuse compare+jump 2024-03-04 20:54:51 +01:00
Interpreter.cpp LibJS/Bytecode: Add peephole optimization pass and fuse compare+jump 2024-03-04 20:54:51 +01:00
Interpreter.h LibJS/Bytecode: Bring back the bytecode optimization pipeline 2024-03-04 20:54:51 +01:00
Label.h Everywhere: Add sv suffix to strings relying on StringView(char const*) 2022-07-12 23:11:35 +02:00
Op.h LibJS/Bytecode: Add peephole optimization pass and fuse compare+jump 2024-03-04 20:54:51 +01:00
Operand.h LibJS/Bytecode: Add Bytecode::Operand 2024-02-19 21:45:27 +01:00
PassManager.h LibJS/Bytecode: Add peephole optimization pass and fuse compare+jump 2024-03-04 20:54:51 +01:00
RegexTable.cpp LibJS/Bytecode: Don't reparse regular expressions on instantiation 2023-07-13 13:30:49 +02:00
RegexTable.h Everywhere: Rename {Deprecated => Byte}String 2023-12-17 18:25:10 +03:30
Register.h LibJS: Stash thrown exception in a register before executing finalizer 2023-11-03 20:27:45 +01:00
StringTable.cpp Everywhere: Rename {Deprecated => Byte}String 2023-12-17 18:25:10 +03:30
StringTable.h Everywhere: Rename {Deprecated => Byte}String 2023-12-17 18:25:10 +03:30