[pypy-svn] r75763 - in pypy/trunk/pypy/jit/codewriter: . test

fijal at codespeak.net fijal at codespeak.net
Fri Jul 2 14:56:49 CEST 2010


Author: fijal
Date: Fri Jul  2 14:56:47 2010
New Revision: 75763

Modified:
   pypy/trunk/pypy/jit/codewriter/jtransform.py
   pypy/trunk/pypy/jit/codewriter/support.py
   pypy/trunk/pypy/jit/codewriter/test/test_codewriter.py
Log:
Start writing support for raw allocs in codewriter


Modified: pypy/trunk/pypy/jit/codewriter/jtransform.py
==============================================================================
--- pypy/trunk/pypy/jit/codewriter/jtransform.py	(original)
+++ pypy/trunk/pypy/jit/codewriter/jtransform.py	Fri Jul  2 14:56:47 2010
@@ -403,7 +403,12 @@
             log.WARNING('ignoring hint %r at %r' % (hints, self.graph))
 
     def rewrite_op_malloc_varsize(self, op):
-        assert op.args[1].value == {'flavor': 'gc'}
+        if op.args[1].value['flavor'] == 'raw':
+            ARRAY = op.args[0].value
+            return self._do_builtin_call(op, 'raw_malloc',
+                                         [op.args[2]],
+                                         extra = (ARRAY,),
+                                         extrakey = ARRAY)
         if op.args[0].value == rstr.STR:
             return SpaceOperation('newstr', [op.args[2]], op.result)
         elif op.args[0].value == rstr.UNICODE:

Modified: pypy/trunk/pypy/jit/codewriter/support.py
==============================================================================
--- pypy/trunk/pypy/jit/codewriter/support.py	(original)
+++ pypy/trunk/pypy/jit/codewriter/support.py	Fri Jul  2 14:56:47 2010
@@ -282,6 +282,9 @@
 
     # ---------- malloc with del ----------
 
+    def _ll_2_raw_malloc(TP, size):
+        return lltype.malloc(TP, size, flavor='raw')
+
     def build_ll_0_alloc_with_del(RESULT, vtable):
         def _ll_0_alloc_with_del():
             p = lltype.malloc(RESULT.TO)
@@ -289,6 +292,10 @@
             return p
         return _ll_0_alloc_with_del
 
+    def build_ll_1_raw_malloc(ARRAY):
+        def _ll_1_raw_malloc(n):
+            return lltype.malloc(ARRAY, n, flavor='raw')
+        return _ll_1_raw_malloc
 
 class OOtypeHelpers:
 

Modified: pypy/trunk/pypy/jit/codewriter/test/test_codewriter.py
==============================================================================
--- pypy/trunk/pypy/jit/codewriter/test/test_codewriter.py	(original)
+++ pypy/trunk/pypy/jit/codewriter/test/test_codewriter.py	Fri Jul  2 14:56:47 2010
@@ -2,7 +2,7 @@
 from pypy.jit.codewriter.codewriter import CodeWriter
 from pypy.jit.codewriter import support
 from pypy.jit.metainterp.history import AbstractDescr
-from pypy.rpython.lltypesystem import lltype, llmemory
+from pypy.rpython.lltypesystem import lltype, llmemory, rffi
 
 class FakeCallDescr(AbstractDescr):
     def __init__(self, FUNC, ARGS, RESULT, effectinfo=None):
@@ -157,3 +157,22 @@
     #
     s = jitdriver_sd.mainjitcode.dump()
     assert "inline_call_ir_i <JitCode '_ll_1_int_abs__Signed'>" in s
+
+def test_raw_malloc_and_access():
+    TP = rffi.CArray(lltype.Signed)
+    
+    def f(n):
+        a = lltype.malloc(TP, n, flavor='raw')
+        #a[0] = n
+        #res = a[0]
+        #lltype.free(a, flavor='raw')
+        #return res
+
+    rtyper = support.annotate(f, [35])
+    jitdriver_sd = FakeJitDriverSD(rtyper.annotator.translator.graphs[0])
+    cw = CodeWriter(FakeCPU(rtyper), [jitdriver_sd])
+    cw.find_all_graphs(FakePolicy())
+    cw.make_jitcodes(verbose=True)
+    #
+    s = jitdriver_sd.mainjitcode.dump()
+    assert 'residual_call_ir_i $<* fn _ll_1_raw_malloc__Signed>' in s



More information about the Pypy-commit mailing list