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-1andm1are 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,predwill roughly match the .ll bitcode file. Of particular use areallandnone.
-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.