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

Reply via email to