[pypy-svn] r65688 - in pypy/branch/pyjitpl5-experiments/pypy/jit/backend/llvm: . test

arigo at codespeak.net arigo at codespeak.net
Tue Jun 9 14:13:16 CEST 2009


Author: arigo
Date: Tue Jun  9 14:13:15 2009
New Revision: 65688

Added:
   pypy/branch/pyjitpl5-experiments/pypy/jit/backend/llvm/test/test_zrpy_basic.py   (contents, props changed)
Modified:
   pypy/branch/pyjitpl5-experiments/pypy/jit/backend/llvm/llvm_rffi.py
   pypy/branch/pyjitpl5-experiments/pypy/jit/backend/llvm/runner.py
Log:
RPythonification.  Giving up for now, as it seems optimize.py fails to
be RPython.


Modified: pypy/branch/pyjitpl5-experiments/pypy/jit/backend/llvm/llvm_rffi.py
==============================================================================
--- pypy/branch/pyjitpl5-experiments/pypy/jit/backend/llvm/llvm_rffi.py	(original)
+++ pypy/branch/pyjitpl5-experiments/pypy/jit/backend/llvm/llvm_rffi.py	Tue Jun  9 14:13:15 2009
@@ -115,6 +115,7 @@
 
 LLVMInt1Type = llexternal('LLVMInt1Type', [], LLVMTypeRef)
 LLVMInt8Type = llexternal('LLVMInt8Type', [], LLVMTypeRef)
+LLVMInt16Type = llexternal('LLVMInt16Type', [], LLVMTypeRef)
 LLVMInt32Type = llexternal('LLVMInt32Type', [], LLVMTypeRef)
 LLVMInt64Type = llexternal('LLVMInt64Type', [], LLVMTypeRef)
 LLVMFunctionType = llexternal('LLVMFunctionType',

Modified: pypy/branch/pyjitpl5-experiments/pypy/jit/backend/llvm/runner.py
==============================================================================
--- pypy/branch/pyjitpl5-experiments/pypy/jit/backend/llvm/runner.py	(original)
+++ pypy/branch/pyjitpl5-experiments/pypy/jit/backend/llvm/runner.py	Tue Jun  9 14:13:15 2009
@@ -1,5 +1,6 @@
 import sys
 from pypy.rpython.lltypesystem import lltype, llmemory, rffi, rclass, rstr
+from pypy.rpython.lltypesystem.lloperation import llop
 from pypy.rlib.objectmodel import we_are_translated, specialize
 from pypy.rlib import runicode
 from pypy.jit.metainterp.history import AbstractDescr, INT
@@ -25,7 +26,7 @@
     SIZE_UNICHAR = 3
 
     def __init__(self, rtyper, stats=None, translate_support_code=False,
-                 annmixlevel=None):
+                 annmixlevel=None, gcdescr=None):
         self.rtyper = rtyper
         self.translate_support_code = translate_support_code
         self.compiled_functions = []
@@ -35,20 +36,13 @@
             get_size = llmemory.sizeof
         else:
             get_size = rffi.sizeof
-        sizeof_GCREF   = get_size(llmemory.GCREF)
-        sizeof_Signed  = get_size(lltype.Signed )
-        sizeof_Char    = get_size(lltype.Char   )
-        sizeof_UniChar = get_size(lltype.UniChar)
-        self._descr_caches = {
-            ('array', self.SIZE_GCPTR):
-                               ArrayDescr(sizeof_GCREF, self.SIZE_GCPTR),
-            ('array', self.SIZE_INT):
-                               ArrayDescr(sizeof_Signed,  self.SIZE_INT),
-            ('array', self.SIZE_CHAR):
-                               ArrayDescr(sizeof_Char,    self.SIZE_CHAR),
-            ('array', self.SIZE_UNICHAR):
-                               ArrayDescr(sizeof_UniChar, self.SIZE_UNICHAR),
-            }
+        self._arraydescrs = [
+            ArrayDescr(get_size(llmemory.GCREF), self.SIZE_GCPTR),    # 0
+            ArrayDescr(get_size(lltype.Signed),  self.SIZE_INT),      # 1
+            ArrayDescr(get_size(lltype.Char),    self.SIZE_CHAR),     # 2
+            ArrayDescr(get_size(lltype.UniChar), self.SIZE_UNICHAR),  # 3
+            ]
+        self._descr_caches = {}
         self.fielddescr_vtable = self.fielddescrof(rclass.OBJECT, 'typeptr')
         if sys.maxint == 2147483647:
             self.size_of_int = 4
