blob: 9de4602ac92d89c17591a6aaa4dc23b85ba13a0c [file] [log] [blame]
Subzero - Fast code generator for PNaCl bitcode
===============================================
Building
--------
You must have LLVM trunk source code available and built. See
http://llvm.org/docs/GettingStarted.html#getting-started-quickly-a-summary for
guidance.
Set variables ``LLVM_SRC_PATH`` and ``LLVM_BIN_PATH`` to point to the
appropriate directories in the LLVM source and build directories. These can be
set as environment variables, or you can modify the top-level Makefile.
Run ``make`` at the top level to build the main target ``llvm2ice``.
``llvm2ice``
------------
The ``llvm2ice`` program uses the LLVM infrastructure to parse an LLVM bitcode
file and translate it into ICE. It then invokes ICE's translate method to lower
it to target-specific machine code, dumping the IR at various stages of the
translation.
The program can be run as follows::
../llvm2ice ./ir_samples/<file>.ll
../llvm2ice ./tests_lit/llvm2ice_tests/<file>.ll
At this time, ``llvm2ice`` accepts a few arguments:
``-help`` -- Show available arguments and possible values.
``-notranslate`` -- Suppress the ICE translation phase, which is useful if
ICE is missing some support.
``-target=<TARGET>`` -- Set the target architecture. The default is x8632,
and x8632fast (generate x8632 code as fast as possible at the cost of code
quality) is also available. Future targets include x8664, arm32, and arm64.
``-verbose=<list>`` -- Set verbosity flags. This argument allows a
comma-separated list of values. The default is ``none``, and the value
``inst,pred`` will roughly match the .ll bitcode file. Of particular use
are ``all`` and ``none``.
See ir_samples/README.rst for more details.
Running the test suite
----------------------
Subzero uses the LLVM ``lit`` testing tool for its test suite, which lives in
``tests_lit``. To execute the test suite, first build Subzero, and then run::
python <path_to_lit.py> -sv tests_lit
``path_to_lit`` is the direct path to the lit script in the LLVM source
(``$LLVM_SRC_PATH/utils/lit/lit.py``).
The above ``lit`` execution also needs the LLVM binary path in the
``LLVM_BIN_PATH`` env var.
Assuming the LLVM paths are set up, ``make check`` is a convenient way to run
the test suite.
Assembling ``llvm2ice`` output
------------------------------
Currently ``llvm2ice`` produces textual assembly code in a structure suitable
for input to ``llvm-mc`` and currently using "intel" assembly syntax. The first
line of output is a convenient comment indicating how to pipe the output to
``llvm-mc`` to produce object code.