Difference between revisions of "LLVM"

From YobiWiki
Jump to navigation Jump to search
(Created page with "==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. ...")
 
m
Line 15: Line 15:
 
export('multc c16(c16, c16)'))(mult)
 
export('multc c16(c16, c16)'))(mult)
 
</source>
 
</source>
  +
==llpython==
  +
Part of llvmpy
  +
* [http://www.llvmpy.org/llvmpy-doc/0.12.4/doc/llpython/index.html 0.12.4 doc]
  +
* [https://github.com/llvmpy/llvmpy/tree/master/llpython on Github]
  +
The primary goal of the llpython package is to provide a Python dialect/subset that maps directly to LLVM code.
  +
<br>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...
  +
==[http://www.llvmpy.org/ llvmpy]==

Revision as of 10:30, 20 May 2014

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