In this article, we introduce the llpython package. The primary goal of the llpython package is to provide a Python dialect/subset that maps directly to LLVM code. LLPython differs from its originating LLVM translator, Numba, in the following aspects:
- LLPython code is not intended to work in Python if not translated and wrapped.
- The LLPython translator only uses LLVM types.
- LLPython is explicitly typed, and does not support type inference. LLPython does not support implicit casts, all casts must be explicit.
- LLPython supports code that directly calls the C API, the Python C API, and the llvm.core.Builder methods.
Additionally, we designed the sub-package to have the following engineering properties:
- Usable from Python 2.7, and 3.X. At the time of writing, we plan to support Python 2.6.
- Clean from Numba dependencies (other than llvmpy), and can be used as a standalone code generator without a full Numba installation.
- Provides a series of Python bytecode passes that can be easily used by other projects.
We developed LLPython with the initial goal of simplifying writing LLVM code.
In this section, we describe the various passes performed by the LLPython translator.
LLPython is neat.