Updated documentation, license and changelog.
git-svn-id: http://llvm-py.googlecode.com/svn/trunk@8 8d1e9007-1d4e-0410-b67e-1979fd6579aa
This commit is contained in:
parent
55a6a6ed79
commit
71e1ee072a
15 changed files with 868 additions and 373 deletions
|
|
@ -1,16 +1,10 @@
|
|||
About
|
||||
=====
|
||||
|
||||
[NOTE]
|
||||
._llvm-py_ Mission Statement
|
||||
=======================================================================
|
||||
Provide a simple, consistent and well-documented suite of APIs that
|
||||
exposes just enough of LLVM to write a compiler/VM in Python.
|
||||
=======================================================================
|
||||
|
||||
_llvm-py_ is developed by Mahadevan R, in his spare time, without being
|
||||
paid for it. He can be reached at _mdevan.foobar .at. gmail.com_, on the
|
||||
llvm-py is developed by Mahadevan R, in his spare time, without being
|
||||
paid for it. He can be reached at mdevan.foobar@gmail.com, on the
|
||||
llvm-dev mailing list and irc.oftc.net#llvm (mdevan).
|
||||
|
||||
These web pages were generated using the nifty tool
|
||||
http://www.methods.co.nz/asciidoc/[asciidoc].
|
||||
Many thanks to the guys over at LLVM for all the nifty software, and a
|
||||
helpful mailing list.
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,23 @@
|
|||
Contribute
|
||||
==========
|
||||
|
||||
_llvm-py_ is just hatching. It needs your patches and suggestions to
|
||||
grow up. Please contribute! All patches are welcome.
|
||||
llvm-py is just hatching. It needs your patches and suggestions to
|
||||
grow up. Please contribute! All patches are welcome. Here are some links
|
||||
to start hacking away:
|
||||
|
||||
The _llvm-py_ code is hosted on a google code project by the same name,
|
||||
http://code.google.com/p/llvm-py/[here]. It provides the SVN repository
|
||||
and a http://code.google.com/p/llvm-py/issues/list[bug tracker]. The
|
||||
latest code can be checked out from SVN like so:
|
||||
`40`60~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Google code hosting, http://code.google.com/p/llvm-py/[http://code.google.com/p/llvm-py/]
|
||||
Browse SVN, http://code.google.com/p/llvm-py/source/browse/[http://code.google.com/p/llvm-py/source/browse]
|
||||
Issues tracker, http://code.google.com/p/llvm-py/issues/list[http://code.google.com/p/llvm-py/issues/list]
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
SVN HEAD can be checked out like so:
|
||||
|
||||
----
|
||||
$ svn checkout http://llvm-py.googlecode.com/svn/trunk/ llvm-py
|
||||
----
|
||||
|
||||
You can browse the source online at:
|
||||
http://code.google.com/p/llvm-py/source/browse[http://code.google.com/p/llvm-py/source/browse].
|
||||
Mahadevan R (mdevan.foobar@gmail.com) is available to answer your
|
||||
queries.
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
Download and Setup
|
||||
==================
|
||||
Download
|
||||
========
|
||||
|
||||
The latest release is 0.2, released xx-Jun-2008 (full link:#changelog[Changelog]
|
||||
The latest release is 0.2, released xx-Jun-2008 (link:#changelog[Changelog]
|
||||
below).
|
||||
|
||||
Download it here:
|
||||
|
|
@ -15,81 +15,14 @@ Release,Date,Package,Mirror
|
|||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
Bleeding Edge
|
||||
-------------
|
||||
|
||||
The latest code can be checked out from SVN thusly:
|
||||
The latest code can be checked out from SVN like so:
|
||||
|
||||
----
|
||||
$ svn checkout http://llvm-py.googlecode.com/svn/trunk/ llvm-py
|
||||
----
|
||||
|
||||
Happy hacking, and please send in your patches.
|
||||
|
||||
|
||||
Setting Up
|
||||
----------
|
||||
|
||||
Follow these steps to get _llvm-py_ up and running:
|
||||
|
||||
* link:#uninstall[Uninstall] any previous version of _llvm-py_.
|
||||
* Get and build LLVM.
|
||||
* Optionally, install it.
|
||||
* Get the latest release (see above) of _llvm-py_ and untar it:
|
||||
----
|
||||
$ wget http://link/llvm-py-0.2.tar.bz2
|
||||
$ tar jxvf llvm-py-0.2.tar.bz2
|
||||
----
|
||||
* If you've installed LLVM, setup _llvm-py_ like this:
|
||||
----
|
||||
$ cd llvm-py-0.2
|
||||
$ sudo python setup.py install
|
||||
----
|
||||
* If you haven't installed LLVM, locate the executable +llvm-config+
|
||||
under your LLVM build directory (should be something like
|
||||
+/home/mdevan/llvm/Release/bin/llvm-config+) and pass this to setup.py:
|
||||
----
|
||||
$ cd llvm-py-0.2
|
||||
$ sudo python setup.py install --llvm-config=/path/to/llvm-config
|
||||
----
|
||||
|
||||
That's it!
|
||||
|
||||
.Notes:
|
||||
- _setup.py_ is a standard Python distutils script. See the Python
|
||||
documentation regarding
|
||||
http://docs.python.org/inst/inst.html[Installing Python Modules] and
|
||||
http://docs.python.org/dist/dist.html[Distributing Python Modules] for
|
||||
more information on such scripts.
|
||||
|
||||
- To build the debug version, build with the +-g+ flag and the debug
|
||||
version of llvm-config:
|
||||
+
|
||||
----
|
||||
$ python setup.py build -g --llvm-config=/path/to/Debug/bin/llvm-config
|
||||
$ sudo python setup.py install
|
||||
----
|
||||
|
||||
- Debug binaries are _huge_! (65 MB+)
|
||||
|
||||
- If +++--llvm-config+++ is not specified, +setup.py+ looks for
|
||||
+llvm-config+ in the +PATH+, which will succeed if LLVM is installed.
|
||||
|
||||
|
||||
[[uninstall]]
|
||||
Uninstall
|
||||
---------
|
||||
|
||||
To get rid of llvm-py completely, if you wish to do so:
|
||||
|
||||
----
|
||||
# rm -rf /usr/lib/python2.5/site-packages/llvm
|
||||
# rm -f /usr/lib/python2.5/site-packages/llvm_py-0.1.egg-info
|
||||
----
|
||||
|
||||
- You need to be root to do this.
|
||||
- Paths are for debian-based systems, in other distros it might be different.
|
||||
- Note that there is a version number in the egg file name.
|
||||
Follow the steps link:userguide.html#install[described here] to install the
|
||||
package.
|
||||
|
||||
|
||||
[[changelog]]
|
||||
|
|
|
|||
|
|
@ -1,19 +1,14 @@
|
|||
llvm-py: Python Bindings for LLVM
|
||||
===================================
|
||||
|
||||
_llvm-py_ provides http://www.python.org/[Python] bindings for
|
||||
http://llvm.org/[LLVM]. It currently provides APIs to build the in-memory IR
|
||||
(intermediate representation) and to dump it. Execution engine and related APIs
|
||||
should appear soon.
|
||||
llvm-py provides http://www.python.org/[Python] bindings for
|
||||
http://llvm.org/[LLVM]. It's goal is to expose enough of LLVM APIs to
|
||||
implement a compiler or VM in pure Python. Currently, llvm-py is
|
||||
available for LLVM 2.3 and Python 2.5, on Linux/x86. It is expected to
|
||||
be usable on various unices, as well as with Python 2.4, with minimal
|
||||
changes, if any. It should be stable enough for you to play with.
|
||||
|
||||
_llvm-py_ is a set of Python-based and C-based Python modules. It makes use of
|
||||
llvm-c, the C binding for LLVM. It is based on the latest SVN version of LLVM
|
||||
(and will not work on 2.2). It has been tested only with Python 2.5, although
|
||||
it should be usable with 2.4 also. I've built and tested it only on Linux/i386
|
||||
machines.
|
||||
|
||||
Download links, setup help and changelog are on the
|
||||
link:download.html[download] page.
|
||||
llvm-py is just hatching, and your contributions would be most welcome.
|
||||
|
||||
News
|
||||
----
|
||||
|
|
|
|||
|
|
@ -11,30 +11,5 @@ http://code.google.com/p/llvm-py/source/browse/trunk/LICENSE[LICENSE]
|
|||
file in the distribution, and is reproduced here:
|
||||
|
||||
----
|
||||
Copyright (c) 2008, Mahadevan R All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of the Mahadevan R, llvm-py nor the names of its
|
||||
contributors may be used to endorse or promote products derived from this
|
||||
software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
include::../../LICENSE[]
|
||||
----
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
llvm-py User Guide
|
||||
===================
|
||||
|
||||
_llvm-py_ provides Python bindings for LLVM. This document explains how
|
||||
llvm-py provides Python bindings for LLVM. This document explains how
|
||||
you can setup and use it. A working knowledge of Python and a basic idea
|
||||
of LLVM is assumed.
|
||||
|
||||
|
|
@ -16,33 +16,33 @@ static and dynamic (JIT) backends for many platforms. See the website at
|
|||
http://www.llvm.org/[http://www.llvm.org/] to discover more.
|
||||
|
||||
Python bindings for LLVM provides a gentler learning curve for working
|
||||
with the LLVM APIs. It should also prove easier to create working
|
||||
with the LLVM APIs. It should also be easier to create working
|
||||
prototypes and experimental languages using this medium.
|
||||
|
||||
.License
|
||||
Both LLVM and _llvm-py_ are distributed under (different) permissive
|
||||
open source licenses. _llvm-py_ uses the
|
||||
Both LLVM and llvm-py are distributed under (different) permissive
|
||||
open source licenses. llvm-py uses the
|
||||
http://opensource.org/licenses/bsd-license.php[new BSD license]. More
|
||||
information is available link:license.html[here].
|
||||
|
||||
.Platforms
|
||||
Currently, _llvm-py_ has been built and tested only on Linux/x86. However,
|
||||
Currently, llvm-py has been built and tested only on Linux/x86. However,
|
||||
it should be trivial to build it on other unices. Windows is not
|
||||
supported, for a variety of reasons.
|
||||
|
||||
.Versions
|
||||
As of now, _llvm-py_ requires the latest SVN version of LLVM. It will
|
||||
not work with version 2.2 of LLVM. However, 2.3 should be release soon,
|
||||
and _llvm-py_ should work with stock 2.3 LLVM.
|
||||
llvm-py requires verion 2.3 of LLVM. It will not work with previous
|
||||
versions.
|
||||
|
||||
_llvm-py_ has been built and tested with Python 2.5. It should work with
|
||||
llvm-py has been built and tested with Python 2.5. It should work with
|
||||
Python 2.4, with minimal changes, if any.
|
||||
|
||||
|
||||
[[install]]
|
||||
Installation
|
||||
------------
|
||||
|
||||
_llvm-py_ is distributed as a source tarball. You'll need to build and
|
||||
llvm-py is distributed as a source tarball. You'll need to build and
|
||||
install it before it can be used. At least the following will be
|
||||
required for this:
|
||||
|
||||
|
|
@ -54,7 +54,10 @@ required for this:
|
|||
On debian-based systems, the first three can be installed with the
|
||||
command `sudo apt-get install gcc g++ python python-dev'. Note that
|
||||
ubuntu repository has an old version of llvm (1.8) which will not work
|
||||
with _llvm-py_.
|
||||
with llvm-py.
|
||||
|
||||
Tip: If LLVM 2.3 does not install cleanly, try installing 'ocamldoc'
|
||||
first.
|
||||
|
||||
|
||||
llvm-config
|
||||
|
|
@ -67,6 +70,10 @@ be done. If you've built LLVM yourself, or for any reason +llvm-config+
|
|||
is not in your +PATH+, you'll need to pass the full path of
|
||||
+llvm-config+ to the build script.
|
||||
|
||||
You'll need to be 'root' to install llvm-py. Remember that your +PATH+
|
||||
is different from that of 'root', so even if +llvm-config+ is in your
|
||||
+PATH+, it may not be available when you do +sudo+.
|
||||
|
||||
|
||||
Steps
|
||||
~~~~~
|
||||
|
|
@ -201,8 +208,8 @@ The PHI node selects +a1+ or +a2+, depending on where the control
|
|||
reached the PHI node. The argument +a1+ of the PHI node is associated
|
||||
with the block +"a1 = 1;"+ and +a2+ with the block +"a2 = 2;"+.
|
||||
|
||||
PHI nodes have to be explicitly created in the LLVM IR. The LLVM
|
||||
instruction set therefore has an instruction called _phi_.
|
||||
PHI nodes have to be explicitly created in the LLVM IR. Accordingly the
|
||||
LLVM instruction set has an instruction called +phi+.
|
||||
|
||||
|
||||
LLVM Assembly Language
|
||||
|
|
@ -277,11 +284,12 @@ most suitable for the code in the module.
|
|||
There is a LLVM binary called http://www.llvm.org/cmds/opt.html[opt],
|
||||
which lets you run passes on bitcode files from the command line. You
|
||||
can write your own passes (in C/C\+\+, as a shared library). This can be
|
||||
loaded and executed by +opt+. (Although _llvm-py_ does not allow you to
|
||||
loaded and executed by +opt+. (Although llvm-py does not allow you to
|
||||
write your own passes, it does allow you to navigate the entire IR at
|
||||
any stage, and perform any transforms on it as you like.)
|
||||
|
||||
Passes are run using a _pass manager_. For our purposes, there are two
|
||||
pass managers TODO
|
||||
|
||||
|
||||
Execution Engine
|
||||
|
|
@ -295,24 +303,246 @@ BitCode
|
|||
|
||||
TODO
|
||||
|
||||
|
||||
llvm-gcc
|
||||
~~~~~~~~
|
||||
|
||||
TODO
|
||||
|
||||
The _llvm-py_ Package
|
||||
|
||||
The llvm-py Package
|
||||
---------------------
|
||||
|
||||
modules overview: llvm, llvm.core, llvm.ee, llvm.passes
|
||||
The llvm-py is a Python package, consisting of 6 modules, that wrap
|
||||
over enough LLVM APIs to allow the implementation of your own
|
||||
compiler/VM backend in pure Python. If you're come this far, you
|
||||
probably know why this is a good idea.
|
||||
|
||||
importing modules
|
||||
Out of the 6 modules, one is an "extension" module (i.e., it's written
|
||||
in C), and another one is a private utility module, which leaves 4
|
||||
public modules. These are:
|
||||
|
||||
core:
|
||||
- +llvm+ -- top-level package, common classes (like exceptions)
|
||||
- +llvm.core+ -- IR-related APIs
|
||||
- +llvm.ee+ -- execution engine related APIs
|
||||
- +llvm.passes+ -- pass manager and passes related APIs
|
||||
|
||||
types
|
||||
The modules contain only classes and (integer) constants. Mostly simple
|
||||
Python constructs are used (deliberately) --
|
||||
http://docs.python.org/lib/built-in-funcs.html[property()] and
|
||||
http://wiki.python.org/moin/PythonDecoratorLibrary[property
|
||||
decorators] are probably the most exotic animals around. The APIs are
|
||||
designed to be navigable (and guessable!) once you know a few
|
||||
conventions. These conventions are highlighted in the sections below.
|
||||
|
||||
constants
|
||||
Here is a quick overview of the contents of each package:
|
||||
|
||||
values
|
||||
.llvm
|
||||
- LLVMException -- exception class (currently the only one)
|
||||
|
||||
.llvm.core
|
||||
- Module -- represents an LLVM Module
|
||||
- Type -- represents an LLVM Type
|
||||
- IntegerType, FunctionType, StructType, ArrayType, PointerType,
|
||||
VectorType -- derived classes of Type
|
||||
- TypeHandle -- used for constructing recursive (self-referencing) types
|
||||
(e.g. linked list nodes)
|
||||
- Value -- represents an LLVM Value
|
||||
- Constant, GlobalValue, GlobalVariable, Argument, Function,
|
||||
Instruction, CallOrInvokeInstruction, PHINode, SwitchInstruction --
|
||||
various derived classes of Value
|
||||
- BasicBlock -- another derived of Value, represents an LLVM basic block
|
||||
- Builder -- used for creating instructions, wraps LLVM IRBuilder helper
|
||||
class
|
||||
- ModuleProvider -- required to use modules in execution engine and pass
|
||||
manager
|
||||
- constants +TYPE_*+ that represents various types
|
||||
- constants +CC_*+ that represent calling conventions
|
||||
- constants +IPRED_*+ and +RPRED_*+ that represent integer and real
|
||||
comparison predicates (like less than, greater than etc.)
|
||||
- constants +LINKAGE_*+ that represent linkage of symbols (external,
|
||||
internal etc.)
|
||||
- constants +VISIBILITY_*+ that represents visibility of symbols
|
||||
(default, hidden, protected)
|
||||
- constants +ATTR_*+ that represent function parameter attributes
|
||||
|
||||
.llvm.ee
|
||||
- ExecutionEngine -- represents an execution engine (which can be an
|
||||
either an interpreter or a JIT)
|
||||
- TargetData -- represents the ABI of the target platform (details like
|
||||
sizes and alignment of primitive types, endinanness etc)
|
||||
|
||||
.llvm.passes
|
||||
- PassManager -- represents an LLVM pass manager
|
||||
- FunctionPassManager -- represents an LLVM function pass manager
|
||||
- constants +PASS_*+ that represent various passes
|
||||
|
||||
.A note on the 'import'ing of these modules
|
||||
Pythonically, modules are imported with the statement +"import
|
||||
llvm.core"+ and not +"from llvm.core import *"+. However, you might find
|
||||
it more convenient to import llvm-py modules thus:
|
||||
|
||||
[python]
|
||||
source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
from llvm import *
|
||||
from llvm.core import *
|
||||
from llvm.ee import *
|
||||
from llvm.passes import *
|
||||
source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This avoids quite some typing. Both conventions work, however.
|
||||
|
||||
TIP: Python-style documentation strings (+__doc__+) are present in
|
||||
llvm-py. You can use the +help()+ of the interactive Python
|
||||
interpreter or the +object?+ of http://ipython.scipy.org/moin/[IPython]
|
||||
to get online help. (Note: not complete yet!)
|
||||
|
||||
|
||||
Module (llvm.core)
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Modules are top-level container objects. You need to create a module
|
||||
object first, before you can add global variables, aliases or functions.
|
||||
Modules are created using the static method +Module.new+:
|
||||
|
||||
[python]
|
||||
source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
#!/usr/bin/env python
|
||||
|
||||
from llvm import *
|
||||
from llvm.core import *
|
||||
|
||||
# create a module
|
||||
my_module = Module.new('my_module')
|
||||
source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The constructor of the Module class should *not* be used to instantiate
|
||||
a Module object. This is a common feature for all llvm-py classes.
|
||||
|
||||
[TIP]
|
||||
.Convention
|
||||
=======================================================================
|
||||
*All* llvm-py objects are instantiated using static methods of
|
||||
corresponding classes. Constructors _should not_ be used.
|
||||
=======================================================================
|
||||
|
||||
The argument 'my_module' is a module identifier (a plain string).
|
||||
|
||||
|
||||
Types (llvm.core)
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
Types are what you think they are. A instance of +llvm.core.Type+, or
|
||||
one of its derived classes, represent a type. llvm-py does not use as
|
||||
many classes to represent types as does LLVM itself. Some types are
|
||||
represented using +llvm.core.Type+ itself and the rest are represented
|
||||
using derived classes of +llvm.core.Type+. As usual, an instance is created
|
||||
via one of the static methods of +Type+. These methods return an
|
||||
instance of either +llvm.core.Type+ itself or one of its derived
|
||||
classes.
|
||||
|
||||
The following table lists all the available types along with the static
|
||||
method which has to be used to construct it and the name of the class whose
|
||||
object is actually returned by the static method.
|
||||
|
||||
[frame="all",grid="all"]
|
||||
`50`30`20~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Name,Constructor Method,Class
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
integer of bitwidth _n_, +Type.int(n)+, +IntegerType+
|
||||
32-bit float, +Type.float()+, +Type+
|
||||
64-bit double, +Type.double()+, +Type+
|
||||
80-bit float, +Type.x86_fp80()+, +Type+
|
||||
128-bit float (112-bit mantissa), +Type.fp128()+, +Type+
|
||||
128-bit float (two 64-bits), +Type.ppc_fp128()+, +Type+
|
||||
function, "+Type.function(r, p, v)+", +FunctionType+
|
||||
unpacked struct, +Type.struct(eltys)+, +StructType+
|
||||
packed struct, +Type.packed_struct(eltys)+, +StructType+
|
||||
array, "+Type.array(elty, count)+", +ArrayType+
|
||||
pointer to value of type _pty_, "+Type.pointer(pty, addrspc)+", +PointerType+
|
||||
vector, "+Type.vector(elty, count)+", +VectorType+
|
||||
void, +Type.void()+, +Type+
|
||||
label, +Type.label()+, +Type+
|
||||
opaque, +Type.opaque()+, +Type+
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
Values (llvm.core)
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
TODO
|
||||
|
||||
|
||||
Instructions (llvm.core)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
TODO
|
||||
|
||||
|
||||
Basic Block (llvm.core)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
TODO
|
||||
|
||||
|
||||
Builder (llvm.core)
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
TODO
|
||||
|
||||
|
||||
Module Provider (llvm.core)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
TODO
|
||||
|
||||
|
||||
Execution Engine (llvm.ee)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
TODO
|
||||
|
||||
|
||||
Target Data (llvm.ee)
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
TODO
|
||||
|
||||
|
||||
Pass Managers and Passes (llvm.passes)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
TODO
|
||||
|
||||
|
||||
Annotated Examples
|
||||
------------------
|
||||
|
||||
TODO
|
||||
|
||||
|
||||
About the llvm-py Project
|
||||
---------------------------
|
||||
|
||||
llvm-py lives at
|
||||
http://mdevan.nfshost.com/llvm-py/[http://mdevan.nfshost.com/llvm-py/].
|
||||
The code (subversion repository) and the issue tracker are hosted on google
|
||||
code, at
|
||||
http://code.google.com/p/llvm-py/[http://code.google.com/p/llvm-py/].
|
||||
llvm-py is distributed under the new BSD license, the full license
|
||||
text is in the file named
|
||||
http://code.google.com/p/llvm-py/source/browse/trunk/LICENSE[LICENSE]
|
||||
available in the source distribution.
|
||||
|
||||
The entire llvm-py website is generated from marked up text files
|
||||
using the tool http://www.methods.co.nz/asciidoc/[AsciiDoc]. These text
|
||||
files and the generated HTML pages are available in the source
|
||||
distribution.
|
||||
|
||||
llvm-py is an ongoing, live project. Your contributions in any form
|
||||
are most welcome. You can checkout the latest SVN HEAD from
|
||||
http://code.google.com/p/llvm-py/source/checkout[here].
|
||||
|
||||
Mahadevan R wrote llvm-py and works on it in his spare time. He can be
|
||||
reached at _mdevan.foobar@gmail.com_.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue