LLVM

From YobiWiki
Jump to navigation Jump to search

Numba

Numba is a NumPy aware dynamic compiler for Python. It creates LLVM bit-code from Python syntax and then creates a wrapper around that bitcode to call from Python.

pycc allows users to compile Numba functions into a shared library. The user writes the functions, exports them and the compiler will import the module, collect the exported functions and compile them to a shared library. Below is an example:

from numba import *
def mult(a, b):
    return a * b
export('mult f8(f8, f8)'))(mult)
export(['multf f4(f4, f4)', 'multi i4(i4, i4)'])(mult)
export('multc c16(c16, c16)'))(mult)

llpython

Part of llvmpy

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.

We developed LLPython with the initial goal of simplifying writing LLVM code.

TODO not clear yet from the doc how to use it...

llvmpy