おもむろにllvmをインストール。
sudo port install llvm
でok。llvm-pyはサイトからダウンロードしてきていれた。
で、サンプルをやってみる。
#!/usr/bin/env python
from llvm import *
from llvm.core import *
from llvm.ee import *
my_module = Module.new('my_module')
ty_int = Type.int() # by default 32 bits
ty_func = Type.function(ty_int, [ty_int, ty_int])
f_sum = my_module.add_function(ty_func, "sum")
f_sum.args[0].name = "a"
f_sum.args[1].name = "b"
bb = f_sum.append_basic_block("entry")
builder = Builder.new(bb)
tmp = builder.add(f_sum.args[0], f_sum.args[1], "tmp")
builder.ret(tmp)
mp = ModuleProvider.new(my_module)
ee = ExecutionEngine.new(mp)
arg1 = GenericValue.int(ty_int, 100)
arg2 = GenericValue.int(ty_int, 42)
print my_module
retval = ee.run_function(f_sum, [arg1, arg2])
print "returned", retval.as_int()
実行結果
; ModuleID = 'my_module'
define i32 @sum(i32 %a, i32 %b) {
entry:
%tmp = add i32 %a, %b ; <i32> [#uses=1]
ret i32 %tmp
}
returned 142