Skip to content

stichnot/subzero

Repository files navigation

Subzero - Fast code generator for PNaCl bitcode

OBSOLETE

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

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. Future targets include x8664, arm32, and arm64.

-O<LEVEL> -- Set the optimization level. Valid levels are 2, 1, 0, -1, and m1. Levels -1 and m1 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 is none, and the value inst,pred will roughly match the .ll bitcode file. Of particular use are all and none.

-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.

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.

About

Subzero - Fast code generator for PNaCl bitcode

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published