Updated documentation, partially.

git-svn-id: http://llvm-py.googlecode.com/svn/trunk@90 8d1e9007-1d4e-0410-b67e-1979fd6579aa
This commit is contained in:
mdevan.foobar 2010-08-31 07:31:34 +00:00
commit 1c04eb1c87
28 changed files with 551 additions and 522 deletions

View file

@ -2,7 +2,7 @@ About
=====
llvm-py is developed and maintained by Mahadevan R, with contributions from
many users all over the world. He can be reached at mdevan.foobar@gmail.com,
many users all over the world. He can be reached at mdevan@mdevan.org,
on the llvm-dev mailing list and (sometimes) as mdevan on irc.oftc.net#llvm.
Many thanks to the guys over at LLVM for all the nifty software, for all

View file

@ -1,12 +1,12 @@
Download
========
The latest release is 0.6, released 28-Oct-2009 (link:#changelog[Changelog]
below). 0.6 works only with LLVM 2.6.
The latest release is 0.6, released 31-Aug-2010 (link:#changelog[Changelog]
below). 0.6 works only with LLVM 2.7.
Download it here:
- http://llvm-py.googlecode.com/files/llvm-py-0.6.tar.bz2[llvm-py-0.6.tar.bz2] (primary)
- link:llvm-py-0.6.tar.bz2[llvm-py-0.6.tar.bz2] (mirror)
* http://llvm-py.googlecode.com/files/llvm-py-0.6.tar.bz2[llvm-py-0.6.tar.bz2] (primary)
* link:llvm-py-0.6.tar.bz2[llvm-py-0.6.tar.bz2] (mirror)
Older versions are available http://llvm-py.googlecode.com/files/[here].

View file

@ -102,14 +102,9 @@ builder = Builder.new(bb)
tmp = builder.add(f_sum.args[0], f_sum.args[1], "tmp")
builder.ret(tmp)
# Create a module provider object first. Modules can come from
# in-memory IRs like what we created now, or from bitcode (.bc)
# files. The module provider abstracts this detail.
mp = ModuleProvider.new(my_module)
# Create an execution engine object. This will create a JIT compiler
# on platforms that support it, or an interpreter otherwise.
ee = ExecutionEngine.new(mp)
ee = ExecutionEngine.new(my_module)
# The arguments needs to be passed as "GenericValue" objects.
arg1 = GenericValue.int(ty_int, 100)

View file

@ -18,6 +18,6 @@ a patch.
News
----
28-Oct-2009::
SVN r83 works with LLVM 2.6. Website updated.
31-Aug-2010::
0.6 released, works with LLVM 2.7.

View file

