Added test/example for passes. Updated documentation.
git-svn-id: http://llvm-py.googlecode.com/svn/trunk@36 8d1e9007-1d4e-0410-b67e-1979fd6579aa
This commit is contained in:
parent
c10b1b58c3
commit
8eb5532b3a
13 changed files with 335 additions and 175 deletions
|
|
@ -1,5 +1,7 @@
|
||||||
0.3, in progress:
|
0.3, 8-Sep-2008:
|
||||||
|
|
||||||
|
* Passes added.
|
||||||
|
* Assembly support: create modules from .ll files.
|
||||||
* Various bug fixes.
|
* Various bug fixes.
|
||||||
* Bitcode support: convert modules to bitcode and vice versa.
|
* Bitcode support: convert modules to bitcode and vice versa.
|
||||||
* Intrinsics added.
|
* Intrinsics added.
|
||||||
|
|
|
||||||
78
test/passes.py
Normal file
78
test/passes.py
Normal file
|
|
@ -0,0 +1,78 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from llvm.core import *
|
||||||
|
from llvm.passes import *
|
||||||
|
from llvm.ee import *
|
||||||
|
|
||||||
|
# A helper class.
|
||||||
|
class strstream(object):
|
||||||
|
def __init__(self, s):
|
||||||
|
self.s = s
|
||||||
|
def read(self):
|
||||||
|
return self.s
|
||||||
|
|
||||||
|
# Create a module.
|
||||||
|
asm = """
|
||||||
|
|
||||||
|
define i32 @test() nounwind {
|
||||||
|
ret i32 42
|
||||||
|
}
|
||||||
|
|
||||||
|
define i32 @test1() nounwind {
|
||||||
|
entry:
|
||||||
|
%tmp = alloca i32
|
||||||
|
store i32 42, i32* %tmp, align 4
|
||||||
|
%tmp1 = load i32* %tmp, align 4
|
||||||
|
%tmp2 = call i32 @test()
|
||||||
|
%tmp3 = load i32* %tmp, align 4
|
||||||
|
%tmp4 = load i32* %tmp, align 4
|
||||||
|
ret i32 %tmp1
|
||||||
|
}
|
||||||
|
|
||||||
|
define i32 @test2() nounwind {
|
||||||
|
entry:
|
||||||
|
%tmp = call i32 @test()
|
||||||
|
ret i32 %tmp
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
m = Module.from_assembly(strstream(asm))
|
||||||
|
mp = ModuleProvider.new(m)
|
||||||
|
print "-"*72
|
||||||
|
print m
|
||||||
|
|
||||||
|
# Let's run a module-level inlining pass. First, create a pass manager.
|
||||||
|
pm = PassManager.new()
|
||||||
|
|
||||||
|
# Add the target data as the first "pass". This is mandatory.
|
||||||
|
pm.add( TargetData.new('') )
|
||||||
|
|
||||||
|
# Add the inlining pass.
|
||||||
|
pm.add( PASS_FUNCTION_INLINING )
|
||||||
|
|
||||||
|
# Run it!
|
||||||
|
pm.run(m)
|
||||||
|
|
||||||
|
# Done with the pass manager.
|
||||||
|
del pm
|
||||||
|
|
||||||
|
# Print the result. Note the change in @test2.
|
||||||
|
print "-"*72
|
||||||
|
print m
|
||||||
|
|
||||||
|
|
||||||
|
# Let's run a DCE pass on the the function 'test1' now. First create a
|
||||||
|
# function pass manager.
|
||||||
|
fpm = FunctionPassManager.new(mp)
|
||||||
|
|
||||||
|
# Add the target data as first "pass". This is mandatory.
|
||||||
|
fpm.add( TargetData.new('') )
|
||||||
|
|
||||||
|
# Add a DCE pass
|
||||||
|
fpm.add( PASS_AGGRESSIVE_DCE )
|
||||||
|
|
||||||
|
# Run the pass on the function 'test1'
|
||||||
|
fpm.run( m.get_function_named('test1') )
|
||||||
|
|
||||||
|
# Print the result. Note the change in @test1.
|
||||||
|
print "-"*72
|
||||||
|
print m
|
||||||
|
|
@ -1,23 +1,27 @@
|
||||||
Contribute
|
Contribute
|
||||||
==========
|
==========
|
||||||
|
|
||||||
llvm-py is just hatching. It needs your patches and suggestions to
|
You can make a difference, just by:
|
||||||
grow up. Please contribute! All patches are welcome. Here are some links
|
|
||||||
to start hacking away:
|
|
||||||
|
|
||||||
`25`75~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
- getting llvm-py to work on an as-yet-untested platform
|
||||||
Google code hosting, http://code.google.com/p/llvm-py/[http://code.google.com/p/llvm-py/]
|
- adding support for more LLVM features into llvm-py
|
||||||
Browse SVN, http://code.google.com/p/llvm-py/source/browse/[http://code.google.com/p/llvm-py/source/browse]
|
- sending in patches for bugs you come across
|
||||||
Issues tracker, http://code.google.com/p/llvm-py/issues/list[http://code.google.com/p/llvm-py/issues/list]
|
- improving the test scripts and documentation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
- spreading the word
|
||||||
|
|
||||||
|
|
||||||
|
Useful links:
|
||||||
|
|
||||||
|
- 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 HEAD can be checked out like so:
|
||||||
|
|
||||||
----
|
----
|
||||||
$ svn checkout http://llvm-py.googlecode.com/svn/trunk/ llvm-py
|
$ svn co http://llvm-py.googlecode.com/svn/trunk/ llvm-py
|
||||||
----
|
----
|
||||||
|
|
||||||
Mahadevan R (mdevan.foobar@gmail.com) is available to answer your
|
Usual caveats apply: cutting edge, may be broken (but usually not),
|
||||||
queries.
|
update and merge before sending patches etc.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
Download
|
Download
|
||||||
========
|
========
|
||||||
|
|
||||||
The latest release is 0.2.1, released 18-Jun-2008 (link:#changelog[Changelog]
|
The latest release is 0.3, released 8-Sep-2008 (link:#changelog[Changelog]
|
||||||
below).
|
below).
|
||||||
|
|
||||||
Download it here:
|
Download it here:
|
||||||
|
|
@ -10,6 +10,7 @@ Download it here:
|
||||||
````~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
````~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Release,Date,Package,Mirror
|
Release,Date,Package,Mirror
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
0.3,8-Sep-2008,http://llvm-py.googlecode.com/files/llvm-py-0.3.tar.bz2[llvm-py-0.3.tar.bz2],link:llvm-py-0.3.tar.bz2[llvm-py-0.3.tar.bz2]
|
||||||
0.2.1,18-Jun-2008,http://llvm-py.googlecode.com/files/llvm-py-0.2.1.tar.bz2[llvm-py-0.2.1.tar.bz2],link:llvm-py-0.2.1.tar.bz2[llvm-py-0.2.1.tar.bz2]
|
0.2.1,18-Jun-2008,http://llvm-py.googlecode.com/files/llvm-py-0.2.1.tar.bz2[llvm-py-0.2.1.tar.bz2],link:llvm-py-0.2.1.tar.bz2[llvm-py-0.2.1.tar.bz2]
|
||||||
0.2,15-Jun-2008,http://llvm-py.googlecode.com/files/llvm-py-0.2.tar.bz2[llvm-py-0.2.tar.bz2],link:llvm-py-0.2.tar.bz2[llvm-py-0.2.tar.bz2]
|
0.2,15-Jun-2008,http://llvm-py.googlecode.com/files/llvm-py-0.2.tar.bz2[llvm-py-0.2.tar.bz2],link:llvm-py-0.2.tar.bz2[llvm-py-0.2.tar.bz2]
|
||||||
0.1,20-May-2008,http://llvm-py.googlecode.com/files/llvm-py-0.1.tar.bz2[llvm-py-0.1.tar.bz2],link:llvm-py-0.1.tar.bz2[llvm-py-0.1.tar.bz2]
|
0.1,20-May-2008,http://llvm-py.googlecode.com/files/llvm-py-0.1.tar.bz2[llvm-py-0.1.tar.bz2],link:llvm-py-0.1.tar.bz2[llvm-py-0.1.tar.bz2]
|
||||||
|
|
|
||||||
|
|
@ -9,18 +9,24 @@ and does not use / have dependencies on "glue utilities" like
|
||||||
Boost.Python, swig etc.
|
Boost.Python, swig etc.
|
||||||
|
|
||||||
llvm-py is just hatching. It should be stable enough to start hacking
|
llvm-py is just hatching. It should be stable enough to start hacking
|
||||||
away, though. Be sure to send in a patch (or shout at the author) if you
|
away, though. Be sure to send in a patch if you miss any specific LLVM
|
||||||
miss any specific LLVM API.
|
API.
|
||||||
|
|
||||||
_Availability_: llvm-py is available (as a source package) for LLVM 2.3
|
_Availability_: llvm-py is available (as a source package) for LLVM 2.3
|
||||||
and Python 2.5. It has been built and tested on Linux/i386, and has been
|
and Python 2.5. It has been built and tested on Linux (x86, amd64) and
|
||||||
reported to work with OpenBSD. It is expected to be usable on
|
is reported to work with OpenBSD. It is expected to be usable on
|
||||||
various unices, as well as with Python 2.4 and LLVM 2.3+svn, with
|
various unices, as well as with Python 2.4.
|
||||||
minimal changes, if any.
|
|
||||||
|
_LLVM 2.4_: Read link:userguide.html#llvm24[this] if you're using LLVM
|
||||||
|
2.4!
|
||||||
|
|
||||||
|
|
||||||
News
|
News
|
||||||
----
|
----
|
||||||
|
|
||||||
|
8-Sep-2008::
|
||||||
|
0.3 released. Passes, intrinsics, bitcode, assembly!
|
||||||
|
|
||||||
18-Jun-2008::
|
18-Jun-2008::
|
||||||
0.2.1 released. Builds cleanly with LLVM 2.3 and 2.3+svn.
|
0.2.1 released. Builds cleanly with LLVM 2.3 and 2.3+svn.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ other unices. Windows is not supported, for a variety of reasons.
|
||||||
|
|
||||||
.Versions
|
.Versions
|
||||||
llvm-py requires verion 2.3 of LLVM. It will not work with previous
|
llvm-py requires verion 2.3 of LLVM. It will not work with previous
|
||||||
versions.
|
versions. If you're using LLVM 2.4, see link:#llvm24[below].
|
||||||
|
|
||||||
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.
|
Python 2.4, with minimal changes, if any.
|
||||||
|
|
@ -106,8 +106,8 @@ If you have +llvm-config+ in your path, you can build and install
|
||||||
llvm-py this way:
|
llvm-py this way:
|
||||||
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
$ tar jxvf llvm-py-0.2.tar.bz2
|
$ tar jxvf llvm-py-0.3.tar.bz2
|
||||||
$ cd llvm-py-0.2
|
$ cd llvm-py-0.3
|
||||||
$ sudo python setup.py install
|
$ sudo python setup.py install
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
@ -115,8 +115,8 @@ If you need to tell the build script where +llvm-config+ is, do it this
|
||||||
way:
|
way:
|
||||||
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
$ tar jxvf llvm-py-0.2.tar.bz2
|
$ tar jxvf llvm-py-0.3.tar.bz2
|
||||||
$ cd llvm-py-0.2
|
$ cd llvm-py-0.3
|
||||||
$ sudo python setup.py install --llvm-config=/home/mdevan/llvm/Release/bin/llvm-config
|
$ sudo python setup.py install --llvm-config=/home/mdevan/llvm/Release/bin/llvm-config
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
@ -124,8 +124,8 @@ To build a debug version of llvm-py, that links against the debug
|
||||||
libraries of LLVM, use this:
|
libraries of LLVM, use this:
|
||||||
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
$ tar jxvf llvm-py-0.2.tar.bz2
|
$ tar jxvf llvm-py-0.3.tar.bz2
|
||||||
$ cd llvm-py-0.2
|
$ cd llvm-py-0.3
|
||||||
$ python setup.py build -g --llvm-config=/home/mdevan/llvm/Debug/bin/llvm-config
|
$ python setup.py build -g --llvm-config=/home/mdevan/llvm/Debug/bin/llvm-config
|
||||||
$ sudo python setup.py install --llvm-config=/home/mdevan/llvm/Debug/bin/llvm-config
|
$ sudo python setup.py install --llvm-config=/home/mdevan/llvm/Debug/bin/llvm-config
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
|
|
@ -139,6 +139,35 @@ Python Modules] and http://docs.python.org/dist/dist.html[Distributing
|
||||||
Python Modules] for more information on such scripts.
|
Python Modules] for more information on such scripts.
|
||||||
|
|
||||||
|
|
||||||
|
[[llvm24]]
|
||||||
|
LLVM 2.4
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
LLVM 2.4 is currently in progress. There are incompatible API changes
|
||||||
|
from LLVM 2.3. The latest release of llvm-py will _not_ compile against
|
||||||
|
it.
|
||||||
|
|
||||||
|
The llvm-py SVN has a branch called
|
||||||
|
http://code.google.com/p/llvm-py/source/browse/#svn/branches/llvm2.4[llvm2.4],
|
||||||
|
which attempts to track the changes happening in LLVM 2.4. There are
|
||||||
|
however, some caveats:
|
||||||
|
|
||||||
|
- There are no releases from this branch.
|
||||||
|
- When LLVM 2.4 is released, then these changes will be merged to main.
|
||||||
|
From then on llvm-py will support LLVM 2.4 and no longer LLVM 2.3.
|
||||||
|
- This branch is not religiously kept up-to-date with the changes
|
||||||
|
happening in LLVM SVN. Therefore, it may not work for you, but might
|
||||||
|
still be worth a try.
|
||||||
|
|
||||||
|
llvm-py can be checked out from this branch like this:
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
$ svn co http://llvm-py.googlecode.com/svn/branches/llvm2.4 llvm-py-2.4
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
The rest of the steps (build, install) remain the same as before.
|
||||||
|
|
||||||
|
|
||||||
[[uninstall]]
|
[[uninstall]]
|
||||||
Uninstall
|
Uninstall
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
@ -486,6 +515,22 @@ bcfile = file("test.bc", "w")
|
||||||
my_module.to_bitcode(bcfile)
|
my_module.to_bitcode(bcfile)
|
||||||
source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Modules can also be constructed from LLVM assembly files (`.ll` files).
|
||||||
|
The static method `from_assembly` can be used for this. Similar to the
|
||||||
|
`from_bitcode` method, this one also takes a file-like object as
|
||||||
|
argument:
|
||||||
|
|
||||||
|
[python]
|
||||||
|
source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# create a module from an assembly file
|
||||||
|
llfile = file("test.ll")
|
||||||
|
my_module = Module.from_assembly(llfile)
|
||||||
|
source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Modules can be converted into their assembly representation by
|
||||||
|
stringifying them (see below).
|
||||||
|
|
||||||
|
|
||||||
.llvm.core.Module
|
.llvm.core.Module
|
||||||
[caption=""]
|
[caption=""]
|
||||||
=======================================================================
|
=======================================================================
|
||||||
|
|
@ -496,6 +541,9 @@ source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
`from_bitcode(fileobj)`::
|
`from_bitcode(fileobj)`::
|
||||||
Create a new `Module` instance by deserializing the bitcode file
|
Create a new `Module` instance by deserializing the bitcode file
|
||||||
represented by the file-like object `fileobj`.
|
represented by the file-like object `fileobj`.
|
||||||
|
`from_assembly(fileobj)`::
|
||||||
|
Create a new `Module` instance by parsing the LLVM assembly file
|
||||||
|
represented by the file-like object `fileobj`.
|
||||||
|
|
||||||
.Properties
|
.Properties
|
||||||
`data_layout`::
|
`data_layout`::
|
||||||
|
|
@ -1467,7 +1515,7 @@ Value, Equivalent LLVM Assembly Keyword
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The corresponding
|
The corresponding
|
||||||
file:///home/mdevan/llvm-2.3/docs/LangRef.html#paramattrs[LLVM docs]
|
http://www.llvm.org/docs/LangRef.html#paramattrs[LLVM docs]
|
||||||
provide more information.
|
provide more information.
|
||||||
|
|
||||||
The alignment of any parameter can also be set via `set_argument(a)`
|
The alignment of any parameter can also be set via `set_argument(a)`
|
||||||
|
|
@ -1476,20 +1524,7 @@ where `a` is a power of 2.
|
||||||
Basic Block (llvm.core)
|
Basic Block (llvm.core)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The class `llvm.core.BasicBlock` represents a basic block of
|
TODO
|
||||||
instructions. Basic blocks are logically contained within functions, and
|
|
||||||
can be constructed only via `Function` objects. Use the
|
|
||||||
`Function.append_basic_block()` method for this:
|
|
||||||
|
|
||||||
[python]
|
|
||||||
source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
# create a function
|
|
||||||
func = module.add_function(functy, "fn")
|
|
||||||
# add a basic block, named 'entry', to the function
|
|
||||||
bblk = func.append_basic_block("entry")
|
|
||||||
source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The list of all
|
|
||||||
|
|
||||||
|
|
||||||
Builder (llvm.core)
|
Builder (llvm.core)
|
||||||
|
|
@ -1501,9 +1536,6 @@ TODO
|
||||||
Instructions (llvm.core)
|
Instructions (llvm.core)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The class `llvm.core.Instruction` represents an LLVM IR instruction.
|
|
||||||
Instruction objects can be created only via a builder.
|
|
||||||
|
|
||||||
TODO
|
TODO
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1522,13 +1554,13 @@ TODO
|
||||||
Execution Engine (llvm.ee)
|
Execution Engine (llvm.ee)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
TODO
|
TODO. For now, see `test/example-jit.py`.
|
||||||
|
|
||||||
|
|
||||||
Pass Managers and Passes (llvm.passes)
|
Pass Managers and Passes (llvm.passes)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
TODO
|
TODO. For now, see `test/passes.py`.
|
||||||
|
|
||||||
|
|
||||||
About the llvm-py Project
|
About the llvm-py Project
|
||||||
|
|
|
||||||
|
|
@ -33,16 +33,16 @@
|
||||||
</div>
|
</div>
|
||||||
<div id="preamble">
|
<div id="preamble">
|
||||||
<div class="sectionbody">
|
<div class="sectionbody">
|
||||||
<p>llvm-py is developed by Mahadevan R, in his spare time, without being
|
<p>llvm-py is developed by Mahadevan R, in his spare time. He can be
|
||||||
paid for it. He can be reached at mdevan.foobar@gmail.com, on the
|
reached at mdevan.foobar@gmail.com, on the llvm-dev mailing list and
|
||||||
llvm-dev mailing list and irc.oftc.net#llvm (mdevan).</p>
|
irc.oftc.net#llvm (mdevan).</p>
|
||||||
<p>Many thanks to the guys over at LLVM for all the nifty software.</p>
|
<p>Many thanks to the guys over at LLVM for all the nifty software.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div id="footer-text">
|
<div id="footer-text">
|
||||||
Web pages © Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
|
Web pages © Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
|
||||||
Last updated 31-Jul-2008.
|
Last updated 08-Sep-2008.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -33,98 +33,65 @@
|
||||||
</div>
|
</div>
|
||||||
<div id="preamble">
|
<div id="preamble">
|
||||||
<div class="sectionbody">
|
<div class="sectionbody">
|
||||||
<p>llvm-py is just hatching. It needs your patches and suggestions to
|
<p>You can make a difference, just by:</p>
|
||||||
grow up. Please contribute! All patches are welcome. Here are some links
|
<ul>
|
||||||
to start hacking away:</p>
|
<li>
|
||||||
<div class="tableblock">
|
<p>
|
||||||
<table rules="none"
|
getting llvm-py to work on an as-yet-untested platform
|
||||||
frame="hsides"
|
</p>
|
||||||
cellspacing="0" cellpadding="4">
|
</li>
|
||||||
<col width="600" />
|
<li>
|
||||||
<col width="200" />
|
<p>
|
||||||
<tbody valign="top">
|
adding support for more LLVM features into llvm-py
|
||||||
<tr>
|
</p>
|
||||||
<td align="left">
|
</li>
|
||||||
Google code hosting
|
<li>
|
||||||
</td>
|
<p>
|
||||||
<td align="left">
|
sending in patches for bugs you come across
|
||||||
<a href="http://code.google.com/p/llvm-py/">http://code.google.com/p/llvm-py/</a>
|
</p>
|
||||||
</td>
|
</li>
|
||||||
</tr>
|
<li>
|
||||||
<tr>
|
<p>
|
||||||
<td align="left">
|
improving the test scripts and documentation
|
||||||
Browse SVN
|
</p>
|
||||||
</td>
|
</li>
|
||||||
<td align="left">
|
<li>
|
||||||
<a href="http://code.google.com/p/llvm-py/source/browse/">http://code.google.com/p/llvm-py/source/browse</a>
|
<p>
|
||||||
</td>
|
spreading the word
|
||||||
</tr>
|
</p>
|
||||||
<tr>
|
</li>
|
||||||
<td align="left">
|
</ul>
|
||||||
Issues tracker
|
<p>Useful links:</p>
|
||||||
</td>
|
<ul>
|
||||||
<td align="left">
|
<li>
|
||||||
<a href="http://code.google.com/p/llvm-py/issues/list">http://code.google.com/p/llvm-py/issues/list</a>
|
<p>
|
||||||
</td>
|
Google code hosting: <a href="http://code.google.com/p/llvm-py/">http://code.google.com/p/llvm-py/</a>
|
||||||
</tr>
|
</p>
|
||||||
</tbody>
|
</li>
|
||||||
</table>
|
<li>
|
||||||
</div>
|
<p>
|
||||||
|
Browse SVN: <a href="http://code.google.com/p/llvm-py/source/browse/">http://code.google.com/p/llvm-py/source/browse</a>
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
Issues tracker: <a href="http://code.google.com/p/llvm-py/issues/list">http://code.google.com/p/llvm-py/issues/list</a>
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
<p>SVN HEAD can be checked out like so:</p>
|
<p>SVN HEAD can be checked out like so:</p>
|
||||||
<div class="listingblock">
|
<div class="listingblock">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<pre><tt>$ svn checkout http://llvm-py.googlecode.com/svn/trunk/ llvm-py</tt></pre>
|
<pre><tt>$ svn co http://llvm-py.googlecode.com/svn/trunk/ llvm-py</tt></pre>
|
||||||
</div></div>
|
</div></div>
|
||||||
<p>Mahadevan R (mdevan.foobar@gmail.com) is available to answer your
|
<p>Usual caveats apply: cutting edge, may be broken (but usually not),
|
||||||
queries.</p>
|
update and merge before sending patches etc.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<h2>Current Next Steps</h2>
|
|
||||||
<div class="sectionbody">
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<p>
|
|
||||||
Wrap GenericValue, function call args for execution engine.
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<p>
|
|
||||||
done.
|
|
||||||
</p>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<p>
|
|
||||||
Add APIs to read/write <tt>.bc</tt> and <tt>.ll</tt> files.
|
|
||||||
</p>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<p>
|
|
||||||
Wrap <tt>lto</tt>.
|
|
||||||
</p>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<p>
|
|
||||||
Add examples.
|
|
||||||
</p>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<p>
|
|
||||||
Update documentation.
|
|
||||||
</p>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<p>
|
|
||||||
Improve tests.
|
|
||||||
</p>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div id="footer-text">
|
<div id="footer-text">
|
||||||
Web pages © Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
|
Web pages © Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
|
||||||
Last updated 31-Jul-2008.
|
Last updated 08-Sep-2008.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div id="preamble">
|
<div id="preamble">
|
||||||
<div class="sectionbody">
|
<div class="sectionbody">
|
||||||
<p>The latest release is 0.2.1, released 18-Jun-2008 (<a href="#changelog">Changelog</a>
|
<p>The latest release is 0.3, released 8-Sep-2008 (<a href="#changelog">Changelog</a>
|
||||||
below).</p>
|
below).</p>
|
||||||
<p>Download it here:</p>
|
<p>Download it here:</p>
|
||||||
<div class="tableblock">
|
<div class="tableblock">
|
||||||
|
|
@ -61,6 +61,20 @@ cellspacing="0" cellpadding="4">
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
|
<tr>
|
||||||
|
<td align="left">
|
||||||
|
0.3
|
||||||
|
</td>
|
||||||
|
<td align="left">
|
||||||
|
8-Sep-2008
|
||||||
|
</td>
|
||||||
|
<td align="left">
|
||||||
|
<a href="http://llvm-py.googlecode.com/files/llvm-py-0.3.tar.bz2">llvm-py-0.3.tar.bz2</a>
|
||||||
|
</td>
|
||||||
|
<td align="left">
|
||||||
|
<a href="llvm-py-0.3.tar.bz2">llvm-py-0.3.tar.bz2</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left">
|
<td align="left">
|
||||||
0.2.1
|
0.2.1
|
||||||
|
|
@ -119,8 +133,12 @@ package.</p>
|
||||||
<div class="sectionbody">
|
<div class="sectionbody">
|
||||||
<div class="listingblock">
|
<div class="listingblock">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<pre><tt>0.3, in progress:
|
<pre><tt>0.3, 8-Sep-2008:
|
||||||
|
|
||||||
|
* Passes added.
|
||||||
|
* Assembly support: create modules from .ll files.
|
||||||
|
* Various bug fixes.
|
||||||
|
* Bitcode support: convert modules to bitcode and vice versa.
|
||||||
* Intrinsics added.
|
* Intrinsics added.
|
||||||
* JIT Tutorials ported (Sebastien Binet).
|
* JIT Tutorials ported (Sebastien Binet).
|
||||||
* GenericValue added. Used by ExecutionEngine.run().
|
* GenericValue added. Used by ExecutionEngine.run().
|
||||||
|
|
@ -158,7 +176,7 @@ package.</p>
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div id="footer-text">
|
<div id="footer-text">
|
||||||
Web pages © Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
|
Web pages © Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
|
||||||
Last updated 31-Jul-2008.
|
Last updated 08-Sep-2008.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -228,7 +228,7 @@ Conclusion and other useful LLVM tidbits (TODO)
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div id="footer-text">
|
<div id="footer-text">
|
||||||
Web pages © Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
|
Web pages © Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
|
||||||
Last updated 31-Jul-2008.
|
Last updated 08-Sep-2008.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -40,19 +40,28 @@ Python and C modules that wrap over the native C++/C bindings of LLVM,
|
||||||
and does not use / have dependencies on "glue utilities" like
|
and does not use / have dependencies on "glue utilities" like
|
||||||
Boost.Python, swig etc.</p>
|
Boost.Python, swig etc.</p>
|
||||||
<p>llvm-py is just hatching. It should be stable enough to start hacking
|
<p>llvm-py is just hatching. It should be stable enough to start hacking
|
||||||
away, though. Be sure to send in a patch (or shout at the author) if you
|
away, though. Be sure to send in a patch if you miss any specific LLVM
|
||||||
miss any specific LLVM API.</p>
|
API.</p>
|
||||||
<p><em>Availability</em>: llvm-py is available (as a source package) for LLVM 2.3
|
<p><em>Availability</em>: llvm-py is available (as a source package) for LLVM 2.3
|
||||||
and Python 2.5. It has been built and tested on Linux/i386, and has been
|
and Python 2.5. It has been built and tested on Linux (x86, amd64) and
|
||||||
reported to work with OpenBSD. It is expected to be usable on
|
is reported to work with OpenBSD. It is expected to be usable on
|
||||||
various unices, as well as with Python 2.4 and LLVM 2.3+svn, with
|
various unices, as well as with Python 2.4.</p>
|
||||||
minimal changes, if any.</p>
|
<p><em>LLVM 2.4</em>: Read <a href="userguide.html#llvm24">this</a> if you're using LLVM
|
||||||
|
2.4!</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<h2>News</h2>
|
<h2>News</h2>
|
||||||
<div class="sectionbody">
|
<div class="sectionbody">
|
||||||
<dl>
|
<dl>
|
||||||
<dt>
|
<dt>
|
||||||
|
8-Sep-2008
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<p>
|
||||||
|
0.3 released. Passes, intrinsics, bitcode, assembly!
|
||||||
|
</p>
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
18-Jun-2008
|
18-Jun-2008
|
||||||
</dt>
|
</dt>
|
||||||
<dd>
|
<dd>
|
||||||
|
|
@ -81,7 +90,7 @@ minimal changes, if any.</p>
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div id="footer-text">
|
<div id="footer-text">
|
||||||
Web pages © Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
|
Web pages © Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
|
||||||
Last updated 31-Jul-2008.
|
Last updated 08-Sep-2008.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</tt></pre>
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div id="footer-text">
|
<div id="footer-text">
|
||||||
Web pages © Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
|
Web pages © Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
|
||||||
Last updated 31-Jul-2008.
|
Last updated 08-Sep-2008.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ and OpenBSD (i386, amd64). However, it should be trivial to build it on
|
||||||
other unices. Windows is not supported, for a variety of reasons.</p>
|
other unices. Windows is not supported, for a variety of reasons.</p>
|
||||||
<div class="title">Versions</div>
|
<div class="title">Versions</div>
|
||||||
<p>llvm-py requires verion 2.3 of LLVM. It will not work with previous
|
<p>llvm-py requires verion 2.3 of LLVM. It will not work with previous
|
||||||
versions.</p>
|
versions. If you're using LLVM 2.4, see <a href="#llvm24">below</a>.</p>
|
||||||
<p>llvm-py has been built and tested with Python 2.5. It should work with
|
<p>llvm-py has been built and tested with Python 2.5. It should work with
|
||||||
Python 2.4, with minimal changes, if any.</p>
|
Python 2.4, with minimal changes, if any.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -140,32 +140,67 @@ installed, it is recommended to remove it first, as described
|
||||||
llvm-py this way:</p>
|
llvm-py this way:</p>
|
||||||
<div class="listingblock">
|
<div class="listingblock">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<pre><tt>$ tar jxvf llvm-py-0.2.tar.bz2
|
<pre><tt>$ tar jxvf llvm-py-0.3.tar.bz2
|
||||||
$ cd llvm-py-0.2
|
$ cd llvm-py-0.3
|
||||||
$ sudo python setup.py install</tt></pre>
|
$ sudo python setup.py install</tt></pre>
|
||||||
</div></div>
|
</div></div>
|
||||||
<p>If you need to tell the build script where <tt>llvm-config</tt> is, do it this
|
<p>If you need to tell the build script where <tt>llvm-config</tt> is, do it this
|
||||||
way:</p>
|
way:</p>
|
||||||
<div class="listingblock">
|
<div class="listingblock">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<pre><tt>$ tar jxvf llvm-py-0.2.tar.bz2
|
<pre><tt>$ tar jxvf llvm-py-0.3.tar.bz2
|
||||||
$ cd llvm-py-0.2
|
$ cd llvm-py-0.3
|
||||||
$ sudo python setup.py install --llvm-config=/home/mdevan/llvm/Release/bin/llvm-config</tt></pre>
|
$ sudo python setup.py install --llvm-config=/home/mdevan/llvm/Release/bin/llvm-config</tt></pre>
|
||||||
</div></div>
|
</div></div>
|
||||||
<p>To build a debug version of llvm-py, that links against the debug
|
<p>To build a debug version of llvm-py, that links against the debug
|
||||||
libraries of LLVM, use this:</p>
|
libraries of LLVM, use this:</p>
|
||||||
<div class="listingblock">
|
<div class="listingblock">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<pre><tt>$ tar jxvf llvm-py-0.2.tar.bz2
|
<pre><tt>$ tar jxvf llvm-py-0.3.tar.bz2
|
||||||
$ cd llvm-py-0.2
|
$ cd llvm-py-0.3
|
||||||
$ python setup.py build -g --llvm-config=/home/mdevan/llvm/Debug/bin/llvm-config
|
$ python setup.py build -g --llvm-config=/home/mdevan/llvm/Debug/bin/llvm-config
|
||||||
$ sudo python setup.py install --llvm-config=/home/mdevan/llvm/Debug/bin/llvm-config</tt></pre>
|
$ sudo python setup.py install --llvm-config=/home/mdevan/llvm/Debug/bin/llvm-config</tt></pre>
|
||||||
</div></div>
|
</div></div>
|
||||||
<p>Be warned that debug binaries will be huge (100MB+) !</p>
|
<p>Be warned that debug binaries will be huge (100MB+) ! They are required
|
||||||
|
only if you need to debug into LLVM also.</p>
|
||||||
<p><tt>setup.py</tt> is a standard Python distutils script. See the Python
|
<p><tt>setup.py</tt> is a standard Python distutils script. See the Python
|
||||||
documentation regarding <a href="http://docs.python.org/inst/inst.html">Installing
|
documentation regarding <a href="http://docs.python.org/inst/inst.html">Installing
|
||||||
Python Modules</a> and <a href="http://docs.python.org/dist/dist.html">Distributing
|
Python Modules</a> and <a href="http://docs.python.org/dist/dist.html">Distributing
|
||||||
Python Modules</a> for more information on such scripts.</p>
|
Python Modules</a> for more information on such scripts.</p>
|
||||||
|
<h3><a id="llvm24"></a>LLVM 2.4</h3>
|
||||||
|
<p>LLVM 2.4 is currently in progress. There are incompatible API changes
|
||||||
|
from LLVM 2.3. The latest release of llvm-py will <em>not</em> compile against
|
||||||
|
it.</p>
|
||||||
|
<p>The llvm-py SVN has a branch called
|
||||||
|
<a href="http://code.google.com/p/llvm-py/source/browse/#svn/branches/llvm2.4">llvm2.4</a>,
|
||||||
|
which attempts to track the changes happening in LLVM 2.4. There are
|
||||||
|
however, some caveats:</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
There are no releases from this branch.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
When LLVM 2.4 is released, then these changes will be merged to main.
|
||||||
|
From then on llvm-py will support LLVM 2.4 and no longer LLVM 2.3.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
This branch is not religiously kept up-to-date with the changes
|
||||||
|
happening in LLVM SVN. Therefore, it may not work for you, but might
|
||||||
|
still be worth a try.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p>llvm-py can be checked out from this branch like this:</p>
|
||||||
|
<div class="listingblock">
|
||||||
|
<div class="content">
|
||||||
|
<pre><tt>$ svn co http://llvm-py.googlecode.com/svn/branches/llvm2.4 llvm-py-2.4</tt></pre>
|
||||||
|
</div></div>
|
||||||
|
<p>The rest of the steps (build, install) remain the same as before.</p>
|
||||||
<h3><a id="uninstall"></a>Uninstall</h3>
|
<h3><a id="uninstall"></a>Uninstall</h3>
|
||||||
<p>To get rid of llvm-py completely, if you wish to do so:</p>
|
<p>To get rid of llvm-py completely, if you wish to do so:</p>
|
||||||
<div class="listingblock">
|
<div class="listingblock">
|
||||||
|
|
@ -791,6 +826,21 @@ http://www.gnu.org/software/src-highlite -->
|
||||||
bcfile <span style="color: #990000">=</span> <span style="font-weight: bold"><span style="color: #000000">file</span></span><span style="color: #990000">(</span><span style="color: #FF0000">"test.bc"</span><span style="color: #990000">,</span> <span style="color: #FF0000">"w"</span><span style="color: #990000">)</span>
|
bcfile <span style="color: #990000">=</span> <span style="font-weight: bold"><span style="color: #000000">file</span></span><span style="color: #990000">(</span><span style="color: #FF0000">"test.bc"</span><span style="color: #990000">,</span> <span style="color: #FF0000">"w"</span><span style="color: #990000">)</span>
|
||||||
my<span style="color: #009900">_</span>module<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">to_bitcode</span></span><span style="color: #990000">(</span>bcfile<span style="color: #990000">)</span>
|
my<span style="color: #009900">_</span>module<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">to_bitcode</span></span><span style="color: #990000">(</span>bcfile<span style="color: #990000">)</span>
|
||||||
</tt></pre></div></div>
|
</tt></pre></div></div>
|
||||||
|
<p>Modules can also be constructed from LLVM assembly files (<tt>.ll</tt> files).
|
||||||
|
The static method <tt>from_assembly</tt> can be used for this. Similar to the
|
||||||
|
<tt>from_bitcode</tt> method, this one also takes a file-like object as
|
||||||
|
argument:</p>
|
||||||
|
<div class="listingblock">
|
||||||
|
<div class="content"><!-- Generator: GNU source-highlight 2.4
|
||||||
|
by Lorenzo Bettini
|
||||||
|
http://www.lorenzobettini.it
|
||||||
|
http://www.gnu.org/software/src-highlite -->
|
||||||
|
<pre><tt><span style="font-style: italic"><span style="color: #9A1900"># create a module from an assembly file</span></span>
|
||||||
|
llfile <span style="color: #990000">=</span> <span style="font-weight: bold"><span style="color: #000000">file</span></span><span style="color: #990000">(</span><span style="color: #FF0000">"test.ll"</span><span style="color: #990000">)</span>
|
||||||
|
my<span style="color: #009900">_</span>module <span style="color: #990000">=</span> <span style="color: #009900">Module</span><span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">from_assembly</span></span><span style="color: #990000">(</span>llfile<span style="color: #990000">)</span>
|
||||||
|
</tt></pre></div></div>
|
||||||
|
<p>Modules can be converted into their assembly representation by
|
||||||
|
stringifying them (see below).</p>
|
||||||
<div class="exampleblock">
|
<div class="exampleblock">
|
||||||
<div class="title">llvm.core.Module</div>
|
<div class="title">llvm.core.Module</div>
|
||||||
<div class="exampleblock-content">
|
<div class="exampleblock-content">
|
||||||
|
|
@ -813,6 +863,15 @@ my<span style="color: #009900">_</span>module<span style="color: #990000">.</spa
|
||||||
represented by the file-like object <tt>fileobj</tt>.
|
represented by the file-like object <tt>fileobj</tt>.
|
||||||
</p>
|
</p>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt>
|
||||||
|
<tt>from_assembly(fileobj)</tt>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<p>
|
||||||
|
Create a new <tt>Module</tt> instance by parsing the LLVM assembly file
|
||||||
|
represented by the file-like object <tt>fileobj</tt>.
|
||||||
|
</p>
|
||||||
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div class="title">Properties</div><dl>
|
<div class="title">Properties</div><dl>
|
||||||
<dt>
|
<dt>
|
||||||
|
|
@ -3401,40 +3460,24 @@ cellspacing="0" cellpadding="4">
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<p>The corresponding
|
<p>The corresponding
|
||||||
<a href="file:///home/mdevan/llvm-2.3/docs/LangRef.html#paramattrs">LLVM docs</a>
|
<a href="http://www.llvm.org/docs/LangRef.html#paramattrs">LLVM docs</a>
|
||||||
provide more information.</p>
|
provide more information.</p>
|
||||||
<p>The alignment of any parameter can also be set via <tt>set_argument(a)</tt>
|
<p>The alignment of any parameter can also be set via <tt>set_argument(a)</tt>
|
||||||
where <tt>a</tt> is a power of 2.</p>
|
where <tt>a</tt> is a power of 2.</p>
|
||||||
<h3>Basic Block (llvm.core)</h3>
|
<h3>Basic Block (llvm.core)</h3>
|
||||||
<p>The class <tt>llvm.core.BasicBlock</tt> represents a basic block of
|
<p>TODO</p>
|
||||||
instructions. Basic blocks are logically contained within functions, and
|
|
||||||
can be constructed only via <tt>Function</tt> objects. Use the
|
|
||||||
<tt>Function.append_basic_block()</tt> method for this:</p>
|
|
||||||
<div class="listingblock">
|
|
||||||
<div class="content"><!-- Generator: GNU source-highlight 2.4
|
|
||||||
by Lorenzo Bettini
|
|
||||||
http://www.lorenzobettini.it
|
|
||||||
http://www.gnu.org/software/src-highlite -->
|
|
||||||
<pre><tt><span style="font-style: italic"><span style="color: #9A1900"># create a function</span></span>
|
|
||||||
func <span style="color: #990000">=</span> module<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">add_function</span></span><span style="color: #990000">(</span>functy<span style="color: #990000">,</span> <span style="color: #FF0000">"fn"</span><span style="color: #990000">)</span>
|
|
||||||
<span style="font-style: italic"><span style="color: #9A1900"># add a basic block, named 'entry', to the function</span></span>
|
|
||||||
bblk <span style="color: #990000">=</span> func<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">append_basic_block</span></span><span style="color: #990000">(</span><span style="color: #FF0000">"entry"</span><span style="color: #990000">)</span>
|
|
||||||
</tt></pre></div></div>
|
|
||||||
<p>The list of all</p>
|
|
||||||
<h3>Builder (llvm.core)</h3>
|
<h3>Builder (llvm.core)</h3>
|
||||||
<p>TODO</p>
|
<p>TODO</p>
|
||||||
<h3>Instructions (llvm.core)</h3>
|
<h3>Instructions (llvm.core)</h3>
|
||||||
<p>The class <tt>llvm.core.Instruction</tt> represents an LLVM IR instruction.
|
|
||||||
Instruction objects can be created only via a builder.</p>
|
|
||||||
<p>TODO</p>
|
<p>TODO</p>
|
||||||
<h3>Module Provider (llvm.core)</h3>
|
<h3>Module Provider (llvm.core)</h3>
|
||||||
<p>TODO</p>
|
<p>TODO</p>
|
||||||
<h3>Target Data (llvm.ee)</h3>
|
<h3>Target Data (llvm.ee)</h3>
|
||||||
<p>TODO</p>
|
<p>TODO</p>
|
||||||
<h3>Execution Engine (llvm.ee)</h3>
|
<h3>Execution Engine (llvm.ee)</h3>
|
||||||
<p>TODO</p>
|
<p>TODO. For now, see <tt>test/example-jit.py</tt>.</p>
|
||||||
<h3>Pass Managers and Passes (llvm.passes)</h3>
|
<h3>Pass Managers and Passes (llvm.passes)</h3>
|
||||||
<p>TODO</p>
|
<p>TODO. For now, see <tt>test/passes.py</tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<h2>About the llvm-py Project</h2>
|
<h2>About the llvm-py Project</h2>
|
||||||
<div class="sectionbody">
|
<div class="sectionbody">
|
||||||
|
|
@ -3460,7 +3503,7 @@ reached at <em>mdevan.foobar@gmail.com</em>.</p>
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div id="footer-text">
|
<div id="footer-text">
|
||||||
Web pages © Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
|
Web pages © Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
|
||||||
Last updated 15-Aug-2008.
|
Last updated 08-Sep-2008.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue