[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