@ -1,118 +0,0 @@
.LLVM Instruction Set
[frame="all",grid="all"]
`30`70~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Category, Instructions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Terminator instructions,\
"http://www.llvm.org/docs/LangRef.html#i_ret[ret], \
http://www.llvm.org/docs/LangRef.html#i_br[br], \
http://www.llvm.org/docs/LangRef.html#i_switch[switch], \
http://www.llvm.org/docs/LangRef.html#i_invoke[invoke], \
http://www.llvm.org/docs/LangRef.html#i_unwind[unwind], \
http://www.llvm.org/docs/LangRef.html#i_unreachable[unreachable]"
Binary operations,\
"http://www.llvm.org/docs/LangRef.html#i_add[add], \
http://www.llvm.org/docs/LangRef.html#i_sub[sub], \
http://www.llvm.org/docs/LangRef.html#i_mul[mul], \
http://www.llvm.org/docs/LangRef.html#i_udiv[udiv], \
http://www.llvm.org/docs/LangRef.html#i_sdiv[sdiv], \
http://www.llvm.org/docs/LangRef.html#i_fdiv[fdiv], \
http://www.llvm.org/docs/LangRef.html#i_urem[urem], \
http://www.llvm.org/docs/LangRef.html#i_srem[srem], \
http://www.llvm.org/docs/LangRef.html#i_frem[frem]"
Bitwise binary operations,\
"http://www.llvm.org/docs/LangRef.html#i_shl[shl], \
http://www.llvm.org/docs/LangRef.html#i_lshr[lshr], \
http://www.llvm.org/docs/LangRef.html#i_ashr[ashr], \
http://www.llvm.org/docs/LangRef.html#i_and[and], \
http://www.llvm.org/docs/LangRef.html#i_or[or], \
http://www.llvm.org/docs/LangRef.html#i_xor[xor]"
Vector operations,\
"http://www.llvm.org/docs/LangRef.html#i_extractelement[extractelement], \
http://www.llvm.org/docs/LangRef.html#i_insertelement[insertelement], \
http://www.llvm.org/docs/LangRef.html#i_shufflevector[shufflevector]"
Aggregate operations,\
"http://www.llvm.org/docs/LangRef.html#i_extractvalue[extractvalue], \
http://www.llvm.org/docs/LangRef.html#i_insertvalue[insertvalue]"
Memory access and addressing operations,\
"http://www.llvm.org/docs/LangRef.html#i_malloc[malloc], \
http://www.llvm.org/docs/LangRef.html#i_free[free], \
http://www.llvm.org/docs/LangRef.html#i_alloca[alloca], \
http://www.llvm.org/docs/LangRef.html#i_load[load], \
http://www.llvm.org/docs/LangRef.html#i_store[store], \
http://www.llvm.org/docs/LangRef.html#i_getelementptr[getelementptr]"
Conversion operations,\
"http://www.llvm.org/docs/LangRef.html#i_trunc[trunc], \
http://www.llvm.org/docs/LangRef.html#i_zext[zext], \
http://www.llvm.org/docs/LangRef.html#i_sext[sext], \
http://www.llvm.org/docs/LangRef.html#i_fptrunc[fptrunc], \
http://www.llvm.org/docs/LangRef.html#i_fpext[fpext], \
http://www.llvm.org/docs/LangRef.html#i_fptoui[fptoui], \
http://www.llvm.org/docs/LangRef.html#i_fptosi[fptosi], \
http://www.llvm.org/docs/LangRef.html#i_uitofp[uitofp], \
http://www.llvm.org/docs/LangRef.html#i_sitofp[sitofp], \
http://www.llvm.org/docs/LangRef.html#i_ptrtoint[ptrtoint], \
http://www.llvm.org/docs/LangRef.html#i_inttoptr[inttoptr], \
http://www.llvm.org/docs/LangRef.html#i_bitcast[bitcast]"
Other operations,\
"http://www.llvm.org/docs/LangRef.html#i_icmp[icmp], \
http://www.llvm.org/docs/LangRef.html#i_fcmp[fcmp], \
http://www.llvm.org/docs/LangRef.html#i_vicmp[vicmp], \
http://www.llvm.org/docs/LangRef.html#i_vfcmp[vfcmp], \
http://www.llvm.org/docs/LangRef.html#i_phi[phi], \
http://www.llvm.org/docs/LangRef.html#i_select[select], \
http://www.llvm.org/docs/LangRef.html#i_call[call], \
http://www.llvm.org/docs/LangRef.html#i_va_arg[va_arg], \
http://www.llvm.org/docs/LangRef.html#i_getresult[getresult]"
Variable argument handling intrinsics,\
"http://www.llvm.org/docs/LangRef.html#int_va_start[llvm.va_start], \
http://www.llvm.org/docs/LangRef.html#int_va_end[llvm.va_end], \
http://www.llvm.org/docs/LangRef.html#int_va_copy[llvm.va_copy]"
Accurate garbage collection intrinsics,\
"http://www.llvm.org/docs/LangRef.html#int_returnaddress[llvm.returnaddress], \
http://www.llvm.org/docs/LangRef.html#int_frameaddress[llvm.frameaddress], \
http://www.llvm.org/docs/LangRef.html#int_stacksave[llvm.stacksave], \
http://www.llvm.org/docs/LangRef.html#int_stackrestore[llvm.stackrestore], \
http://www.llvm.org/docs/LangRef.html#int_prefetch[llvm.prefetch], \
http://www.llvm.org/docs/LangRef.html#int_pcmarker[llvm.pcmarker], \
http://www.llvm.org/docs/LangRef.html#int_readcyclecounter[llvm.readcyclecounter]"
Standard C library intrinsics,\
"http://www.llvm.org/docs/LangRef.html#int_memcpy[llvm.memcpy.\*], \
http://www.llvm.org/docs/LangRef.html#int_memmove[llvm.memmove.\*], \
http://www.llvm.org/docs/LangRef.html#int_memset[llvm.memset.\*], \
http://www.llvm.org/docs/LangRef.html#int_sqrt[llvm.sqrt.\*], \
http://www.llvm.org/docs/LangRef.html#int_powi[llvm.powi.\*], \
http://www.llvm.org/docs/LangRef.html#int_sin[llvm.sin.\*], \
http://www.llvm.org/docs/LangRef.html#int_cos[llvm.cos.\*], \
http://www.llvm.org/docs/LangRef.html#int_pow[llvm.pow.\*]"
Bit manipulation intrinsics,\
"http://www.llvm.org/docs/LangRef.html#int_bswap[llvm.bswap.\*], \
http://www.llvm.org/docs/LangRef.html#int_ctpop[llvm.ctpop.\*], \
http://www.llvm.org/docs/LangRef.html#int_ctlz[llvm.ctlz.\*], \
http://www.llvm.org/docs/LangRef.html#int_cttz[llvm.cttz.\*], \
http://www.llvm.org/docs/LangRef.html#int_part_select[llvm.part.select.\*], \
http://www.llvm.org/docs/LangRef.html#int_part_set[llvm.part.set.\*]"
Debugger intrinsics,\
"http://www.llvm.org/docs/SourceLevelDebugging.html#format_common_stoppoint[llvm.dbg.stoppoint], \
http://www.llvm.org/docs/SourceLevelDebugging.html#format_common_func_start[llvm.dbg.func.start], \
http://www.llvm.org/docs/SourceLevelDebugging.html#format_common_region_start[llvm.dbg.region.start], \
http://www.llvm.org/docs/SourceLevelDebugging.html#format_common_region_end[llvm.dbg.region.end], \
http://www.llvm.org/docs/SourceLevelDebugging.html#format_common_declare[llvm.dbg.declare]"
Exception handling intrinsics,\
"http://www.llvm.org/docs/ExceptionHandling.html#llvm_eh_exception[llvm.eh_exception], \
http://www.llvm.org/docs/ExceptionHandling.html#llvm_eh_selector[llvm.eh_selector], \
http://www.llvm.org/docs/ExceptionHandling.html#llvm_eh_typeid_for[llvm.eh_typeid_for]"
Trampoline intrinsics,\
"http://www.llvm.org/docs/LangRef.html#int_it[llvm.init.trampoline]"
Atomic intrinsics,\
"http://www.llvm.org/docs/LangRef.html#int_memory_barrier[llvm.memory.barrier], \
http://www.llvm.org/docs/LangRef.html#int_atomic_lcs[llvm.atomic.lcs], \
http://www.llvm.org/docs/LangRef.html#int_atomic_las[llvm.atomic.las], \
http://www.llvm.org/docs/LangRef.html#int_atomic_swap[llvm.atomic.swap]"
General intrinsics,\
"http://www.llvm.org/docs/LangRef.html#int_var_annotation[llvm.var.annotation], \
http://www.llvm.org/docs/LangRef.html#int_annotation[llvm.annotation.\*], \
http://www.llvm.org/docs/LangRef.html#int_trap[llvm.trap]"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

