Author: Armin Rigo <ar...@tunes.org> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit