[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