22
www/src/intrinsics.csv Normal file
View file

@ -0,0 +1,22 @@
`INTR_ANNOTATION`,`INTR_ATOMIC_CMP_SWAP`,`INTR_ATOMIC_LOAD_ADD`,`INTR_ATOMIC_LOAD_AND`
`INTR_ATOMIC_LOAD_MAX`,`INTR_ATOMIC_LOAD_MIN`,`INTR_ATOMIC_LOAD_NAND`,`INTR_ATOMIC_LOAD_OR`
`INTR_ATOMIC_LOAD_SUB`,`INTR_ATOMIC_LOAD_UMAX`,`INTR_ATOMIC_LOAD_UMIN`,`INTR_ATOMIC_LOAD_XOR`
`INTR_ATOMIC_SWAP`,`INTR_BSWAP`,`INTR_CONVERTFF`,`INTR_CONVERTFSI`
`INTR_CONVERTFUI`,`INTR_CONVERTSIF`,`INTR_CONVERTSS`,`INTR_CONVERTSU`
`INTR_CONVERTUIF`,`INTR_CONVERTUS`,`INTR_CONVERTUU`,`INTR_COS`
`INTR_CTLZ`,`INTR_CTPOP`,`INTR_CTTZ`,`INTR_DBG_DECLARE`
`INTR_DBG_VALUE`,`INTR_EH_DWARF_CFA`,`INTR_EH_EXCEPTION`,`INTR_EH_RETURN_I32`
`INTR_EH_RETURN_I64`,`INTR_EH_SELECTOR`,`INTR_EH_SJLJ_CALLSITE`,`INTR_EH_SJLJ_LONGJMP`
`INTR_EH_SJLJ_LSDA`,`INTR_EH_SJLJ_SETJMP`,`INTR_EH_TYPEID_FOR`,`INTR_EH_UNWIND_INIT`
`INTR_EXP`,`INTR_EXP2`,`INTR_FLT_ROUNDS`,`INTR_FRAMEADDRESS`
`INTR_GCREAD`,`INTR_GCROOT`,`INTR_GCWRITE`,`INTR_INIT_TRAMPOLINE`
`INTR_INVARIANT_END`,`INTR_INVARIANT_START`,`INTR_LIFETIME_END`,`INTR_LIFETIME_START`
`INTR_LOG`,`INTR_LOG10`,`INTR_LOG2`,`INTR_LONGJMP`
`INTR_MEMCPY`,`INTR_MEMMOVE`,`INTR_MEMORY_BARRIER`,`INTR_MEMSET`
`INTR_OBJECTSIZE`,`INTR_PCMARKER`,`INTR_POW`,`INTR_POWI`
`INTR_PREFETCH`,`INTR_PTR_ANNOTATION`,`INTR_READCYCLECOUNTER`,`INTR_RETURNADDRESS`
`INTR_SADD_WITH_OVERFLOW`,`INTR_SETJMP`,`INTR_SIGLONGJMP`,`INTR_SIGSETJMP`
`INTR_SIN`,`INTR_SMUL_WITH_OVERFLOW`,`INTR_SQRT`,`INTR_SSUB_WITH_OVERFLOW`
`INTR_STACKPROTECTOR`,`INTR_STACKRESTORE`,`INTR_STACKSAVE`,`INTR_TRAP`
`INTR_UADD_WITH_OVERFLOW`,`INTR_UMUL_WITH_OVERFLOW`,`INTR_USUB_WITH_OVERFLOW`,`INTR_VACOPY`
`INTR_VAEND`,`INTR_VAR_ANNOTATION`,`INTR_VASTART`
Can't render this file because it has a wrong number of fields in line 22.

