[pypy-commit] pypy default: Fix the missing case of raw_free(track_allocation=False).

arigo noreply at buildbot.pypy.org
Wed Dec 14 20:41:09 CET 2011


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r50514:6e98be6147f6
Date: 2011-12-14 18:17 +0100
http://bitbucket.org/pypy/pypy/changeset/6e98be6147f6/

Log:	Fix the missing case of raw_free(track_allocation=False).

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
@@ -536,11 +536,15 @@
         d = op.args[1].value.copy()
         assert d['flavor'] == 'raw'
         d.pop('flavor')
+        track_allocation = d.pop('track_allocation', True)
         if d:
             raise UnsupportedMallocFlags(d)
-        ARRAY = op.args[0].concretetype.TO
-        return self._do_builtin_call(op, 'raw_free', [op.args[0]],
-                                     extra = (ARRAY,), extrakey = ARRAY)
+        STRUCT = op.args[0].concretetype.TO
+        name = 'raw_free'
+        if not track_allocation:
+            name += '_no_track_allocation'
+        return self._do_builtin_call(op, name, [op.args[0]],
+                                     extra = (STRUCT,), extrakey = STRUCT)
 
     def rewrite_op_getarrayitem(self, op):
         ARRAY = op.args[0].concretetype.TO
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
@@ -605,7 +605,8 @@
         def build_ll_1_raw_malloc_varsize(ARRAY):
             def _ll_1_raw_malloc_varsize(n):
                 return lltype.malloc(ARRAY, n, flavor='raw', zero=zero,
-                                     add_memory_pressure=add_memory_pressure)
+                                     add_memory_pressure=add_memory_pressure,
+                                     track_allocation=track_allocation)
             return _ll_1_raw_malloc_varsize
         return build_ll_1_raw_malloc_varsize
 
@@ -632,7 +633,8 @@
         def build_ll_0_raw_malloc_fixedsize(STRUCT):
             def _ll_0_raw_malloc_fixedsize():
                 return lltype.malloc(STRUCT, flavor='raw', zero=zero,
-                                     add_memory_pressure=add_memory_pressure)
+                                     add_memory_pressure=add_memory_pressure,
+                                     track_allocation=track_allocation)
             return _ll_0_raw_malloc_fixedsize
         return build_ll_0_raw_malloc_fixedsize
 
@@ -653,10 +655,19 @@
     build_ll_0_raw_malloc_fixedsize_add_memory_pressure_no_track_allocation = (
         build_raw_malloc_fixedsize_builder(add_memory_pressure=True, track_allocation=False))
 
-    def build_ll_1_raw_free(ARRAY):
-        def _ll_1_raw_free(p):
-            lltype.free(p, flavor='raw')
-        return _ll_1_raw_free
+    def build_raw_free_builder(track_allocation=True):
+        def build_ll_1_raw_free(ARRAY):
+            def _ll_1_raw_free(p):
+                lltype.free(p, flavor='raw',
+                            track_allocation=track_allocation)
+            return _ll_1_raw_free
+        return build_ll_1_raw_free
+
+    build_ll_1_raw_free = (
+        build_raw_free_builder())
+    build_ll_1_raw_free_no_track_allocation = (
+        build_raw_free_builder(track_allocation=False))
+
 
 class OOtypeHelpers:
 
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
@@ -590,6 +590,23 @@
     assert op1.opname == '-live-'
     assert op1.args == []
 
+def test_raw_free():
+    S = lltype.Struct('dummy', ('x', lltype.Signed))
+    for flag in [True, False]:
+        flags = Constant({'flavor': 'raw', 'track_allocation': flag},
+                         lltype.Void)
+        op = SpaceOperation('free', [varoftype(lltype.Ptr(S)), flags],
+                            varoftype(lltype.Void))
+        tr = Transformer(FakeCPU(), FakeResidualCallControl())
+        op0, op1 = tr.rewrite_operation(op)
+        assert op0.opname == 'residual_call_ir_v'
+        if flag:
+            pseudo_op_name = 'raw_free'
+        else:
+            pseudo_op_name = 'raw_free_no_track_allocation'
+        assert op0.args[0].value == pseudo_op_name   # pseudo-function as a str
+        assert op1.opname == '-live-'
+
 def test_rename_on_links():
     v1 = Variable()
     v2 = Variable(); v2.concretetype = llmemory.Address


More information about the pypy-commit mailing list