Author: Armin Rigo <[email protected]>
Branch: py3k
Changeset: r86429:e9ed73a4cb14
Date: 2016-08-23 00:40 +0200
http://bitbucket.org/pypy/pypy/changeset/e9ed73a4cb14/
Log: hg merge default
diff --git a/rpython/jit/backend/llgraph/runner.py
b/rpython/jit/backend/llgraph/runner.py
--- a/rpython/jit/backend/llgraph/runner.py
+++ b/rpython/jit/backend/llgraph/runner.py
@@ -833,9 +833,6 @@
result_adr = llmemory.cast_ptr_to_adr(struct.typeptr)
return heaptracker.adr2int(result_adr)
- def bh_new_raw_buffer(self, size):
- return lltype.malloc(rffi.CCHARP.TO, size, flavor='raw')
-
# vector operations
vector_arith_code = """
def bh_vec_{0}_{1}(self, vx, vy, count):
diff --git a/rpython/jit/backend/llsupport/llmodel.py
b/rpython/jit/backend/llsupport/llmodel.py
--- a/rpython/jit/backend/llsupport/llmodel.py
+++ b/rpython/jit/backend/llsupport/llmodel.py
@@ -757,9 +757,6 @@
self.write_int_at_mem(res, self.vtable_offset, WORD,
sizedescr.get_vtable())
return res
- def bh_new_raw_buffer(self, size):
- return lltype.malloc(rffi.CCHARP.TO, size, flavor='raw')
-
def bh_classof(self, struct):
struct = lltype.cast_opaque_ptr(rclass.OBJECTPTR, struct)
result_adr = llmemory.cast_ptr_to_adr(struct.typeptr)
diff --git a/rpython/jit/backend/model.py b/rpython/jit/backend/model.py
--- a/rpython/jit/backend/model.py
+++ b/rpython/jit/backend/model.py
@@ -229,8 +229,6 @@
raise NotImplementedError
def bh_newunicode(self, length):
raise NotImplementedError
- def bh_new_raw_buffer(self, size):
- raise NotImplementedError
def bh_arraylen_gc(self, array, arraydescr):
raise NotImplementedError
diff --git a/rpython/jit/metainterp/optimizeopt/info.py
b/rpython/jit/metainterp/optimizeopt/info.py
--- a/rpython/jit/metainterp/optimizeopt/info.py
+++ b/rpython/jit/metainterp/optimizeopt/info.py
@@ -367,8 +367,9 @@
class RawBufferPtrInfo(AbstractRawPtrInfo):
buffer = None
-
- def __init__(self, cpu, size=-1):
+
+ def __init__(self, cpu, func, size=-1):
+ self.func = func
self.size = size
if self.size != -1:
self.buffer = RawBuffer(cpu, None)
@@ -425,7 +426,8 @@
@specialize.argtype(1)
def visitor_dispatch_virtual_type(self, visitor):
buffer = self._get_buffer()
- return visitor.visit_vrawbuffer(self.size,
+ return visitor.visit_vrawbuffer(self.func,
+ self.size,
buffer.offsets[:],
buffer.descrs[:])
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -1770,7 +1770,7 @@
def test_virtual_raw_malloc_basic(self):
ops = """
[i1]
- i2 = call_i('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i(12345, 10, descr=raw_malloc_descr) # 12345 = malloc func
guard_no_exception() []
setarrayitem_raw(i2, 0, i1, descr=rawarraydescr)
i3 = getarrayitem_raw_i(i2, 0, descr=rawarraydescr)
@@ -1787,7 +1787,7 @@
ops = """
[i1]
i5 = int_mul(10, 1)
- i2 = call_i('malloc', i5, descr=raw_malloc_descr)
+ i2 = call_i(12345, i5, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i2, 0, i1, descr=rawarraydescr)
i3 = getarrayitem_raw_i(i2, 0, descr=rawarraydescr)
@@ -1803,7 +1803,7 @@
def test_virtual_raw_malloc_force(self):
ops = """
[i1]
- i2 = call_i('malloc', 20, descr=raw_malloc_descr)
+ i2 = call_i(12345, 20, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i2, 0, i1, descr=rawarraydescr_char)
setarrayitem_raw(i2, 2, 456, descr=rawarraydescr_char)
@@ -1817,7 +1817,7 @@
expected = """
[i1]
label(i1)
- i2 = call_i('malloc', 20, descr=raw_malloc_descr)
+ i2 = call_i(12345, 20, descr=raw_malloc_descr)
check_memory_error(i2)
raw_store(i2, 0, i1, descr=rawarraydescr_char)
raw_store(i2, 1, 123, descr=rawarraydescr_char)
@@ -1832,7 +1832,7 @@
def test_virtual_raw_malloc_invalid_write_force(self):
ops = """
[i1]
- i2 = call_i('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i(12345, 10, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i2, 0, i1, descr=rawarraydescr)
label(i1) # we expect the buffer to be forced *after* the label
@@ -1843,7 +1843,7 @@
expected = """
[i1]
label(i1)
- i2 = call_i('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i(12345, 10, descr=raw_malloc_descr)
check_memory_error(i2)
raw_store(i2, 0, i1, descr=rawarraydescr)
setarrayitem_raw(i2, 2, 456, descr=rawarraydescr_char)
@@ -1855,7 +1855,7 @@
def test_virtual_raw_malloc_invalid_read_force(self):
ops = """
[i1]
- i2 = call_i('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i(12345, 10, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i2, 0, i1, descr=rawarraydescr)
label(i1) # we expect the buffer to be forced *after* the label
@@ -1866,7 +1866,7 @@
expected = """
[i1]
label(i1)
- i2 = call_i('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i(12345, 10, descr=raw_malloc_descr)
check_memory_error(i2)
raw_store(i2, 0, i1, descr=rawarraydescr)
i3 = getarrayitem_raw_i(i2, 0, descr=rawarraydescr_char)
@@ -1878,7 +1878,7 @@
def test_virtual_raw_slice(self):
ops = """
[i0, i1]
- i2 = call_i('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i(12345, 10, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i2, 0, 42, descr=rawarraydescr_char)
i3 = int_add(i2, 1) # get a slice of the original buffer
@@ -1898,7 +1898,7 @@
def test_virtual_raw_slice_of_a_raw_slice(self):
ops = """
[i0, i1]
- i2 = call_i('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i(12345, 10, descr=raw_malloc_descr)
guard_no_exception() []
i3 = int_add(i2, 1) # get a slice of the original buffer
i4 = int_add(i3, 1) # get a slice of a slice
@@ -1916,7 +1916,7 @@
def test_virtual_raw_slice_force(self):
ops = """
[i0, i1]
- i2 = call_i('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i(12345, 10, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i2, 0, 42, descr=rawarraydescr_char)
i3 = int_add(i2, 1) # get a slice of the original buffer
@@ -1929,7 +1929,7 @@
[i0, i1]
label(i0, i1)
# these ops are generated by VirtualRawBufferValue._really_force
- i2 = call_i('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i(12345, 10, descr=raw_malloc_descr)
check_memory_error(i2)
raw_store(i2, 0, 42, descr=rawarraydescr_char)
raw_store(i2, 5, 4242, descr=rawarraydescr_char)
@@ -1946,7 +1946,7 @@
i1 = getarrayitem_raw_i(i0, 0, descr=rawarraydescr)
i2 = int_add(i1, 1)
call_n('free', i0, descr=raw_free_descr)
- i3 = call_i('malloc', 10, descr=raw_malloc_descr)
+ i3 = call_i(12345, 10, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i3, 0, i2, descr=rawarraydescr)
label(i2)
@@ -1958,7 +1958,7 @@
i2 = int_add(i1, 1)
call_n('free', i0, descr=raw_free_descr)
label(i2)
- i3 = call_i('malloc', 10, descr=raw_malloc_descr)
+ i3 = call_i(12345, 10, descr=raw_malloc_descr)
check_memory_error(i3)
raw_store(i3, 0, i2, descr=rawarraydescr)
jump(i3)
@@ -1968,7 +1968,7 @@
def test_virtual_raw_store_raw_load(self):
ops = """
[i1]
- i0 = call_i('malloc', 10, descr=raw_malloc_descr)
+ i0 = call_i(12345, 10, descr=raw_malloc_descr)
guard_no_exception() []
raw_store(i0, 0, i1, descr=rawarraydescr)
i2 = raw_load_i(i0, 0, descr=rawarraydescr)
@@ -1986,7 +1986,7 @@
def test_virtual_raw_store_getarrayitem_raw(self):
ops = """
[f1]
- i0 = call_i('malloc', 16, descr=raw_malloc_descr)
+ i0 = call_i(12345, 16, descr=raw_malloc_descr)
guard_no_exception() []
raw_store(i0, 8, f1, descr=rawarraydescr_float)
f2 = getarrayitem_raw_f(i0, 1, descr=rawarraydescr_float)
@@ -2004,7 +2004,7 @@
def test_virtual_setarrayitem_raw_raw_load(self):
ops = """
[f1]
- i0 = call_i('malloc', 16, descr=raw_malloc_descr)
+ i0 = call_i(12345, 16, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i0, 1, f1, descr=rawarraydescr_float)
f2 = raw_load_f(i0, 8, descr=rawarraydescr_float)
@@ -2022,7 +2022,7 @@
def test_virtual_raw_buffer_forced_but_slice_not_forced(self):
ops = """
[f1]
- i0 = call_i('malloc', 16, descr=raw_malloc_descr)
+ i0 = call_i(12345, 16, descr=raw_malloc_descr)
guard_no_exception() []
i1 = int_add(i0, 8)
escape_n(i0)
@@ -2031,7 +2031,7 @@
"""
expected = """
[f1]
- i0 = call_i('malloc', 16, descr=raw_malloc_descr)
+ i0 = call_i(12345, 16, descr=raw_malloc_descr)
check_memory_error(i0)
escape_n(i0)
i1 = int_add(i0, 8)
@@ -8886,7 +8886,7 @@
def test_resume_forced_raw_ptr(self):
ops = """
[i0]
- i = call_i('malloc', 10, descr=raw_malloc_descr)
+ i = call_i(12345, 10, descr=raw_malloc_descr)
guard_no_exception() []
is = int_add(i, 8)
escape_n(i)
@@ -8898,7 +8898,7 @@
"""
expected = """
[i0]
- i = call_i('malloc', 10, descr=raw_malloc_descr)
+ i = call_i(12345, 10, descr=raw_malloc_descr)
check_memory_error(i)
escape_n(i)
i1 = int_add(i0, 1)
@@ -8966,7 +8966,7 @@
def test_pending_setfield_delayed_malloc(self):
ops = """
[i0, p0]
- i2 = call_i('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i(12345, 10, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i2, 0, 13, descr=rawarraydescr)
setfield_gc(p0, i2, descr=valuedescr)
@@ -8988,14 +8988,14 @@
def test_raw_buffer_ptr_info_intbounds_bug(self):
ops = """
[]
- i2 = call_i('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i(12345, 10, descr=raw_malloc_descr)
guard_no_exception() []
guard_value(i2, 12345) []
jump()
"""
expected = """
[]
- i2 = call_i('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i(12345, 10, descr=raw_malloc_descr)
check_memory_error(i2)
guard_value(i2, 12345) []
jump()
diff --git a/rpython/jit/metainterp/optimizeopt/virtualize.py
b/rpython/jit/metainterp/optimizeopt/virtualize.py
--- a/rpython/jit/metainterp/optimizeopt/virtualize.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualize.py
@@ -45,7 +45,8 @@
return opinfo
def make_virtual_raw_memory(self, size, source_op):
- opinfo = info.RawBufferPtrInfo(self.optimizer.cpu, size)
+ func = source_op.getarg(0).getint()
+ opinfo = info.RawBufferPtrInfo(self.optimizer.cpu, func, size)
newop = self.replace_op_with(source_op, source_op.getopnum(),
args=[source_op.getarg(0),
ConstInt(size)])
newop.set_forwarded(opinfo)
diff --git a/rpython/jit/metainterp/resume.py b/rpython/jit/metainterp/resume.py
--- a/rpython/jit/metainterp/resume.py
+++ b/rpython/jit/metainterp/resume.py
@@ -364,8 +364,8 @@
def visit_varraystruct(self, arraydescr, size, fielddescrs):
return VArrayStructInfo(arraydescr, size, fielddescrs)
- def visit_vrawbuffer(self, size, offsets, descrs):
- return VRawBufferInfo(size, offsets, descrs)
+ def visit_vrawbuffer(self, func, size, offsets, descrs):
+ return VRawBufferInfo(func, size, offsets, descrs)
def visit_vrawslice(self, offset):
return VRawSliceInfo(offset)
@@ -703,7 +703,8 @@
class VRawBufferInfo(VAbstractRawInfo):
- def __init__(self, size, offsets, descrs):
+ def __init__(self, func, size, offsets, descrs):
+ self.func = func
self.size = size
self.offsets = offsets
self.descrs = descrs
@@ -711,7 +712,7 @@
@specialize.argtype(1)
def allocate_int(self, decoder, index):
length = len(self.fieldnums)
- buffer = decoder.allocate_raw_buffer(self.size)
+ buffer = decoder.allocate_raw_buffer(self.func, self.size)
decoder.virtuals_cache.set_int(index, buffer)
for i in range(len(self.offsets)):
offset = self.offsets[i]
@@ -1130,9 +1131,13 @@
lengthbox)
return self.metainterp.execute_new_array(arraydescr, lengthbox)
- def allocate_raw_buffer(self, size):
+ def allocate_raw_buffer(self, func, size):
cic = self.metainterp.staticdata.callinfocollection
- calldescr, func =
cic.callinfo_for_oopspec(EffectInfo.OS_RAW_MALLOC_VARSIZE_CHAR)
+ calldescr, _ =
cic.callinfo_for_oopspec(EffectInfo.OS_RAW_MALLOC_VARSIZE_CHAR)
+ # Can't use 'func' from callinfo_for_oopspec(), because we have
+ # several variants (zero/non-zero, memory-pressure or not, etc.)
+ # and we have to pick the correct one here; that's why we save
+ # it in the VRawBufferInfo.
return self.metainterp.execute_and_record_varargs(
rop.CALL_I, [ConstInt(func), ConstInt(size)], calldescr)
@@ -1461,10 +1466,11 @@
def allocate_string(self, length):
return self.cpu.bh_newstr(length)
- def allocate_raw_buffer(self, size):
- buffer = self.cpu.bh_new_raw_buffer(size)
- adr = llmemory.cast_ptr_to_adr(buffer)
- return llmemory.cast_adr_to_int(adr, "symbolic")
+ def allocate_raw_buffer(self, func, size):
+ from rpython.jit.codewriter import heaptracker
+ cic = self.callinfocollection
+ calldescr, _ =
cic.callinfo_for_oopspec(EffectInfo.OS_RAW_MALLOC_VARSIZE_CHAR)
+ return self.cpu.bh_call_i(func, [size], None, None, calldescr)
def string_setitem(self, str, index, charnum):
char = self.decode_int(charnum)
diff --git a/rpython/jit/metainterp/walkvirtual.py
b/rpython/jit/metainterp/walkvirtual.py
--- a/rpython/jit/metainterp/walkvirtual.py
+++ b/rpython/jit/metainterp/walkvirtual.py
@@ -17,7 +17,7 @@
def visit_varraystruct(self, arraydescr, fielddescrs):
raise NotImplementedError("abstract base class")
- def visit_vrawbuffer(self, size, offsets, descrs):
+ def visit_vrawbuffer(self, func, size, offsets, descrs):
raise NotImplementedError("abstract base class")
def visit_vrawslice(self, offset):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit