Skip to content
Vladislav Ivanishin edited this page Mar 28, 2016 · 13 revisions

What is supported

The only supported architecture right now is x86-64. Being a prototype, LLV8 is not able to compile all of the JavaScript at the moment. However, the working subset is substantial. And most of the conceptual issues (I believe) are resolved. Most notably, interactions of the compiled code with the garbage collector.

For more information see our list of issues and the [design doc](Design doc).

Profit?

Talking about speed-ups might be a bit early, because the right time for optimization is just about to come. However what we have observed so far is that the performance of the code is pretty much the same as for Crankshaft.

Compile times (not surprisingly) are much larger. To give some numbers, the compile times can be about 400 ms (llvm) vs. 10 ms (crankshaft) for a medium-sized asm.js program. One of the reasons for such long compile times is that we are using the standard -O3 set of IR transformation passes of which we really only need a few.

We've had measurable speed-ups on some tests (again, this information here is only to give the readers a feel of what's going on):

bitops-bits-in-byte
Number of iterations Original x 100 Original x 1000
Total execution time using Crankshaft, s 0.19 1.88
Total execution time using LLV8, s 0.09 0.54
Speedup 2.11 3.48

This test benefits from the loop unrolling optimization present in the set of LLVM optimization passes.

3d-cube
Number of iterations Original Original x 5 Original x 10
Total execution time using Crankshaft, ms 100 391 842
Total execution time using LLV8, ms 85 177 325
Speedup 1.18 2.21 2.59

As the tables show, we modified the tests to do more iterations in order to run longer.

Failing tests

Currently failing tests:

21/167 tests failed
llv8-regtests/LongSpider/math-partial-sums/math-partial-sums.js
llv8-regtests/LongSpider/math-partial-sums/mwe/math-partial-sums.js
llv8-regtests/LongSpider/string-base64/toBase64/string-base64.js
llv8-regtests/LongSpider/string-base64/base64ToString/string-base64.js
llv8-regtests/LongSpider/3d-raytrace/Triangle.intersect/3d-raytrace.js
llv8-regtests/LongSpider/3d-cube/Rotate/3d-cube.js
llv8-regtests/LongSpider/3d-cube/translate/3d-cube.js
llv8-regtests/LongSpider/access-binary-trees/buttomup/mwe/access-binary-trees.js
llv8-regtests/LongSpider/string-fasta/fastaRandom/string-fasta.js
llv8-regtests/LongSpider/crypto-aes/KeyExpansion/crypto-aes.js
llv8-regtests/LongSpider/crypto-aes/escCtrlChars/crypto-aes.js
llv8-regtests/LongSpider/crypto-aes/AESDecryptCtr/crypto-aes.js
llv8-regtests/LongSpider/math-spectral-norm/Atu/math-spectral-norm.js
llv8-regtests/LongSpider/math-spectral-norm/Au/math-spectral-norm.js
llv8-regtests/LongSpider/math-spectral-norm/AtAu/math-spectral-norm.js
llv8-regtests/LongSpider/string-tagcloud/string-tagcloud.js
llv8-regtests/LongSpider/3d-morph/3d-morph.js
llv8-regtests/math-tests/mathPow/mathPow.js
llv8-regtests/asmjs-jetstream/richards/run.js
llv8-regtests/asmjs-jetstream/richards/richards.js
llv8-regtests/asmjs-jetstream/gcc-loops/a.out.js
Clone this wiki locally