[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