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
, LLVM_BUILD_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
.
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 (default x8632).
-verbose=<list>
-- Set verbosity flags. This argument allows a comma-separated list of values. The default isnone
, and the valueinst,pred
will roughly match the .ll bitcode file. Of particular use areall
andnone
.
See ir_samples/README.rst for more details.
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.
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.