LuaJIT - это трассирующий JIT, что означает, что он может повторно оптимизировать себя для лучшего размещения данных, передаваемых через среду выполнения, однако LLVM является статическим JIT и, таким образом, будет просто генерировать разовый машинный код в лучшем случае. для соответствующего источника, который может привести его к потере производительности в тесных циклах или неправильных прогнозах ветвления.
Фактическая виртуальная машина LuaJIT также является высокооптимизированной, многопоточной, специфичной для машины сборкой, где LLVM использует C ++ для переносимости (и других причин), так что это, очевидно, дает LuaJIT огромное преимущество. LLVM также имеет гораздо больше накладных расходов, чем LuaJIT, просто потому, что LuaJIT был разработан для работы на гораздо менее мощных системах (например, с процессорами ARM).
Байт-код LuaJIT также был специально разработан для LuaJIT, поскольку, поскольку битовый код LLVM намного более универсален, это, очевидно, заставит LuaJIT выполняться быстрее. Байт-код LuaJIT также хорошо разработан для подсказок по оптимизации кодирования и т. Д. Для использования JIT и трассировщиком.
игнорируя тот факт, что это два разных типа JIT, все сравнение сводится к тому, что LLVM сфокусирован на том, чтобы быть универсальным JIT / Compiler backend, LuaJIT нацелен на максимально быстрое выполнение Lua наилучшим образом, таким образом он выигрывает от того, что не ограничен общностью.