This repository is now obsolete. Please see its new home under the Chromium / Native Client source tree.
https://chromium.googlesource.com/native_client/pnacl-subzero/+/master
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
.
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. Future targets include x8664, arm32, and arm64.
-O<LEVEL>
-- Set the optimization level. Valid levels are2
,1
,0
,-1
, andm1
. Levels-1
andm1
are synonyms, and represent the minimum optimization and worst code quality, but fastest code generation.
-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
.
-o <FILE>
-- Set the assembly output file name. Default is stdout.
-log <FILE>
-- Set the file name for diagnostic output (whose level is controlled by-verbose
). Default is stdout.
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.