Author: Maciej Fijalkowski <[email protected]>
Branch: optresult
Changeset: r77961:dc515403d063
Date: 2015-06-08 19:29 +0200
http://bitbucket.org/pypy/pypy/changeset/dc515403d063/

Log:    A fix for preserving pointerness

diff --git a/rpython/jit/backend/llsupport/rewrite.py 
b/rpython/jit/backend/llsupport/rewrite.py
--- a/rpython/jit/backend/llsupport/rewrite.py
+++ b/rpython/jit/backend/llsupport/rewrite.py
@@ -568,7 +568,7 @@
             if self.gc_ll_descr.can_use_nursery_malloc(total_size):
                 # if the total size is still reasonable, merge it
                 self._op_malloc_nursery.setarg(0, ConstInt(total_size))
-                op = ResOperation(rop.INT_ADD,
+                op = ResOperation(rop.NURSERY_PTR_INCREMENT,
                                   [self._v_last_malloced_nursery,
                                    ConstInt(self._previous_size)])
                 self.replace_op_with(v_result, op)
diff --git a/rpython/jit/backend/llsupport/test/test_rewrite.py 
b/rpython/jit/backend/llsupport/test/test_rewrite.py
--- a/rpython/jit/backend/llsupport/test/test_rewrite.py
+++ b/rpython/jit/backend/llsupport/test/test_rewrite.py
@@ -332,9 +332,9 @@
             p0 = call_malloc_nursery(   \
                                %(sdescr.size + tdescr.size + sdescr.size)d)
             setfield_gc(p0, 1234, descr=tiddescr)
-            p1 = int_add(p0, %(sdescr.size)d)
+            p1 = nursery_ptr_increment(p0, %(sdescr.size)d)
             setfield_gc(p1, 5678, descr=tiddescr)
-            p2 = int_add(p1, %(tdescr.size)d)
+            p2 = nursery_ptr_increment(p1, %(tdescr.size)d)
             setfield_gc(p2, 1234, descr=tiddescr)
             zero_ptr_field(p1, %(tdescr.gc_fielddescrs[0].offset)s)
             jump()
@@ -366,7 +366,7 @@
                                 %(sdescr.size +                        \
                                   adescr.basesize + 10 * adescr.itemsize)d)
             setfield_gc(p0, 1234, descr=tiddescr)
-            p1 = int_add(p0, %(sdescr.size)d)
+            p1 = nursery_ptr_increment(p0, %(sdescr.size)d)
             setfield_gc(p1, 4321, descr=tiddescr)
             setfield_gc(p1, 10, descr=alendescr)
             jump()
@@ -398,13 +398,13 @@
             p0 = call_malloc_nursery(%(4 * (bdescr.basesize + 8))d)
             setfield_gc(p0, 8765, descr=tiddescr)
             setfield_gc(p0, 5, descr=blendescr)
-            p1 = int_add(p0, %(bdescr.basesize + 8)d)
+            p1 = nursery_ptr_increment(p0, %(bdescr.basesize + 8)d)
             setfield_gc(p1, 8765, descr=tiddescr)
             setfield_gc(p1, 5, descr=blendescr)
-            p2 = int_add(p1, %(bdescr.basesize + 8)d)
+            p2 = nursery_ptr_increment(p1, %(bdescr.basesize + 8)d)
             setfield_gc(p2, 8765, descr=tiddescr)
             setfield_gc(p2, 5, descr=blendescr)
-            p3 = int_add(p2, %(bdescr.basesize + 8)d)
+            p3 = nursery_ptr_increment(p2, %(bdescr.basesize + 8)d)
             setfield_gc(p3, 8765, descr=tiddescr)
             setfield_gc(p3, 5, descr=blendescr)
             jump()
@@ -420,7 +420,7 @@
             []
             p0 = call_malloc_nursery(%(4*WORD)d)
             setfield_gc(p0, 9000, descr=tiddescr)
-            p1 = int_add(p0, %(2*WORD)d)
+            p1 = nursery_ptr_increment(p0, %(2*WORD)d)
             setfield_gc(p1, 9000, descr=tiddescr)
             jump()
         """)
@@ -504,7 +504,7 @@
                               %(2 * (bdescr.basesize + 104))d)
             setfield_gc(p0, 8765, descr=tiddescr)
             setfield_gc(p0, 101, descr=blendescr)
-            p1 = int_add(p0, %(bdescr.basesize + 104)d)
+            p1 = nursery_ptr_increment(p0, %(bdescr.basesize + 104)d)
             setfield_gc(p1, 8765, descr=tiddescr)
             setfield_gc(p1, 102, descr=blendescr)
             p2 = call_malloc_nursery(    \
@@ -571,7 +571,7 @@
             setfield_gc(p0, %(strdescr.tid)d, descr=tiddescr)
             setfield_gc(p0, 14, descr=strlendescr)
             setfield_gc(p0, 0, descr=strhashdescr)
-            p1 = int_add(p0, %(strdescr.basesize + 16 * strdescr.itemsize)d)
+            p1 = nursery_ptr_increment(p0, %(strdescr.basesize + 16 * 
strdescr.itemsize)d)
             setfield_gc(p1, %(unicodedescr.tid)d, descr=tiddescr)
             setfield_gc(p1, 10, descr=unicodelendescr)
             setfield_gc(p1, 0, descr=unicodehashdescr)
@@ -731,7 +731,7 @@
             []
             p0 = call_malloc_nursery(%(tdescr.size + sdescr.size)d)
             setfield_gc(p0, 5678, descr=tiddescr)
-            p1 = int_add(p0, %(tdescr.size)d)
+            p1 = nursery_ptr_increment(p0, %(tdescr.size)d)
             setfield_gc(p1, 1234, descr=tiddescr)
             # <<<no cond_call_gc_wb here>>>
             setfield_gc(p0, p1, descr=tzdescr)
diff --git a/rpython/jit/metainterp/executor.py 
b/rpython/jit/metainterp/executor.py
--- a/rpython/jit/metainterp/executor.py
+++ b/rpython/jit/metainterp/executor.py
@@ -378,6 +378,7 @@
                          rop.CALL_MALLOC_NURSERY,
                          rop.CALL_MALLOC_NURSERY_VARSIZE,
                          rop.CALL_MALLOC_NURSERY_VARSIZE_FRAME,
+                         rop.NURSERY_PTR_INCREMENT,
                          rop.LABEL,
                          ):      # list of opcodes never executed by pyjitpl
                 continue
diff --git a/rpython/jit/metainterp/resoperation.py 
b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -695,6 +695,7 @@
     'PTR_NE/2b/i',
     'INSTANCE_PTR_EQ/2b/i',
     'INSTANCE_PTR_NE/2b/i',
+    'NURSERY_PTR_INCREMENT/2/r',
     #
     'ARRAYLEN_GC/1d/i',
     'STRLEN/1/i',
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to