[pypy-svn] r37715 - in pypy/dist/pypy/translator/llvm: . module test

ericvrp at codespeak.net ericvrp at codespeak.net
Thu Feb 1 11:42:30 CET 2007


Author: ericvrp
Date: Thu Feb  1 11:42:28 2007
New Revision: 37715

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/module/support.py
   pypy/dist/pypy/translator/llvm/test/runtest.py
Log:
Complete support for llvm-gcc4 and llvm2


Modified: pypy/dist/pypy/translator/llvm/buildllvm.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/buildllvm.py	(original)
+++ pypy/dist/pypy/translator/llvm/buildllvm.py	Thu Feb  1 11:42:28 2007
@@ -15,13 +15,15 @@
         return False 
     return True
 
-def exe_version(exe):
+def _exe_version(exe):
     v = os.popen(exe + ' -version 2>&1').read()
     v = ''.join([c for c in v if c.isdigit()])
     v = int(v) / 10.0
     return v
 
-def exe_version2(exe):
+llvm_version = _exe_version('llvm-as')
+
+def _exe_version2(exe):
     v = os.popen(exe + ' --version 2>&1').read()
     i = v.index(')')
     v = v[i+2:].split()[0].split('.')
@@ -29,6 +31,9 @@
     v = float(major) + float(minor) / 10.0
     return v
 
+gcc_version = _exe_version2('gcc')
+llvm_gcc_version = _exe_version2('llvm-gcc')
+
 def optimizations(simple, use_gcc):
 
     if simple:
@@ -81,8 +86,7 @@
     # run llvm assembler and optimizer
     simple_optimizations = not optimize
     opts = optimizations(simple_optimizations, use_gcc)
-    v = exe_version('llvm-as')
-    if v < 2.0:
+    if llvm_version < 2.0:
         cmds = ["llvm-as < %s.ll | opt %s -f -o %s.bc" % (b, opts, b)]
     else: #we generate 1.x .ll files, so upgrade these first
         cmds = ["llvm-upgrade < %s.ll | llvm-as | opt %s -f -o %s.bc" % (b, opts, b)]

Modified: pypy/dist/pypy/translator/llvm/externs2ll.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/externs2ll.py	(original)
+++ pypy/dist/pypy/translator/llvm/externs2ll.py	Thu Feb  1 11:42:28 2007
@@ -7,7 +7,7 @@
 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 exe_version2
+from pypy.translator.llvm.buildllvm import llvm_gcc_version
 
 from pypy.tool.udir import udir
 
@@ -40,13 +40,10 @@
     plain = filename[:-2]
     includes = get_incdirs()
 
-    global _llvm_gcc_version
-    if not _llvm_gcc_version:
-        _llvm_gcc_version = exe_version2('llvm-gcc')
-    if _llvm_gcc_version < 4.0:
+    if llvm_gcc_version < 4.0:
         emit_llvm = ''
     else:
-        emit_llvm = '-emit-llvm'
+        emit_llvm = '-emit-llvm -O3'
     cmd = "llvm-gcc %s %s -S %s.c -o %s.ll 2>&1" % (
         includes, emit_llvm, plain, plain)
 

Modified: pypy/dist/pypy/translator/llvm/gc.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/gc.py	(original)
+++ pypy/dist/pypy/translator/llvm/gc.py	Thu Feb  1 11:42:28 2007
@@ -5,6 +5,12 @@
 from pypy.translator.llvm.log import log
 log = log.gc
 
+from pypy.translator.llvm.buildllvm import llvm_version
+if llvm_version >= 2.0:
+    postfix = '.i32'
+else:
+    postfix = ''
+
 def have_boehm():
     import distutils.sysconfig
     from os.path import exists
@@ -151,7 +157,7 @@
 
         # malloc_size is unsigned right now
         codewriter.malloc(targetvar, "sbyte", size)
