Author: Armin Rigo <ar...@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 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit