[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