-        codewriter.call(None, 'void', '%llvm.memset',
+        codewriter.call(None, 'void', '%llvm.memset' + postfix,
                         ['sbyte*', 'ubyte', uword, uword],
                         [targetvar, 0, size, boundary_size],
                         cconv='ccc')               
@@ -204,7 +210,7 @@
         codewriter.call(targetvar, 'sbyte*', fnname, [word], [sizei])
 
         if atomic:
-            codewriter.call(None, 'void', '%llvm.memset',
+            codewriter.call(None, 'void', '%llvm.memset' + postfix,
                             ['sbyte*', 'ubyte', uword, uword],
                             [targetvar, 0, size, boundary_size],
                             cconv='ccc')        

Modified: pypy/dist/pypy/translator/llvm/module/support.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/module/support.py	(original)
+++ pypy/dist/pypy/translator/llvm/module/support.py	Thu Feb  1 11:42:28 2007
@@ -1,12 +1,18 @@
+from pypy.translator.llvm.buildllvm import llvm_version
+if llvm_version >= 2.0:
+    postfix = '.i32'
+else:
+    postfix = ''
 
 extdeclarations = """
 %last_exception_type  = internal global %RPYTHON_EXCEPTION_VTABLE* null
 %last_exception_value = internal global %RPYTHON_EXCEPTION* null
 
 declare ccc uint %strlen(sbyte*)
-declare ccc void %llvm.memset(sbyte*, ubyte, UWORD, UWORD)
-declare ccc void %llvm.memcpy(sbyte*, sbyte*, UWORD, UWORD)
+declare ccc void %llvm.memsetPOSTFIX(sbyte*, ubyte, UWORD, UWORD)
+declare ccc void %llvm.memcpyPOSTFIX(sbyte*, sbyte*, UWORD, UWORD)
 """
+extdeclarations = extdeclarations.replace('POSTFIX', postfix)
 
 extfunctions = """
 internal fastcc sbyte* %RPyString_AsString(%RPyString* %structstring) {
@@ -36,7 +42,7 @@
     %rpystrptr = getelementptr %RPyString* %rpy, int 0, uint 1, uint 1
     %rpystr    = cast [0 x sbyte]* %rpystrptr to sbyte*
 
-    call ccc void %llvm.memcpy(sbyte* %rpystr, sbyte* %s, UWORD %lenuword, UWORD 0)
+    call ccc void %llvm.memcpyPOSTFIX(sbyte* %rpystr, sbyte* %s, UWORD %lenuword, UWORD 0)
 
     ret %RPyString* %rpy
 }
@@ -78,6 +84,7 @@
 }
 
 """
+extfunctions = extfunctions.replace('POSTFIX', postfix)
 
 from sys import maxint
 if maxint != 2**31-1:

Modified: pypy/dist/pypy/translator/llvm/test/runtest.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/test/runtest.py	(original)
+++ pypy/dist/pypy/translator/llvm/test/runtest.py	Thu Feb  1 11:42:28 2007
@@ -1,10 +1,9 @@
 import py
 from pypy.tool import isolate
 from pypy.translator.llvm.genllvm import genllvm_compile
-from pypy.translator.llvm.buildllvm import llvm_is_on_path, exe_version, exe_version2
+from pypy.translator.llvm.buildllvm import llvm_is_on_path, llvm_version, gcc_version
 optimize_tests = False
-MINIMUM_LLVM_VERSION = 1.7
-MAXIMUM_LLVM_VERSION = 2.0
+MINIMUM_LLVM_VERSION = 1.9
 
 ext_modules = []
 
@@ -33,21 +32,15 @@
     if not llvm_is_on_path():
         py.test.skip("could not find one of llvm-as or llvm-gcc")
         return False
-    v = exe_version('llvm-as')
-    if v < MINIMUM_LLVM_VERSION:
+    if llvm_version < MINIMUM_LLVM_VERSION:
         py.test.skip("llvm version not up-to-date (found "
-                     "%.1f, should be >= %.1f)" % (v, MINIMUM_LLVM_VERSION))
-        return False
-    elif v >= MAXIMUM_LLVM_VERSION:
-        py.test.skip("llvm version %.1f and higher are not yet supported (found %.1f)" % (
-            MAXIMUM_LLVM_VERSION, v))
+                     "%.1f, should be >= %.1f)" % (llvm_version, MINIMUM_LLVM_VERSION))
         return False
     return True
 
 def gcc3_test():
-    v = exe_version2('gcc')
-    if int(v) != 3:
-        py.test.skip("test required gcc version 3 (found version %.1f)" % v)
+    if int(gcc_version) != 3:
+        py.test.skip("test required gcc version 3 (found version %.1f)" % gcc_version)
         return False
     return True
 


More information about the pypy-svn mailing list