@@ -71,6 +65,19 @@
         self.unicode_index_array = basesize
         self.unicode_index_length = ofs_length
         self.vtable_descr = self.fielddescrof(rclass.OBJECT, 'typeptr')
+        self._ovf_error_instance = self._get_prebuilt_error(OverflowError)
+        self._zer_error_instance = self._get_prebuilt_error(ZeroDivisionError)
+        #
+        # temporary (Boehm only)
+        from pypy.translator.tool.cbuild import ExternalCompilationInfo
+        compilation_info = ExternalCompilationInfo(libraries=['gc'])
+        self.malloc_fn_ptr = rffi.llexternal("GC_malloc",
+                                             [rffi.SIZE_T],
+                                             llmemory.GCREF,
+                                             compilation_info=compilation_info,
+                                             sandboxsafe=True,
+                                             _nowrapper=True)
+        assert rffi.sizeof(rffi.SIZE_T) == self.size_of_int
 
     def setup_once(self):
         if not we_are_translated():
@@ -111,7 +118,7 @@
                                 LLVMJITCompiler.getchararg,    # SIZE_CHAR
                                 LLVMJITCompiler.getunichararg] # SIZE_UNICHAR
         for i in range(len(self.types_by_index)):
-            arraydescr = self._descr_caches['array', i]
+            arraydescr = self._arraydescrs[i]
             (arraydescr.ty_array_ptr,
              self.const_array_index_length,
              self.const_array_index_array) = \
@@ -144,7 +151,10 @@
         self.f_mul_ovf = llvm_rffi.LLVM_Intrinsic_mul_ovf(self.module,
                                                           self.ty_int)
         if we_are_translated():
-            XXX - fix-me
+            addr = llop.get_exception_addr(llmemory.Address)
+            self.exc_type = rffi.cast(rffi.CArrayPtr(lltype.Signed), addr)
+            addr = llop.get_exc_value_addr(llmemory.Address)
+            self.exc_value = rffi.cast(rffi.CArrayPtr(llmemory.GCREF), addr)
         else:
             self.exc_type = lltype.malloc(rffi.CArray(lltype.Signed), 1,
                                           zero=True, flavor='raw')
@@ -163,19 +173,10 @@
         self.const_backup_exc_value = self._make_const(self.backup_exc_value,
                                                        self.ty_char_ptr_ptr)
         #
-        self._setup_prebuilt_error('ovf', OverflowError)
-        self._setup_prebuilt_error('zer', ZeroDivisionError)
+        self._setup_prebuilt_error('ovf')
+        self._setup_prebuilt_error('zer')
         #
         # temporary (Boehm only)
-        from pypy.translator.tool.cbuild import ExternalCompilationInfo
-        compilation_info = ExternalCompilationInfo(libraries=['gc'])
-        self.malloc_fn_ptr = rffi.llexternal("GC_malloc",
-                                             [rffi.SIZE_T],
-                                             llmemory.GCREF,
-                                             compilation_info=compilation_info,
-                                             sandboxsafe=True,
-                                             _nowrapper=True)
-        assert rffi.sizeof(rffi.SIZE_T) == self.size_of_int
         param_types = lltype.malloc(rffi.CArray(llvm_rffi.LLVMTypeRef), 1,
                                     flavor='raw')
         param_types[0] = self.ty_int
@@ -191,7 +192,8 @@
     def _teardown(self):
         llvm_rffi.LLVMDisposeExecutionEngine(self.ee)
 
-    def _setup_prebuilt_error(self, prefix, Class):
+    def _get_prebuilt_error(self, Class):
+        "NOT_RPYTHON"
         if self.rtyper is not None:   # normal case
             bk = self.rtyper.annotator.bookkeeper
             clsdef = bk.getuniqueclassdef(Class)
@@ -202,13 +204,18 @@
             ll_inst = lltype.malloc(rclass.OBJECT)
             ll_inst.typeptr = lltype.malloc(rclass.OBJECT_VTABLE,
                                             immortal=True)
