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

@ -1,6 +1,8 @@
0.6, in progress: 0.6, 31-Aug-2010:
* Add and remove function attributes (Krzysztof Goj) (Issue #21).
* Wrap fadd,fsub,fmul (Aaron S Lav) (Issue #31).
* Migrate to LLVM 2.7. * Migrate to LLVM 2.7.
* Migrate to LLVM 2.6 (KS Sreeram) (Issue #25). * Migrate to LLVM 2.6 (KS Sreeram) (Issue #25).
* Inline function (Corrado Zoccolo). * Inline function (Corrado Zoccolo).

View file

@ -1,4 +1,4 @@
Copyright (c) 2008, Mahadevan R All rights reserved. Copyright (c) 2008-10, Mahadevan R All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:

9
README
View file

@ -13,7 +13,7 @@ Home page:
Versions: Versions:
--------- ---------
This package will work only with LLVM 2.7, and Python 2.4 or later, This package will work only with LLVM 2.7, and Python 2.4 or later,
but not 3.x. (not Python 3.x).
Quickstart: Quickstart:
@ -21,12 +21,13 @@ Quickstart:
1. Get 2.7 version of LLVM, build it. Make sure '--enable-pic' is passed to 1. Get 2.7 version of LLVM, build it. Make sure '--enable-pic' is passed to
LLVM's 'configure'. LLVM's 'configure'.
2. Get llvm-py from SVN, install it: 2. Get llvm-py and install it:
$ svn co http://llvm-py.googlecode.com/svn/trunk/ llvm-py $ wget http://llvm-py.googlecode.com/files/llvm-py-0.6.tar.bz2
$ tar jxvf llvm-py-0.6.tar.bz2
$ cd llvm-py $ cd llvm-py
# Locate llvm-config, usually under <llvm>/Release/bin # Locate llvm-config, usually under <llvm>/Release/bin
$ sudo python setup.py install --llvm-config=/path/to/llvm-config $ python setup.py install --user --llvm-config=/path/to/llvm-config
3. See examples under 'test' directory. 3. See examples under 'test' directory.

View file

@ -1,5 +1,5 @@
# #
# Copyright (c) 2008, Mahadevan R All rights reserved. # Copyright (c) 2008-10, Mahadevan R All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met: # modification, are permitted provided that the following conditions are met:

View file

@ -1,5 +1,5 @@
# #
# Copyright (c) 2008, Mahadevan R All rights reserved. # Copyright (c) 2008-10, Mahadevan R All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met: # modification, are permitted provided that the following conditions are met:

View file

@ -1,5 +1,5 @@
# #
# Copyright (c) 2008, Mahadevan R All rights reserved. # Copyright (c) 2008-10, Mahadevan R All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met: # modification, are permitted provided that the following conditions are met:

View file

@ -1,5 +1,5 @@
# #
# Copyright (c) 2008, Mahadevan R All rights reserved. # Copyright (c) 2008-10, Mahadevan R All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met: # modification, are permitted provided that the following conditions are met:

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2008, Mahadevan R All rights reserved. * Copyright (c) 2008-10, Mahadevan R All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2008, Mahadevan R All rights reserved. * Copyright (c) 2008-10, Mahadevan R All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2008, Mahadevan R All rights reserved. * Copyright (c) 2008-10, Mahadevan R All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2008, Mahadevan R All rights reserved. * Copyright (c) 2008-10, Mahadevan R All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:

View file

@ -2,10 +2,15 @@
import os import os
NCOLS = 4
INF = '../llvm/_intrinsic_ids.py'
OUTF = '../www/src/intrinsics.csv'
intrs = [] intrs = []
for line in file('../llvm/_intrinsic_ids.py'): for line in file(INF):
if line.startswith('INTR_'): if line.startswith('INTR_'):
if 'INTR_ARM_' not in line and \ if 'INTR_ALPHA_' not in line and \
'INTR_ARM_' not in line and \
'INTR_BFIN_' not in line and \ 'INTR_BFIN_' not in line and \
'INTR_PPC_' not in line and \ 'INTR_PPC_' not in line and \
'INTR_SPU_' not in line and \ 'INTR_SPU_' not in line and \
@ -13,7 +18,8 @@ for line in file('../llvm/_intrinsic_ids.py'):
'INTR_XCORE_' not in line: 'INTR_XCORE_' not in line:
intrs.append(line.split()[0]) intrs.append(line.split()[0])
outf = open(OUTF, 'wt')
i = 0 i = 0
while i < len(intrs): while i < len(intrs):
print "`" + "`,`".join(intrs[i:min(i+3,len(intrs)+1)]) + "`" print >>outf, "`" + "`,`".join(intrs[i:min(i+NCOLS,len(intrs)+1)]) + "`"
i += 3 i += NCOLS

View file

@ -2,7 +2,7 @@ About
===== =====
llvm-py is developed and maintained by Mahadevan R, with contributions from 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. 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 Many thanks to the guys over at LLVM for all the nifty software, for all

View file

@ -1,12 +1,12 @@
Download Download
======== ========
The latest release is 0.6, released 28-Oct-2009 (link:#changelog[Changelog] The latest release is 0.6, released 31-Aug-2010 (link:#changelog[Changelog]
below). 0.6 works only with LLVM 2.6. below). 0.6 works only with LLVM 2.7.
Download it here: Download it here:
- http://llvm-py.googlecode.com/files/llvm-py-0.6.tar.bz2[llvm-py-0.6.tar.bz2] (primary) * 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) * 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]. 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") tmp = builder.add(f_sum.args[0], f_sum.args[1], "tmp")
builder.ret(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 # Create an execution engine object. This will create a JIT compiler
# on platforms that support it, or an interpreter otherwise. # 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. # The arguments needs to be passed as "GenericValue" objects.
arg1 = GenericValue.int(ty_int, 100) arg1 = GenericValue.int(ty_int, 100)

View file

@ -18,6 +18,6 @@ a patch.
News News
---- ----
28-Oct-2009:: 31-Aug-2010::
SVN r83 works with LLVM 2.6. Website updated. 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. supported, for a variety of reasons.
.Versions .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. versions.
llvm-py has been built and tested with Python 2.6. It should work with 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 $ tar jxvf llvm-py-0.6.tar.bz2
$ cd llvm-py-0.6 $ 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 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 $ tar jxvf llvm-py-0.6.tar.bz2
$ cd llvm-py-0.6 $ 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 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 $ tar jxvf llvm-py-0.6.tar.bz2
$ cd llvm-py-0.6 $ cd llvm-py-0.6
$ 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 $ 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 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 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 -rf <site-packages>/llvm <site-packages>/llvm_py-0.6-py2.6.egg-info
# rm -f /usr/lib/python2.6/site-packages/llvm_py-0.6-py2.6.egg-info
---- ----
- You need to be root to do this. See the http://docs.python.org/install/index.html[Python
- Python site package path might be different on your system. documentation] for more information.
- Note that there are version numbers (both Python's and llvm-py's)
which you might need to change to suit your system.
The Concepts The Concepts
@ -269,33 +273,33 @@ source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The corresponding LLVM assembly: The corresponding LLVM assembly:
----------------------------------------------------------------------- -----------------------------------------------------------------------
; ModuleID = '/tmp/webcompile/_22154_0.bc' ; ModuleID = '/tmp/webcompile/_7149_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 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 = "i386-pc-linux-gnu" target triple = "x86_64-linux-gnu"
define i32 @sum(i32 %n) nounwind readnone { define i32 @sum(i32 %n) nounwind readnone {
entry: entry:
%0 = icmp eq i32 %n, 0 ; <i1> [#uses=1] %0 = icmp eq i32 %n, 0 ; <i1> [#uses=1]
br i1 %0, label %bb2, label %bb1 br i1 %0, label %bb2, label %bb1
bb1: ; preds = %entry bb1: ; preds = %entry
%1 = add i32 %n, -1 ; <i32> [#uses=2] %1 = add i32 %n, -1 ; <i32> [#uses=2]
%2 = icmp eq i32 %1, 0 ; <i1> [#uses=1] %2 = icmp eq i32 %1, 0 ; <i1> [#uses=1]
br i1 %2, label %sum.exit, label %bb1.i br i1 %2, label %sum.exit, label %bb1.i
bb1.i: ; preds = %bb1 bb1.i: ; preds = %bb1
%3 = add i32 %n, -2 ; <i32> [#uses=1] %3 = add i32 %n, -2 ; <i32> [#uses=1]
%4 = tail call i32 @sum(i32 %3) nounwind ; <i32> [#uses=1] %4 = tail call i32 @sum(i32 %3) nounwind ; <i32> [#uses=1]
%5 = add i32 %4, %1 ; <i32> [#uses=1] %5 = add i32 %4, %1 ; <i32> [#uses=1]
br label %sum.exit br label %sum.exit
sum.exit: ; preds = %bb1.i, %bb1 sum.exit: ; preds = %bb1.i, %bb1
%6 = phi i32 [ %5, %bb1.i ], [ 0, %bb1 ] ; <i32> [#uses=1] %6 = phi i32 [ %5, %bb1.i ], [ 0, %bb1 ] ; <i32> [#uses=1]
%7 = add i32 %6, %n ; <i32> [#uses=1] %7 = add i32 %6, %n ; <i32> [#uses=1]
ret i32 %7 ret i32 %7
bb2: ; preds = %entry bb2: ; preds = %entry
ret i32 0 ret i32 0
} }
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -398,7 +402,7 @@ Here is a quick overview of the contents of each package:
manager manager
- constants +TYPE_*+ that represents various types - constants +TYPE_*+ that represents various types
- constants +CC_*+ that represent calling conventions - 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.) comparison predicates (like less than, greater than etc.)
- constants +LINKAGE_*+ that represent linkage of symbols (external, - constants +LINKAGE_*+ that represent linkage of symbols (external,
internal etc.) internal etc.)
@ -524,6 +528,9 @@ stringifying them (see below).
A string representing the ABI of the platform. A string representing the ABI of the platform.
`target`:: `target`::
A string like `i386-pc-linux-gnu` or `i386-pc-solaris2.8`. 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]:: `global_variables` [read-only]::
An iterable that yields `GlobalVariable` objects, that represent An iterable that yields `GlobalVariable` objects, that represent
the global variables of the module. the global variables of the module.
@ -532,6 +539,8 @@ stringifying them (see below).
in the module. in the module.
.Methods .Methods
`get_type_named(name)`::
Return a `Type` object for the given alias name (typedef).
`add_type_name(name, ty)`:: `add_type_name(name, ty)`::
Add an alias (typedef) for the type `ty` with the name `name`. Add an alias (typedef) for the type `ty` with the name `name`.
`delete_type_name(name)`:: `delete_type_name(name)`::
@ -549,12 +558,20 @@ stringifying them (see below).
`get_function_named(name)`:: `get_function_named(name)`::
Get a `Function` object corresponding to the function with the name Get a `Function` object corresponding to the function with the name
`name`. Raises `LLVMException` if such a function does not exist. `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()`::
Verify the correctness of the module. Raises `LLVMException` on Verify the correctness of the module. Raises `LLVMException` on
errors. errors.
`to_bitcode(fileobj)`:: `to_bitcode(fileobj)`::
Write the bitcode representation of the module to the file-like Write the bitcode representation of the module to the file-like
object `fileobj`. 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 .Special Methods
`__str__`:: `__str__`::
@ -570,7 +587,7 @@ stringifying them (see below).
.Convention .Convention
======================================================================= =======================================================================
*All* llvm-py objects (where it makes sense), when stringified, return *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. prints the LLVM assembly form of the entire module.
Such objects, when compared for equality, internally compare these Such objects, when compared for equality, internally compare these
@ -675,6 +692,7 @@ The class-level documentation follows:
+ +
[python] [python]
source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Warning: do not rely on actual numerical values!
TYPE_VOID = 0 TYPE_VOID = 0
TYPE_FLOAT = 1 TYPE_FLOAT = 1
TYPE_DOUBLE = 2 TYPE_DOUBLE = 2
@ -682,14 +700,15 @@ TYPE_X86_FP80 = 3
TYPE_FP128 = 4 TYPE_FP128 = 4
TYPE_PPC_FP128 = 5 TYPE_PPC_FP128 = 5
TYPE_LABEL = 6 TYPE_LABEL = 6
TYPE_METADATA = 7 TYPE_INTEGER = 7
TYPE_INTEGER = 8 TYPE_FUNCTION = 8
TYPE_FUNCTION = 9 TYPE_STRUCT = 9
TYPE_STRUCT = 10 TYPE_ARRAY = 10
TYPE_ARRAY = 11 TYPE_POINTER = 11
TYPE_POINTER = 12 TYPE_OPAQUE = 12
TYPE_OPAQUE = 13 TYPE_VECTOR = 13
TYPE_VECTOR = 14 TYPE_METADATA = 14
TYPE_UNION = 15
source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ +
Example: Example:
@ -811,7 +830,7 @@ source~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
`address_space` [read-only]:: `address_space` [read-only]::
The address space of the pointer. The address space of the pointer.
`pointee` [read-only]:: `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' ; 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 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.and_(k2)`, "Bitwise and of `k` and `k2`. Note trailing underscore."
`k.or_(k2)`, "Bitwise or 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.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.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(rpred, k2)`", "Compare `k` with `k2` using the predicate `rpred`. See table link:#rpred[below] for list of predicates for real 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.shl(k2)`, "Shift `k` left by `k2` bits."
`k.lshr(k2)`, "Shift `k` logically right by `k2` bits (new bits are 0s)." `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)." `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`." "`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 Predicates for use with `icmp` instruction are listed below. All
of these are integer constants defined in the `llvm.core` module. of these are integer constants defined in the `llvm.core` module.
[frame="all",grid="all",format="csv",cols="2",options="header"] [frame="all",grid="all",format="csv",cols="2",options="header"]
|====================================================================== |======================================================================
Value, Meaning Value, Meaning
`IPRED_EQ`, Equality `ICMP_EQ`, Equality
`IPRED_NE`, Inequality `ICMP_NE`, Inequality
`IPRED_UGT`, Unsigned greater than `ICMP_UGT`, Unsigned greater than
`IPRED_UGE`, Unsigned greater than or equal `ICMP_UGE`, Unsigned greater than or equal
`IPRED_ULT`, Unsigned less than `ICMP_ULT`, Unsigned less than
`IPRED_ULE`, Unsigned less than or equal `ICMP_ULE`, Unsigned less than or equal
`IPRED_SGT`, Signed greater than `ICMP_SGT`, Signed greater than
`IPRED_SGE`, Signed greater than or equal `ICMP_SGE`, Signed greater than or equal
`IPRED_SLT`, Signed less than `ICMP_SLT`, Signed less than
`IPRED_SLE`, Signed less than or equal `ICMP_SLE`, Signed less than or equal
|====================================================================== |======================================================================
[[rpred]] [[fcmp]]
Predicates for use with `fcmp` instruction are listed below. All Predicates for use with `fcmp` instruction are listed below. All
of these are integer constants defined in the `llvm.core` module. of these are integer constants defined in the `llvm.core` module.
[frame="all",grid="all",format="csv",cols="2",options="header"] [frame="all",grid="all",format="csv",cols="2",options="header"]
|====================================================================== |======================================================================
Value, Meaning Value, Meaning
`RPRED_FALSE`, Always false `FCMP_FALSE`, Always false
`RPRED_OEQ`, True if ordered and equal `FCMP_OEQ`, True if ordered and equal
`RPRED_OGT`, True if ordered and greater than `FCMP_OGT`, True if ordered and greater than
`RPRED_OGE`, True if ordered and greater than or equal `FCMP_OGE`, True if ordered and greater than or equal
`RPRED_OLT`, True if ordered and less than `FCMP_OLT`, True if ordered and less than
`RPRED_OLE`, True if ordered and less than or equal `FCMP_OLE`, True if ordered and less than or equal
`RPRED_ONE`, True if ordered and operands are unequal `FCMP_ONE`, True if ordered and operands are unequal
`RPRED_ORD`, True if ordered (no NaNs) `FCMP_ORD`, True if ordered (no NaNs)
`RPRED_UNO`, True if unordered: `isnan(X) | isnan(Y)` `FCMP_UNO`, True if unordered: `isnan(X) | isnan(Y)`
`RPRED_UEQ`, True if unordered or equal `FCMP_UEQ`, True if unordered or equal
`RPRED_UGT`, True if unordered or greater than `FCMP_UGT`, True if unordered or greater than
`RPRED_UGE`, "True if unordered, greater than or equal" `FCMP_UGE`, "True if unordered, greater than or equal"
`RPRED_ULT`, "True if unordered, or less than" `FCMP_ULT`, "True if unordered, or less than"
`RPRED_ULE`, "True if unordered, less than or equal" `FCMP_ULE`, "True if unordered, less than or equal"
`RPRED_UNE`, True if unordered or not equal `FCMP_UNE`, True if unordered or not equal
`RPRED_TRUE `, Always true `FCMP_TRUE `, Always true
|====================================================================== |======================================================================
.llvm.core.Constant .llvm.core.Constant
@ -1157,12 +1177,12 @@ Value, Equivalent LLVM Assembly Keyword
`LINKAGE_APPENDING`, `appending` `LINKAGE_APPENDING`, `appending`
`LINKAGE_INTERNAL`, `internal` `LINKAGE_INTERNAL`, `internal`
`LINKAGE_PRIVATE`, `private` `LINKAGE_PRIVATE`, `private`
`LINKAGE_LINKER_PRIVATE`, `linker_private`
`LINKAGE_DLLIMPORT`, `dllimport` `LINKAGE_DLLIMPORT`, `dllimport`
`LINKAGE_DLLEXPORT`, `dllexport` `LINKAGE_DLLEXPORT`, `dllexport`
`LINKAGE_EXTERNAL_WEAK`, `extern_weak` `LINKAGE_EXTERNAL_WEAK`, `extern_weak`
`LINKAGE_GHOST`, deprecated -- do not use
`LINKAGE_COMMON`, `common` `LINKAGE_COMMON`, `common`
`LINKAGE_GHOST`, Stand-in functions `LINKAGE_LINKER_PRIVATE`, `linker_private`
|====================================================================== |======================================================================
The `section` property can be assigned strings (like ".rodata"), which 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 integer argument. The list of intrinsic IDs defined as integer constants
in `llvm.core`. These are: in `llvm.core`. These are:
[format="csv",cols="3"] [format="csv",cols="4"]
|====================================================================== |======================================================================
`INTR_ALPHA_UMULH`,`INTR_ANNOTATION`,`INTR_ATOMIC_CMP_SWAP` include::intrinsics.csv[]
`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`
|====================================================================== |======================================================================
`ATTR_ZEXT`, `zeroext`
There are also target-specific intrinsics (which correspond to that There are also target-specific intrinsics (which correspond to that
target's CPU instructions) available, but are omitted here for brevity. target's CPU instructions) available, but are omitted here for brevity.
Full list can be seen from 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 from their containing module. All references to the function object
should be dropped after `delete` has been called. should be dropped after `delete` has been called.
Functions can be verified with the `verify` method. This does not work Functions can be verified with the `verify` method. Note that this may
properly yet (aborts on errors), investigation pending. not work properly (aborts on errors).
TODO function attributes 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) Argument (llvm.core)
~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
@ -1485,23 +1497,20 @@ Value, Equivalent LLVM Assembly Keyword
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
`ATTR_ZEXT`, `zeroext` `ATTR_ZEXT`, `zeroext`
`ATTR_SEXT`, `signext` `ATTR_SEXT`, `signext`
`ATTR_NO_RETURN`, `noreturn`
`ATTR_IN_REG`, `inreg` `ATTR_IN_REG`, `inreg`
`ATTR_STRUCT_RET`, `sret`
`ATTR_NO_UNWIND`, `nounwind`
`ATTR_NO_ALIAS`, `noalias`
`ATTR_BY_VAL`, `byval` `ATTR_BY_VAL`, `byval`
`ATTR_STRUCT_RET`, `sret`
`ATTR_NO_ALIAS`, `noalias`
`ATTR_NO_CAPTURE`, `nocapture`
`ATTR_NEST`, `nest` `ATTR_NEST`, `nest`
`ATTR_READ_NONE`, `readnone`
`ATTR_READONLY`, `readonly`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The corresponding The corresponding
http://www.llvm.org/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 be set via the `alignment`
where `a` is a power of 2. property, to any power of 2.
Basic Block (llvm.core) Basic Block (llvm.core)
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
@ -1521,12 +1530,6 @@ Instructions (llvm.core)
TODO TODO
Module Provider (llvm.core)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
TODO
Target Data (llvm.ee) Target Data (llvm.ee)
~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
@ -1539,8 +1542,8 @@ Execution Engine (llvm.ee)
TODO. For now, see `test/example-jit.py`. 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`. TODO. For now, see `test/passes.py`.
@ -1549,7 +1552,7 @@ About the llvm-py Project
--------------------------- ---------------------------
llvm-py lives at 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 The code (subversion repository) and the issue tracker are hosted on the
Google code hosting service, at Google code hosting service, at
http://code.google.com/p/llvm-py/[http://code.google.com/p/llvm-py/]. 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]. 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 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_.

View file

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.5.0" /> <meta name="generator" content="AsciiDoc 8.5.3" />
<meta name="description" content="Python bindings for LLVM" /> <meta name="description" content="Python bindings for LLVM" />
<meta name="keywords" content="llvm python compiler backend bindings" /> <meta name="keywords" content="llvm python compiler backend bindings" />
<link rel="stylesheet" href="style/xhtml11.css" type="text/css" /> <link rel="stylesheet" href="style/xhtml11.css" type="text/css" />
@ -34,7 +34,7 @@
<div id="preamble"> <div id="preamble">
<div class="sectionbody"> <div class="sectionbody">
<div class="paragraph"><p>llvm-py is developed and maintained by Mahadevan R, with contributions from <div class="paragraph"><p>llvm-py is developed and maintained by Mahadevan R, with contributions from
many users all over the world. He can be reached at <a href="mailto:mdevan.foobar@gmail.com">mdevan.foobar@gmail.com</a>, many users all over the world. He can be reached at <a href="mailto:mdevan@mdevan.org">mdevan@mdevan.org</a>,
on the llvm-dev mailing list and (sometimes) as mdevan on irc.oftc.net#llvm.</p></div> on the llvm-dev mailing list and (sometimes) as mdevan on irc.oftc.net#llvm.</p></div>
<div class="paragraph"><p>Many thanks to the guys over at LLVM for all the nifty software, for all <div class="paragraph"><p>Many thanks to the guys over at LLVM for all the nifty software, for all
the llvm-py contributors.</p></div> the llvm-py contributors.</p></div>
@ -43,7 +43,7 @@ the llvm-py contributors.</p></div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Web pages &copy; Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>. Web pages &copy; Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
Last updated 2009-10-28. Last updated 2010-08-31.
</div> </div>
</div> </div>
</div> </div>

View file

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.5.0" /> <meta name="generator" content="AsciiDoc 8.5.3" />
<meta name="description" content="Python bindings for LLVM" /> <meta name="description" content="Python bindings for LLVM" />
<meta name="keywords" content="llvm python compiler backend bindings" /> <meta name="keywords" content="llvm python compiler backend bindings" />
<link rel="stylesheet" href="style/xhtml11.css" type="text/css" /> <link rel="stylesheet" href="style/xhtml11.css" type="text/css" />
@ -91,7 +91,7 @@ update and merge before sending patches etc.</p></div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Web pages &copy; Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>. Web pages &copy; Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
Last updated 2009-10-28. Last updated 2010-08-31.
</div> </div>
</div> </div>
</div> </div>

View file

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.5.0" /> <meta name="generator" content="AsciiDoc 8.5.3" />
<meta name="description" content="Python bindings for LLVM" /> <meta name="description" content="Python bindings for LLVM" />
<meta name="keywords" content="llvm python compiler backend bindings" /> <meta name="keywords" content="llvm python compiler backend bindings" />
<link rel="stylesheet" href="style/xhtml11.css" type="text/css" /> <link rel="stylesheet" href="style/xhtml11.css" type="text/css" />
@ -33,11 +33,11 @@
</div> </div>
<div id="preamble"> <div id="preamble">
<div class="sectionbody"> <div class="sectionbody">
<div class="paragraph"><p>The latest release is 0.6, released 28-Oct-2009 (<a href="#changelog">Changelog</a> <div class="paragraph"><p>The latest release is 0.6, released 31-Aug-2010 (<a href="#changelog">Changelog</a>
below). 0.6 works only with LLVM 2.6.</p></div> below). 0.6 works only with LLVM 2.7.</p></div>
<div class="paragraph"><p>Download it here: <div class="paragraph"><p>Download it here:
- <a href="http://llvm-py.googlecode.com/files/llvm-py-0.6.tar.bz2">llvm-py-0.6.tar.bz2</a> (primary) * <a href="http://llvm-py.googlecode.com/files/llvm-py-0.6.tar.bz2">llvm-py-0.6.tar.bz2</a> (primary)
- <a href="llvm-py-0.6.tar.bz2">llvm-py-0.6.tar.bz2</a> (mirror)</p></div> * <a href="llvm-py-0.6.tar.bz2">llvm-py-0.6.tar.bz2</a> (mirror)</p></div>
<div class="paragraph"><p>Older versions are available <a href="http://llvm-py.googlecode.com/files/">here</a>.</p></div> <div class="paragraph"><p>Older versions are available <a href="http://llvm-py.googlecode.com/files/">here</a>.</p></div>
<div class="paragraph"><p>The latest code can be checked out from SVN like so:</p></div> <div class="paragraph"><p>The latest code can be checked out from SVN like so:</p></div>
<div class="listingblock"> <div class="listingblock">
@ -52,8 +52,11 @@ package.</p></div>
<div class="sectionbody"> <div class="sectionbody">
<div class="listingblock"> <div class="listingblock">
<div class="content"> <div class="content">
<pre><tt>0.6, in progress: <pre><tt>0.6, 31-Aug-2010:
* Add and remove function attributes (Krzysztof Goj) (Issue #21).
* Wrap fadd,fsub,fmul (Aaron S Lav) (Issue #31).
* Migrate to LLVM 2.7.
* Migrate to LLVM 2.6 (KS Sreeram) (Issue #25). * Migrate to LLVM 2.6 (KS Sreeram) (Issue #25).
* Inline function (Corrado Zoccolo). * Inline function (Corrado Zoccolo).
* Get pointer to function (Corrado Zoccolo). * Get pointer to function (Corrado Zoccolo).
@ -129,7 +132,7 @@ package.</p></div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Web pages &copy; Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>. Web pages &copy; Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
Last updated 2009-10-28. Last updated 2010-08-31.
</div> </div>
</div> </div>
</div> </div>

View file

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.5.0" /> <meta name="generator" content="AsciiDoc 8.5.3" />
<meta name="description" content="Python bindings for LLVM" /> <meta name="description" content="Python bindings for LLVM" />
<meta name="keywords" content="llvm python compiler backend bindings" /> <meta name="keywords" content="llvm python compiler backend bindings" />
<link rel="stylesheet" href="style/xhtml11.css" type="text/css" /> <link rel="stylesheet" href="style/xhtml11.css" type="text/css" />
@ -37,7 +37,7 @@
<div class="paragraph"><p>Let&#8217;s create a (LLVM) module containing a single function, corresponding <div class="paragraph"><p>Let&#8217;s create a (LLVM) module containing a single function, corresponding
to the <tt>C</tt> function:</p></div> to the <tt>C</tt> function:</p></div>
<div class="listingblock"> <div class="listingblock">
<div class="content"><!-- Generator: GNU source-highlight 3.1 <div class="content"><!-- Generator: GNU source-highlight 3.1.3
by Lorenzo Bettini by Lorenzo Bettini
http://www.lorenzobettini.it http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite --> http://www.gnu.org/software/src-highlite -->
@ -47,7 +47,7 @@ http://www.gnu.org/software/src-highlite -->
<span style="color: #FF0000">}</span></tt></pre></div></div> <span style="color: #FF0000">}</span></tt></pre></div></div>
<div class="paragraph"><p>Here&#8217;s how it looks like:</p></div> <div class="paragraph"><p>Here&#8217;s how it looks like:</p></div>
<div class="listingblock"> <div class="listingblock">
<div class="content"><!-- Generator: GNU source-highlight 3.1 <div class="content"><!-- Generator: GNU source-highlight 3.1.3
by Lorenzo Bettini by Lorenzo Bettini
http://www.lorenzobettini.it http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite --> http://www.gnu.org/software/src-highlite -->
@ -109,7 +109,7 @@ entry:
<h3 id="_adding_jit_compilation">Adding JIT Compilation</h3><div style="clear:left"></div> <h3 id="_adding_jit_compilation">Adding JIT Compilation</h3><div style="clear:left"></div>
<div class="paragraph"><p>Let&#8217;s compile this function in-memory and run it.</p></div> <div class="paragraph"><p>Let&#8217;s compile this function in-memory and run it.</p></div>
<div class="listingblock"> <div class="listingblock">
<div class="content"><!-- Generator: GNU source-highlight 3.1 <div class="content"><!-- Generator: GNU source-highlight 3.1.3
by Lorenzo Bettini by Lorenzo Bettini
http://www.lorenzobettini.it http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite --> http://www.gnu.org/software/src-highlite -->
@ -132,14 +132,9 @@ builder <span style="color: #990000">=</span> Builder<span style="color: #990000
tmp <span style="color: #990000">=</span> builder<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">add</span></span><span style="color: #990000">(</span>f_sum<span style="color: #990000">.</span>args<span style="color: #990000">[</span><span style="color: #993399">0</span><span style="color: #990000">],</span> f_sum<span style="color: #990000">.</span>args<span style="color: #990000">[</span><span style="color: #993399">1</span><span style="color: #990000">],</span> <span style="color: #FF0000">"tmp"</span><span style="color: #990000">)</span> tmp <span style="color: #990000">=</span> builder<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">add</span></span><span style="color: #990000">(</span>f_sum<span style="color: #990000">.</span>args<span style="color: #990000">[</span><span style="color: #993399">0</span><span style="color: #990000">],</span> f_sum<span style="color: #990000">.</span>args<span style="color: #990000">[</span><span style="color: #993399">1</span><span style="color: #990000">],</span> <span style="color: #FF0000">"tmp"</span><span style="color: #990000">)</span>
builder<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">ret</span></span><span style="color: #990000">(</span>tmp<span style="color: #990000">)</span> builder<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">ret</span></span><span style="color: #990000">(</span>tmp<span style="color: #990000">)</span>
<span style="font-style: italic"><span style="color: #9A1900"># Create a module provider object first. Modules can come from</span></span>
<span style="font-style: italic"><span style="color: #9A1900"># in-memory IRs like what we created now, or from bitcode (.bc)</span></span>
<span style="font-style: italic"><span style="color: #9A1900"># files. The module provider abstracts this detail.</span></span>
mp <span style="color: #990000">=</span> ModuleProvider<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">new</span></span><span style="color: #990000">(</span>my_module<span style="color: #990000">)</span>
<span style="font-style: italic"><span style="color: #9A1900"># Create an execution engine object. This will create a JIT compiler</span></span> <span style="font-style: italic"><span style="color: #9A1900"># Create an execution engine object. This will create a JIT compiler</span></span>
<span style="font-style: italic"><span style="color: #9A1900"># on platforms that support it, or an interpreter otherwise.</span></span> <span style="font-style: italic"><span style="color: #9A1900"># on platforms that support it, or an interpreter otherwise.</span></span>
ee <span style="color: #990000">=</span> ExecutionEngine<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">new</span></span><span style="color: #990000">(</span>mp<span style="color: #990000">)</span> ee <span style="color: #990000">=</span> ExecutionEngine<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">new</span></span><span style="color: #990000">(</span>my_module<span style="color: #990000">)</span>
<span style="font-style: italic"><span style="color: #9A1900"># The arguments needs to be passed as "GenericValue" objects.</span></span> <span style="font-style: italic"><span style="color: #9A1900"># The arguments needs to be passed as "GenericValue" objects.</span></span>
arg1 <span style="color: #990000">=</span> GenericValue<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">int</span></span><span style="color: #990000">(</span>ty_int<span style="color: #990000">,</span> <span style="color: #993399">100</span><span style="color: #990000">)</span> arg1 <span style="color: #990000">=</span> GenericValue<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">int</span></span><span style="color: #990000">(</span>ty_int<span style="color: #990000">,</span> <span style="color: #993399">100</span><span style="color: #990000">)</span>
@ -224,7 +219,7 @@ Conclusion and other useful LLVM tidbits (TODO)
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Web pages &copy; Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>. Web pages &copy; Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
Last updated 2009-10-28. Last updated 2010-08-31.
</div> </div>
</div> </div>
</div> </div>

View file

@ -1,4 +1,4 @@
<!-- Generator: GNU source-highlight 3.1 <!-- Generator: GNU source-highlight 3.1.3
by Lorenzo Bettini by Lorenzo Bettini
http://www.lorenzobettini.it http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite --> http://www.gnu.org/software/src-highlite -->

View file

@ -1,4 +1,4 @@
<!-- Generator: GNU source-highlight 3.1 <!-- Generator: GNU source-highlight 3.1.3
by Lorenzo Bettini by Lorenzo Bettini
http://www.lorenzobettini.it http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite --> http://www.gnu.org/software/src-highlite -->

View file

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.5.0" /> <meta name="generator" content="AsciiDoc 8.5.3" />
<meta name="description" content="Python bindings for LLVM" /> <meta name="description" content="Python bindings for LLVM" />
<meta name="keywords" content="llvm python compiler backend bindings" /> <meta name="keywords" content="llvm python compiler backend bindings" />
<link rel="stylesheet" href="style/xhtml11.css" type="text/css" /> <link rel="stylesheet" href="style/xhtml11.css" type="text/css" />
@ -51,11 +51,11 @@ a patch.</p></div>
<div class="sectionbody"> <div class="sectionbody">
<div class="dlist"><dl> <div class="dlist"><dl>
<dt class="hdlist1"> <dt class="hdlist1">
28-Oct-2009 31-Aug-2010
</dt> </dt>
<dd> <dd>
<p> <p>
SVN r83 works with LLVM 2.6. Website updated. 0.6 released, works with LLVM 2.7.
</p> </p>
</dd> </dd>
</dl></div> </dl></div>
@ -63,7 +63,7 @@ a patch.</p></div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Web pages &copy; Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>. Web pages &copy; Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
Last updated 2009-10-28. Last updated 2010-08-31.
</div> </div>
</div> </div>
</div> </div>

View file

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.5.0" /> <meta name="generator" content="AsciiDoc 8.5.3" />
<meta name="description" content="Python bindings for LLVM" /> <meta name="description" content="Python bindings for LLVM" />
<meta name="keywords" content="llvm python compiler backend bindings" /> <meta name="keywords" content="llvm python compiler backend bindings" />
<link rel="stylesheet" href="style/xhtml11.css" type="text/css" /> <link rel="stylesheet" href="style/xhtml11.css" type="text/css" />
@ -42,7 +42,7 @@ where-ever and how-ever you&#8217;re able to use LLVM itself.</p></div>
file in the distribution, and is reproduced here:</p></div> file in the distribution, and is reproduced here:</p></div>
<div class="listingblock"> <div class="listingblock">
<div class="content"> <div class="content">
<pre><tt>Copyright (c) 2008, Mahadevan R All rights reserved. <pre><tt>Copyright (c) 2008-10, Mahadevan R All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
@ -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 &copy; Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>. Web pages &copy; Mahadevan R. Generated with <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.
Last updated 2009-10-28. Last updated 2010-08-31.
</div> </div>
</div> </div>
</div> </div>

File diff suppressed because it is too large Load diff