<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>llvm / Drkcore</title><link>http://blog.kzfmix.com/llvm</link><description>Programming, Music, Snowboarding</description><language>ja</language><lastBuildDate>Tue, 12 Jan 2010 10:35:24 +0919</lastBuildDate><item><title>macbookにllvm-pyを入れてみた</title><link>http://blog.kzfmix.com/entry/1236944921</link><description>&lt;p&gt;おもむろにllvmをインストール。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo port install llvm
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;でok。llvm-pyはサイトから&lt;a href="http://code.google.com/p/llvm-py/"&gt;ダウンロード&lt;/a&gt;してきていれた。&lt;/p&gt;

&lt;p&gt;で、&lt;a href="http://mdevan.nfshost.com/llvm-py/examples.html"&gt;サンプル&lt;/a&gt;をやってみる。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/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()
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;実行結果&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;; ModuleID = 'my_module'

define i32 @sum(i32 %a, i32 %b) {
entry:
    %tmp = add i32 %a, %b       ; &amp;lt;i32&amp;gt; [#uses=1]
    ret i32 %tmp
}

returned 142
&lt;/code&gt;&lt;/pre&gt;
</description><pubDate>Tue, 12 Jan 2010 10:35:24 +0919</pubDate><category>Python</category><category>llvm</category></item></channel></rss>