[pypy-commit] pypy optresult-unroll: oops, don't emit write barriers for ints

fijal noreply at buildbot.pypy.org
Mon Aug 31 10:54:29 CEST 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r79312:e0a87d87e411
Date: 2015-08-31 10:54 +0200
http://bitbucket.org/pypy/pypy/changeset/e0a87d87e411/

Log:	oops, don't emit write barriers for ints

diff --git a/rpython/jit/backend/llsupport/descr.py b/rpython/jit/backend/llsupport/descr.py
--- a/rpython/jit/backend/llsupport/descr.py
+++ b/rpython/jit/backend/llsupport/descr.py
@@ -67,7 +67,7 @@
         assert self.tid != 0
         return self.tid
 
-def get_size_descr(gccache, STRUCT, vtable):
+def get_size_descr(gccache, STRUCT, vtable=lltype.nullptr(rclass.OBJECT_VTABLE)):
     cache = gccache._cache_size
     assert not isinstance(vtable, bool)
     try:
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
@@ -621,7 +621,7 @@
         val = op.getarg(0)
         if not self.write_barrier_applied(val):
             v = op.getarg(1)
-            if (not isinstance(v, ConstPtr) or
+            if (v.type == 'r' and not isinstance(v, ConstPtr) or
                 rgc.needs_write_barrier(v.value)):
                 self.gen_write_barrier(val)
                 #op = op.copy_and_change(rop.SETFIELD_RAW)
@@ -631,7 +631,7 @@
         val = op.getarg(0)
         if not self.write_barrier_applied(val):
             v = op.getarg(2)
-            if (not isinstance(v, ConstPtr) or
+            if (v.type == 'r' and not isinstance(v, ConstPtr) or
                 rgc.needs_write_barrier(v.value)):
                 self.gen_write_barrier_array(val, op.getarg(1))
                 #op = op.copy_and_change(rop.SET{ARRAYITEM,INTERIORFIELD}_RAW)
diff --git a/rpython/jit/backend/llsupport/test/test_gc.py b/rpython/jit/backend/llsupport/test/test_gc.py
--- a/rpython/jit/backend/llsupport/test/test_gc.py
+++ b/rpython/jit/backend/llsupport/test/test_gc.py
@@ -23,7 +23,7 @@
     #
     # ---------- gc_malloc ----------
     S = lltype.GcStruct('S', ('x', lltype.Signed))
-    sizedescr = descr.get_size_descr(gc_ll_descr, S, False)
+    sizedescr = descr.get_size_descr(gc_ll_descr, S)
     p = gc_ll_descr.gc_malloc(sizedescr)
     assert record == [(sizedescr.size, p)]
     del record[:]
@@ -143,7 +143,7 @@
 
     def test_gc_malloc(self):
         S = lltype.GcStruct('S', ('x', lltype.Signed))
-        sizedescr = descr.get_size_descr(self.gc_ll_descr, S, False)
+        sizedescr = descr.get_size_descr(self.gc_ll_descr, S)
         p = self.gc_ll_descr.gc_malloc(sizedescr)
         assert lltype.typeOf(p) == llmemory.GCREF
         assert self.llop1.record == [("fixedsize", repr(sizedescr.size),
diff --git a/rpython/jit/backend/llsupport/test/test_gc_integration.py b/rpython/jit/backend/llsupport/test/test_gc_integration.py
--- a/rpython/jit/backend/llsupport/test/test_gc_integration.py
+++ b/rpython/jit/backend/llsupport/test/test_gc_integration.py
@@ -754,7 +754,7 @@
 
     def test_malloc_1(self):
         cpu = self.cpu
-        sizeof = cpu.sizeof(self.S, False)
+        sizeof = cpu.sizeof(self.S, None)
         sizeof.tid = 0
         size = sizeof.size
         loop = self.parse("""
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
@@ -29,13 +29,13 @@
     def check_rewrite(self, frm_operations, to_operations, **namespace):
         S = lltype.GcStruct('S', ('x', lltype.Signed),
                                  ('y', lltype.Signed))
-        sdescr = get_size_descr(self.gc_ll_descr, S, False)
+        sdescr = get_size_descr(self.gc_ll_descr, S)
         sdescr.tid = 1234
         #
         T = lltype.GcStruct('T', ('y', lltype.Signed),
                                  ('z', lltype.Ptr(S)),
                                  ('t', lltype.Signed))
-        tdescr = get_size_descr(self.gc_ll_descr, T, False)
+        tdescr = get_size_descr(self.gc_ll_descr, T)
         tdescr.tid = 5678
         tzdescr = get_field_descr(self.gc_ll_descr, T, 'z')
         #
@@ -55,7 +55,7 @@
         clendescr = cdescr.lendescr
         #
         E = lltype.GcStruct('Empty')
-        edescr = get_size_descr(self.gc_ll_descr, E, False)
+        edescr = get_size_descr(self.gc_ll_descr, E)
         edescr.tid = 9000
         #
         vtable_descr = self.gc_ll_descr.fielddescr_vtable
@@ -1045,13 +1045,13 @@
         self.check_rewrite("""
             []
             p0 = new(descr=tdescr)
-            p1 = getfield_gc(p0, descr=tdescr)
+            p1 = getfield_gc_r(p0, descr=tdescr)
             jump(p1)
         """, """
             []
             p0 = call_malloc_nursery(%(tdescr.size)d)
             setfield_gc(p0, 5678, descr=tiddescr)
             zero_ptr_field(p0, %(tdescr.gc_fielddescrs[0].offset)s)
-            p1 = getfield_gc(p0, descr=tdescr)
+            p1 = getfield_gc_r(p0, descr=tdescr)
             jump(p1)
         """)
diff --git a/rpython/tool/jitlogparser/parser.py b/rpython/tool/jitlogparser/parser.py
--- a/rpython/tool/jitlogparser/parser.py
+++ b/rpython/tool/jitlogparser/parser.py
@@ -156,8 +156,8 @@
     def box_for_var(self, res):
         return res
 
-    def create_op(self, opnum, args, res, descr, fail_args):
-        return self.Op(intern(opname[opnum].lower()), args, res, descr, fail_args)
+    def create_op(self, opnum, args, descr, fail_args):
+        return self.Op(intern(opname[opnum].lower()), args, None, descr, fail_args)
 
 
 


More information about the pypy-commit mailing list