[pypy-svn] r36422 - in pypy/dist/pypy/translator/llvm: . test
ericvrp at codespeak.net
ericvrp at codespeak.net
Wed Jan 10 18:59:56 CET 2007
Author: ericvrp
Date: Wed Jan 10 18:59:50 2007
New Revision: 36422
Modified:
pypy/dist/pypy/translator/llvm/buildllvm.py
pypy/dist/pypy/translator/llvm/externs2ll.py
pypy/dist/pypy/translator/llvm/gc.py
pypy/dist/pypy/translator/llvm/test/test_seq.py
Log:
try to support both llvm-gcc 3 and 4
Modified: pypy/dist/pypy/translator/llvm/buildllvm.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/buildllvm.py (original)
+++ pypy/dist/pypy/translator/llvm/buildllvm.py Wed Jan 10 18:59:50 2007
@@ -21,6 +21,13 @@
v = int(v) / 10.0
return v
+def llvm_gcc_version():
+ v = os.popen('llvm-gcc --version 2>&1').read()
+ i = v.index(')')
+ v = v[i+2:].split()[0].split('.')
+ v = float(v[0]) + float(v[1]) / 10.0
+ return v
+
def optimizations(simple, use_gcc):
if simple:
Modified: pypy/dist/pypy/translator/llvm/externs2ll.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/externs2ll.py (original)
+++ pypy/dist/pypy/translator/llvm/externs2ll.py Wed Jan 10 18:59:50 2007
@@ -7,9 +7,12 @@
from pypy.rpython.rmodel import inputconst
from pypy.rpython.lltypesystem import lltype
from pypy.translator.llvm.codewriter import DEFAULT_CCONV
+from pypy.translator.llvm.buildllvm import llvm_gcc_version
from pypy.tool.udir import udir
+_llvm_gcc_version = None
+
support_functions = [
"%raisePyExc_IOError",
"%raisePyExc_ValueError",
@@ -36,9 +39,17 @@
plain = filename[:-2]
includes = get_incdirs()
- cmd = "llvm-gcc %s -S %s.c -o %s.ll 2>&1" % (includes,
- plain,
- plain)
+
+ global _llvm_gcc_version
+ if not _llvm_gcc_version:
+ _llvm_gcc_version = llvm_gcc_version()
+ if _llvm_gcc_version < 4.0:
+ emit_llvm = ''
+ else:
+ emit_llvm = '-emit-llvm'
+ cmd = "llvm-gcc %s %s -S %s.c -o %s.ll 2>&1" % (
+ includes, emit_llvm, plain, plain)
+
os.system(cmd)
llcode = open(plain + '.ll').read()
Modified: pypy/dist/pypy/translator/llvm/gc.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/gc.py (original)
+++ pypy/dist/pypy/translator/llvm/gc.py Wed Jan 10 18:59:50 2007
@@ -158,7 +158,7 @@
class BoehmGcPolicy(GcPolicy):
- def __init__(self, db, exc_useringbuf=True):
+ def __init__(self, db, exc_useringbuf=False):
self.db = db
# XXX a config option...
self.exc_useringbuf = exc_useringbuf
Modified: pypy/dist/pypy/translator/llvm/test/test_seq.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/test/test_seq.py (original)
+++ pypy/dist/pypy/translator/llvm/test/test_seq.py Wed Jan 10 18:59:50 2007
@@ -7,6 +7,21 @@
from pypy.translator.llvm.test.runtest import *
class TestLLVMArray(object):
+ def test_char_array(self):
+ from pypy.rpython.lltypesystem import lltype
+ A = lltype.GcArray(lltype.Char)
+ def fn(n):
+ a = lltype.malloc(A, 5)
+ a[4] = 'H'
+ a[3] = 'e'
+ a[2] = 'l'
+ a[1] = 'l'
+ a[0] = 'o'
+ return ord(a[n])
+ fp = compile_function(fn, [int])
+ for i in range(5):
+ assert fp(i) == fn(i)
+
def test_array(self):
f = compile_function(llvmsnippet.array_simple, [])
assert f() == 42
More information about the Pypy-commit
mailing list