-        setattr(self, '_%s_error_type' % prefix,
+        return ll_inst
+
+    @specialize.arg(1)
+    def _setup_prebuilt_error(self, prefix):
+        ll_inst = getattr(self, '_' + prefix + '_error_instance')
+        setattr(self, '_' + prefix + '_error_type',
                 rffi.cast(lltype.Signed, ll_inst.typeptr))
-        setattr(self, '_%s_error_value' % prefix,
+        setattr(self, '_' + prefix + '_error_value',
                 lltype.cast_opaque_ptr(llmemory.GCREF, ll_inst))
-        setattr(self, 'const_%s_error_type' % prefix,
+        setattr(self, 'const_' + prefix + '_error_type',
                 self._make_const(ll_inst.typeptr, self.ty_char_ptr))
-        setattr(self, 'const_%s_error_value' % prefix,
+        setattr(self, 'const_' + prefix + '_error_value',
                 self._make_const(ll_inst, self.ty_char_ptr))
 
     def _build_ty_array_ptr(self, basesize, ty_item, ofs_length):
@@ -241,7 +248,7 @@
     # ------------------------------
     # Compilation
 
-    def compile_operations(self, loop):
+    def compile_operations(self, loop, _guard_op=None):
         from pypy.jit.backend.llvm.compile import LLVMJITCompiler
         compiler = LLVMJITCompiler(self, loop)
         compiler.compile()
@@ -268,7 +275,7 @@
         assert (value & ~1) == 0, "value is not 0 or 1"
         return llvm_rffi.LLVMConstInt(self.ty_bit, value, True)
 
-    @specialize.argtype(1)
+    @specialize.arglltype(1)
     def _make_const(self, value, ty_result):
         value_as_signed = rffi.cast(lltype.Signed, value)
         llvmconstint = self._make_const_int(value_as_signed)
@@ -358,17 +365,17 @@
             return llmemory.cast_ptr_to_adr(rffi.cast(llmemory.GCREF, x))
 
     def _get_size_index(self, TYPE):
-        if isinstance(TYPE, lltype.Ptr) and TYPE.TO._gckind == 'gc':
-            return self.SIZE_GCPTR
+        if isinstance(TYPE, lltype.Ptr):
+            if TYPE.TO._gckind == 'gc':
+                return self.SIZE_GCPTR
+            else:
+                return self.SIZE_INT
         else:
-            size = symbolic.get_size(TYPE, self.translate_support_code)
-            if size == symbolic.get_size(lltype.Signed,
-                                         self.translate_support_code):
+            if TYPE == lltype.Signed:
                 return self.SIZE_INT
-            elif size == 1:
+            elif TYPE == lltype.Char:
                 return self.SIZE_CHAR
-            elif size == symbolic.get_size(lltype.UniChar,
-                                           self.translate_support_code):
+            elif TYPE == lltype.UniChar:
                 return self.SIZE_UNICHAR
             else:
                 raise BadSizeError(S, fieldname, size)
@@ -400,7 +407,7 @@
         assert self.array_index_array == basesize
         assert self.array_index_length == ofs_length
         itemsize_index = self._get_size_index(A.OF)
-        return self._descr_caches['array', itemsize_index]
+        return self._arraydescrs[itemsize_index]
 
     def calldescrof(self, FUNC, ARGS, RESULT):
         try:

Added: pypy/branch/pyjitpl5-experiments/pypy/jit/backend/llvm/test/test_zrpy_basic.py
==============================================================================
--- (empty file)
+++ pypy/branch/pyjitpl5-experiments/pypy/jit/backend/llvm/test/test_zrpy_basic.py	Tue Jun  9 14:13:15 2009
@@ -0,0 +1,13 @@
+import py
+from pypy.jit.metainterp.test.test_basic import BasicTests
+from pypy.jit.backend.test.support import CCompiledMixin
+from pypy.jit.backend.llvm.runner import LLVMCPU
+
+
+class JitLLVMMixin(CCompiledMixin):
+    CPUClass = LLVMCPU
+
+class TestZRPyBasic(JitLLVMMixin, BasicTests):
+    def setup_class(cls):
+        py.test.skip("in-progress")
+



More information about the Pypy-commit mailing list