Author: Maciej Fijalkowski <fij...@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) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit