[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