[pypy-commit] pypy default: support some combination of flags, I hope it's good enough

fijal noreply at buildbot.pypy.org
Wed Nov 30 17:30:25 CET 2011


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: 
Changeset: r50018:741dd1c718ca
Date: 2011-11-30 18:26 +0200
http://bitbucket.org/pypy/pypy/changeset/741dd1c718ca/

Log:	support some combination of flags, I hope it's good enough

diff --git a/pypy/jit/codewriter/jtransform.py b/pypy/jit/codewriter/jtransform.py
--- a/pypy/jit/codewriter/jtransform.py
+++ b/pypy/jit/codewriter/jtransform.py
@@ -485,10 +485,17 @@
         if op.args[1].value['flavor'] == 'raw':
             d = op.args[1].value.copy()
             d.pop('flavor')
+            add_memory_pressure = d.pop('add_memory_pressure', False)
+            zero = d.pop('zero', False)
             if d:
                 raise UnsupportedMallocFlags(d)
             ARRAY = op.args[0].value
-            return self._do_builtin_call(op, 'raw_malloc',
+            name = 'raw_malloc'
+            if zero:
+                name += '_zero'
+            if add_memory_pressure:
+                name += '_add_memory_pressure'
+            return self._do_builtin_call(op, name,
                                          [op.args[2]],
                                          extra = (ARRAY,),
                                          extrakey = ARRAY)
diff --git a/pypy/jit/codewriter/support.py b/pypy/jit/codewriter/support.py
--- a/pypy/jit/codewriter/support.py
+++ b/pypy/jit/codewriter/support.py
@@ -604,6 +604,23 @@
             return lltype.malloc(ARRAY, n, flavor='raw')
         return _ll_1_raw_malloc
 
+    def build_ll_1_raw_malloc_zero(ARRAY):
+        def _ll_1_raw_malloc(n):
+            return lltype.malloc(ARRAY, n, flavor='raw', zero=True)
+        return _ll_1_raw_malloc
+
+    def build_ll_1_raw_malloc_zero_add_memory_pressure(ARRAY):
+        def _ll_1_raw_malloc(n):
+            return lltype.malloc(ARRAY, n, flavor='raw', zero=True,
+                                 add_memory_pressure=True)
+        return _ll_1_raw_malloc
+
+    def build_ll_1_raw_malloc_add_memory_pressure(ARRAY):
+        def _ll_1_raw_malloc(n):
+            return lltype.malloc(ARRAY, n, flavor='raw',
+                                 add_memory_pressure=True)
+        return _ll_1_raw_malloc
+
     def build_ll_1_raw_free(ARRAY):
         def _ll_1_raw_free(p):
             lltype.free(p, flavor='raw')
diff --git a/pypy/jit/codewriter/test/test_jtransform.py b/pypy/jit/codewriter/test/test_jtransform.py
--- a/pypy/jit/codewriter/test/test_jtransform.py
+++ b/pypy/jit/codewriter/test/test_jtransform.py
@@ -554,6 +554,20 @@
     assert op1.opname == '-live-'
     assert op1.args == []
 
+def test_raw_malloc_zero():
+    S = rffi.CArray(lltype.Signed)
+    v1 = varoftype(lltype.Signed)
+    v = varoftype(lltype.Ptr(S))
+    flags = Constant({'flavor': 'raw', 'zero': True}, lltype.Void)
+    op = SpaceOperation('malloc_varsize', [Constant(S, lltype.Void), flags,
+                                           v1], v)
+    tr = Transformer(FakeCPU(), FakeResidualCallControl())
+    op0, op1 = tr.rewrite_operation(op)
+    assert op0.opname == 'residual_call_ir_i'
+    assert op0.args[0].value == 'raw_malloc_zero'    # pseudo-function as a str
+    assert op1.opname == '-live-'
+    assert op1.args == []
+
 def test_raw_malloc_unsupported_flag():
     S = rffi.CArray(lltype.Signed)
     v1 = varoftype(lltype.Signed)


More information about the pypy-commit mailing list