View file

@ -38,7 +38,7 @@ flavours, *BSD, Mac OS X; on i386 and amd64 architectures. Windows is not
supported, for a variety of reasons.
.Versions
llvm-py 0.6 requires verion 2.6 of LLVM. It will not work with previous
llvm-py 0.6 requires verion 2.7 of LLVM. It will not work with previous
versions.
llvm-py has been built and tested with Python 2.6. It should work with
@ -112,7 +112,7 @@ llvm-py this way:
-----------------------------------------------------------------------
$ tar jxvf llvm-py-0.6.tar.bz2
$ cd llvm-py-0.6
$ sudo python setup.py install
$ python setup.py install --user
-----------------------------------------------------------------------
If you need to tell the build script where +llvm-config+ is, do it this
@ -121,7 +121,7 @@ way:
-----------------------------------------------------------------------
$ tar jxvf llvm-py-0.6.tar.bz2
$ cd llvm-py-0.6
$ sudo python setup.py install --llvm-config=/home/mdevan/llvm/Release/bin/llvm-config
$ python setup.py install --user --llvm-config=/home/mdevan/llvm/Release/bin/llvm-config
-----------------------------------------------------------------------
To build a debug version of llvm-py, that links against the debug
@ -131,7 +131,7 @@ libraries of LLVM, use this:
$ tar jxvf llvm-py-0.6.tar.bz2
$ cd llvm-py-0.6
$ 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
$ python setup.py install --user --llvm-config=/home/mdevan/llvm/Debug/bin/llvm-config
-----------------------------------------------------------------------
Be warned that debug binaries will be huge (100MB+) ! They are required
@ -147,17 +147,21 @@ Python Modules] for more information on such scripts.
Uninstall
~~~~~~~~~
To get rid of llvm-py completely, if you wish to do so:
If you'd installed llvm-py with the `--user` option, then llvm-py
would be present under `~/.local/lib/python2.6/site-packages`.
Otherwise, it might be under `/usr/lib/python2.6/site-packages`
or `/usr/local/lib/python2.6/site-packages`. The directory would
vary with your Python version and OS flavour. Look around.
Once you've located the site-packages directory, the modules and
the "egg" can be removed like so:
----
# rm -rf /usr/lib/python2.6/site-packages/llvm
# rm -f /usr/lib/python2.6/site-packages/llvm_py-0.6-py2.6.egg-info
$ rm -rf <site-packages>/llvm <site-packages>/llvm_py-0.6-py2.6.egg-info
----
- You need to be root to do this.
- Python site package path might be different on your system.
- Note that there are version numbers (both Python's and llvm-py's)
which you might need to change to suit your system.
See the http://docs.python.org/install/index.html[Python
documentation] for more information.
The Concepts
@ -269,33 +273,33 @@ source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The corresponding LLVM assembly:
-----------------------------------------------------------------------
; ModuleID = '/tmp/webcompile/_22154_0.bc'
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
target triple = "i386-pc-linux-gnu"
; ModuleID = '/tmp/webcompile/_7149_0.bc'
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-linux-gnu"
define i32 @sum(i32 %n) nounwind readnone {
entry:
%0 = icmp eq i32 %n, 0 ; <i1> [#uses=1]
br i1 %0, label %bb2, label %bb1
%0 = icmp eq i32 %n, 0 ; <i1> [#uses=1]
br i1 %0, label %bb2, label %bb1
bb1: ; preds = %entry
%1 = add i32 %n, -1 ; <i32> [#uses=2]
%2 = icmp eq i32 %1, 0 ; <i1> [#uses=1]
br i1 %2, label %sum.exit, label %bb1.i
bb1: ; preds = %entry
%1 = add i32 %n, -1 ; <i32> [#uses=2]
%2 = icmp eq i32 %1, 0 ; <i1> [#uses=1]
br i1 %2, label %sum.exit, label %bb1.i
bb1.i: ; preds = %bb1
%3 = add i32 %n, -2 ; <i32> [#uses=1]
%4 = tail call i32 @sum(i32 %3) nounwind ; <i32> [#uses=1]
%5 = add i32 %4, %1 ; <i32> [#uses=1]
br label %sum.exit
bb1.i: ; preds = %bb1
%3 = add i32 %n, -2 ; <i32> [#uses=1]
%4 = tail call i32 @sum(i32 %3) nounwind ; <i32> [#uses=1]
%5 = add i32 %4, %1 ; <i32> [#uses=1]
br label %sum.exit
sum.exit: ; preds = %bb1.i, %bb1
%6 = phi i32 [ %5, %bb1.i ], [ 0, %bb1 ] ; <i32> [#uses=1]
%7 = add i32 %6, %n ; <i32> [#uses=1]
ret i32 %7
sum.exit: ; preds = %bb1.i, %bb1
%6 = phi i32 [ %5, %bb1.i ], [ 0, %bb1 ] ; <i32> [#uses=1]
%7 = add i32 %6, %n ; <i32> [#uses=1]
ret i32 %7
bb2: ; preds = %entry
ret i32 0
bb2: ; preds = %entry
ret i32 0
}
-----------------------------------------------------------------------
@ -398,7 +402,7 @@ Here is a quick overview of the contents of each package:
manager
- constants +TYPE_*+ that represents various types
- constants +CC_*+ that represent calling conventions
- constants +IPRED_*+ and +RPRED_*+ that represent integer and real
- constants +ICMP_*+ and +FCMP_*+ that represent integer and real
comparison predicates (like less than, greater than etc.)
- constants +LINKAGE_*+ that represent linkage of symbols (external,
internal etc.)
@ -524,6 +528,9 @@ stringifying them (see below).
A string representing the ABI of the platform.
`target`::
A string like `i386-pc-linux-gnu` or `i386-pc-solaris2.8`.
`pointer_size` [read-only]::
The size in bits of pointers, of the target platform. A value of
zero represents `llvm::Module::AnyPointerSize`.
`global_variables` [read-only]::
An iterable that yields `GlobalVariable` objects, that represent
the global variables of the module.
@ -532,6 +539,8 @@ stringifying them (see below).
in the module.
.Methods
`get_type_named(name)`::
Return a `Type` object for the given alias name (typedef).
`add_type_name(name, ty)`::
Add an alias (typedef) for the type `ty` with the name `name`.
`delete_type_name(name)`::
@ -549,12 +558,20 @@ stringifying them (see below).
`get_function_named(name)`::
Get a `Function` object corresponding to the function with the name
`name`. Raises `LLVMException` if such a function does not exist.
`get_or_insert_function(ty, name)`::
Like `get_function_named`, but adds the function first, if not
present (like `add_function`).
`verify()`::
Verify the correctness of the module. Raises `LLVMException` on
errors.
`to_bitcode(fileobj)`::
Write the bitcode representation of the module to the file-like
object `fileobj`.
`link_in(other)`::
Link in another module `other` into this module. Global variables,
functions etc. are matched and resolved. The `other` module is no
longer valid and should not be used after this operation. This API
might be replaced with a full-fledged Linker class in the future.
.Special Methods
`__str__`::
@ -570,7 +587,7 @@ stringifying them (see below).
.Convention
=======================================================================
*All* llvm-py objects (where it makes sense), when stringified, return
the LLVM assembly representation. `` `print module_obj` '' for example,
the LLVM assembly representation. `print module_obj` for example,
prints the LLVM assembly form of the entire module.
Such objects, when compared for equality, internally compare these
@ -675,6 +692,7 @@ The class-level documentation follows:
+
[python]
source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Warning: do not rely on actual numerical values!
TYPE_VOID = 0
TYPE_FLOAT = 1
TYPE_DOUBLE = 2
@ -682,14 +700,15 @@ TYPE_X86_FP80 = 3
TYPE_FP128 = 4
TYPE_PPC_FP128 = 5
TYPE_LABEL = 6
TYPE_METADATA = 7
TYPE_INTEGER = 8
TYPE_FUNCTION = 9
TYPE_STRUCT = 10
TYPE_ARRAY = 11
TYPE_POINTER = 12
TYPE_OPAQUE = 13
TYPE_VECTOR = 14
TYPE_INTEGER = 7
TYPE_FUNCTION = 8
TYPE_STRUCT = 9
TYPE_ARRAY = 10
TYPE_POINTER = 11
TYPE_OPAQUE = 12
TYPE_VECTOR = 13
TYPE_METADATA = 14
TYPE_UNION = 15
source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
Example:
@ -811,7 +830,7 @@ source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
`address_space` [read-only]::
The address space of the pointer.
`pointee` [read-only]::
TODO *missing*
A `Type` object representing the type of the value pointed to.
=======================================================================
@ -896,7 +915,8 @@ which gives the output:
-----------------------------------------------------------------------
; ModuleID = 'mod1'
%struct.node = type { i32, %struct.node* }
%struct.node = type { i32, %struct.node* }
-----------------------------------------------------------------------
For more details on what is going on here, please refer the LLVM
@ -1049,8 +1069,8 @@ Method, Operation
`k.and_(k2)`, "Bitwise and of `k` and `k2`. Note trailing underscore."
`k.or_(k2)`, "Bitwise or of `k` and `k2`. Note trailing underscore."
`k.xor(k2)`, "Bitwise exclusive-or of `k` and `k2`."
"`k.icmp(ipred, k2)`", "Compare `k` with `k2` using the predicate `ipred`. See table link:#ipred[below] for list of predicates for integer operands."
"`k.fcmp(rpred, k2)`", "Compare `k` with `k2` using the predicate `rpred`. See table link:#rpred[below] for list of predicates for real operands."
"`k.icmp(icmp, k2)`", "Compare `k` with `k2` using the predicate `icmp`. See table link:#icmp[below] for list of predicates for integer operands."
"`k.fcmp(fcmp, k2)`", "Compare `k` with `k2` using the predicate `fcmp`. See table link:#fcmp[below] for list of predicates for real operands."
`k.shl(k2)`, "Shift `k` left by `k2` bits."
`k.lshr(k2)`, "Shift `k` logically right by `k2` bits (new bits are 0s)."
`k.ashr(k2)`, "Shift `k` arithmetically right by `k2` bits (new bits are same as previous sign bit)."
@ -1073,48 +1093,48 @@ Method, Operation
"`k.shuffle_vector(k2,mask)`", "Shuffle vector constant `k` based on vector constants `k2` and `mask`."
|======================================================================
[[ipred]]
[[icmp]]
Predicates for use with `icmp` instruction are listed below. All
of these are integer constants defined in the `llvm.core` module.
[frame="all",grid="all",format="csv",cols="2",options="header"]
|======================================================================
Value, Meaning
`IPRED_EQ`, Equality
`IPRED_NE`, Inequality
`IPRED_UGT`, Unsigned greater than
`IPRED_UGE`, Unsigned greater than or equal
`IPRED_ULT`, Unsigned less than
`IPRED_ULE`, Unsigned less than or equal
`IPRED_SGT`, Signed greater than
`IPRED_SGE`, Signed greater than or equal
`IPRED_SLT`, Signed less than
`IPRED_SLE`, Signed less than or equal
`ICMP_EQ`, Equality
`ICMP_NE`, Inequality
`ICMP_UGT`, Unsigned greater than
`ICMP_UGE`, Unsigned greater than or equal
`ICMP_ULT`, Unsigned less than
`ICMP_ULE`, Unsigned less than or equal
`ICMP_SGT`, Signed greater than
`ICMP_SGE`, Signed greater than or equal
`ICMP_SLT`, Signed less than
`ICMP_SLE`, Signed less than or equal
|======================================================================
[[rpred]]
[[fcmp]]
Predicates for use with `fcmp` instruction are listed below. All
of these are integer constants defined in the `llvm.core` module.
[frame="all",grid="all",format="csv",cols="2",options="header"]
|======================================================================
Value, Meaning
`RPRED_FALSE`, Always false
`RPRED_OEQ`, True if ordered and equal
`RPRED_OGT`, True if ordered and greater than
`RPRED_OGE`, True if ordered and greater than or equal
`RPRED_OLT`, True if ordered and less than
`RPRED_OLE`, True if ordered and less than or equal
`RPRED_ONE`, True if ordered and operands are unequal
`RPRED_ORD`, True if ordered (no NaNs)
`RPRED_UNO`, True if unordered: `isnan(X) | isnan(Y)`
`RPRED_UEQ`, True if unordered or equal
`RPRED_UGT`, True if unordered or greater than
`RPRED_UGE`, "True if unordered, greater than or equal"
`RPRED_ULT`, "True if unordered, or less than"
`RPRED_ULE`, "True if unordered, less than or equal"
`RPRED_UNE`, True if unordered or not equal
`RPRED_TRUE `, Always true
`FCMP_FALSE`, Always false
`FCMP_OEQ`, True if ordered and equal
`FCMP_OGT`, True if ordered and greater than
`FCMP_OGE`, True if ordered and greater than or equal
`FCMP_OLT`, True if ordered and less than
`FCMP_OLE`, True if ordered and less than or equal
`FCMP_ONE`, True if ordered and operands are unequal
`FCMP_ORD`, True if ordered (no NaNs)
`FCMP_UNO`, True if unordered: `isnan(X) | isnan(Y)`
`FCMP_UEQ`, True if unordered or equal
`FCMP_UGT`, True if unordered or greater than
`FCMP_UGE`, "True if unordered, greater than or equal"
`FCMP_ULT`, "True if unordered, or less than"
`FCMP_ULE`, "True if unordered, less than or equal"
`FCMP_UNE`, True if unordered or not equal
`FCMP_TRUE `, Always true
|======================================================================
.llvm.core.Constant
@ -1157,12 +1177,12 @@ Value, Equivalent LLVM Assembly Keyword
`LINKAGE_APPENDING`, `appending`
`LINKAGE_INTERNAL`, `internal`
`LINKAGE_PRIVATE`, `private`
`LINKAGE_LINKER_PRIVATE`, `linker_private`
`LINKAGE_DLLIMPORT`, `dllimport`
`LINKAGE_DLLEXPORT`, `dllexport`
`LINKAGE_EXTERNAL_WEAK`, `extern_weak`
`LINKAGE_GHOST`, deprecated -- do not use
`LINKAGE_COMMON`, `common`
`LINKAGE_GHOST`, Stand-in functions
`LINKAGE_LINKER_PRIVATE`, `linker_private`
|======================================================================
The `section` property can be assigned strings (like ".rodata"), which
@ -1350,39 +1370,12 @@ http://www.llvm.org/docs/LangRef.html#int_bswap[llvm.bswap]. The
integer argument. The list of intrinsic IDs defined as integer constants
in `llvm.core`. These are:
[format="csv",cols="3"]
[format="csv",cols="4"]
|======================================================================
`INTR_ALPHA_UMULH`,`INTR_ANNOTATION`,`INTR_ATOMIC_CMP_SWAP`
`INTR_ATOMIC_LOAD_ADD`,`INTR_ATOMIC_LOAD_AND`,`INTR_ATOMIC_LOAD_MAX`
`INTR_ATOMIC_LOAD_MIN`,`INTR_ATOMIC_LOAD_NAND`,`INTR_ATOMIC_LOAD_OR`
`INTR_ATOMIC_LOAD_SUB`,`INTR_ATOMIC_LOAD_UMAX`,`INTR_ATOMIC_LOAD_UMIN`
`INTR_ATOMIC_LOAD_XOR`,`INTR_ATOMIC_SWAP`,`INTR_BSWAP`
`INTR_CONVERTFF`,`INTR_CONVERTFSI`,`INTR_CONVERTFUI`
`INTR_CONVERTSIF`,`INTR_CONVERTSS`,`INTR_CONVERTSU`
`INTR_CONVERTUIF`,`INTR_CONVERTUS`,`INTR_CONVERTUU`
`INTR_COS`,`INTR_CTLZ`,`INTR_CTPOP`
`INTR_CTTZ`,`INTR_DBG_DECLARE`,`INTR_DBG_FUNC_START`
`INTR_DBG_REGION_END`,`INTR_DBG_REGION_START`,`INTR_DBG_STOPPOINT`
`INTR_EH_DWARF_CFA`,`INTR_EH_EXCEPTION`,`INTR_EH_RETURN_I32`
`INTR_EH_RETURN_I64`,`INTR_EH_SELECTOR_I32`,`INTR_EH_SELECTOR_I64`
`INTR_EH_SJLJ_LONGJMP`,`INTR_EH_SJLJ_LSDA`,`INTR_EH_SJLJ_SETJMP`
`INTR_EH_TYPEID_FOR_I32`,`INTR_EH_TYPEID_FOR_I64`,`INTR_EH_UNWIND_INIT`
`INTR_EXP`,`INTR_EXP2`,`INTR_FLT_ROUNDS`
`INTR_FRAMEADDRESS`,`INTR_GCREAD`,`INTR_GCROOT`
`INTR_GCWRITE`,`INTR_INIT_TRAMPOLINE`,`INTR_LOG`
`INTR_LOG10`,`INTR_LOG2`,`INTR_LONGJMP`
`INTR_MEMCPY`,`INTR_MEMMOVE`,`INTR_MEMORY_BARRIER`
`INTR_MEMSET`,`INTR_PCMARKER`,`INTR_POW`
`INTR_POWI`,`INTR_PREFETCH`,`INTR_PTR_ANNOTATION`
`INTR_READCYCLECOUNTER`,`INTR_RETURNADDRESS`,`INTR_SADD_WITH_OVERFLOW`
`INTR_SETJMP`,`INTR_SIGLONGJMP`,`INTR_SIGSETJMP`
`INTR_SIN`,`INTR_SMUL_WITH_OVERFLOW`,`INTR_SQRT`
`INTR_SSUB_WITH_OVERFLOW`,`INTR_STACKPROTECTOR`,`INTR_STACKRESTORE`
`INTR_STACKSAVE`,`INTR_TRAP`,`INTR_UADD_WITH_OVERFLOW`
`INTR_UMUL_WITH_OVERFLOW`,`INTR_USUB_WITH_OVERFLOW`,`INTR_VACOPY`
`INTR_VAEND`,`INTR_VAR_ANNOTATION`,`INTR_VASTART`
include::intrinsics.csv[]
|======================================================================
`ATTR_ZEXT`, `zeroext`
There are also target-specific intrinsics (which correspond to that
target's CPU instructions) available, but are omitted here for brevity.
Full list can be seen from
@ -1463,11 +1456,30 @@ Functions can be deleted using the method `delete`. This deletes them
from their containing module. All references to the function object
should be dropped after `delete` has been called.
Functions can be verified with the `verify` method. This does not work
properly yet (aborts on errors), investigation pending.
Functions can be verified with the `verify` method. Note that this may
not work properly (aborts on errors).
TODO function attributes
[frame="all",grid="all"]
`25`75~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Value, Equivalent LLVM Assembly Keyword
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~a
`ATTR_ALWAYS_INLINE`,`alwaysinline`
`ATTR_INLINE_HINT`,`inlinehint`
`ATTR_NO_INLINE`,`noinline`
`ATTR_OPTIMIZE_FOR_SIZE`,`optsize`
`ATTR_NO_RETURN`,`noreturn`
`ATTR_NO_UNWIND`,`nounwind`
`ATTR_READ_NONE`,`readnone`
`ATTR_READONLY`,`readonly`
`ATTR_STACK_PROTECT`,`ssp`
`ATTR_STACK_PROTECT_REQ`,`sspreq`
`ATTR_NO_REDZONE`,`noredzone`
`ATTR_NO_IMPLICIT_FLOAT`,`noimplicitfloat`
`ATTR_NAKED`,`naked`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Argument (llvm.core)
~~~~~~~~~~~~~~~~~~~~
@ -1485,23 +1497,20 @@ Value, Equivalent LLVM Assembly Keyword
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
`ATTR_ZEXT`, `zeroext`
`ATTR_SEXT`, `signext`
`ATTR_NO_RETURN`, `noreturn`
`ATTR_IN_REG`, `inreg`
`ATTR_STRUCT_RET`, `sret`
`ATTR_NO_UNWIND`, `nounwind`
`ATTR_NO_ALIAS`, `noalias`
`ATTR_BY_VAL`, `byval`
`ATTR_STRUCT_RET`, `sret`
`ATTR_NO_ALIAS`, `noalias`
`ATTR_NO_CAPTURE`, `nocapture`
`ATTR_NEST`, `nest`
`ATTR_READ_NONE`, `readnone`
`ATTR_READONLY`, `readonly`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The corresponding
http://www.llvm.org/docs/LangRef.html#paramattrs[LLVM docs]
provide more information.
The alignment of any parameter can also be set via `set_argument(a)`
where `a` is a power of 2.
The alignment of any parameter can be set via the `alignment`
property, to any power of 2.
Basic Block (llvm.core)
~~~~~~~~~~~~~~~~~~~~~~~
@ -1521,12 +1530,6 @@ Instructions (llvm.core)
TODO
Module Provider (llvm.core)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
TODO
Target Data (llvm.ee)
~~~~~~~~~~~~~~~~~~~~~
@ -1539,8 +1542,8 @@ Execution Engine (llvm.ee)
TODO. For now, see `test/example-jit.py`.
Pass Managers and Passes (llvm.passes)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Pass Manager and Passes (llvm.passes)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TODO. For now, see `test/passes.py`.
@ -1549,7 +1552,7 @@ About the llvm-py Project
---------------------------
llvm-py lives at
http://mdevan.nfshost.com/llvm-py/[http://mdevan.nfshost.com/llvm-py/].
http://www.mdevan.org/llvm-py/[http://www.mdevan.org/llvm-py/].
The code (subversion repository) and the issue tracker are hosted on the
Google code hosting service, at
http://code.google.com/p/llvm-py/[http://code.google.com/p/llvm-py/].
@ -1571,5 +1574,5 @@ 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_.
reached at _mdevan@mdevan.org_.