Author: Armin Rigo <[email protected]>
Branch:
Changeset: r81402:b697480a86fb
Date: 2015-12-20 09:27 +0100
http://bitbucket.org/pypy/pypy/changeset/b697480a86fb/
Log: Kill the last bits of ZERO_PTR_FIELD that are still there but never
used (this used to be an operation generated by rewrite.py: it is
never produced in the front-end, so rewrite.py doesn't need to
handle it as input)
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
@@ -296,13 +296,6 @@
self.cpu.translate_support_code)
self.emit_gc_store_or_indexed(op, op.getarg(0), op.getarg(1),
op.getarg(2),
itemsize, itemsize, basesize)
- elif op.getopnum() == rop.ZERO_PTR_FIELD:
- ofs = op.getarg(1).getint()
- size = WORD
- index_box = ConstInt(0)
- value_box = ConstInt(0)
- self.emit_gc_store_or_indexed(op, op.getarg(0), index_box,
value_box,
- size, 1, ofs)
return False
@@ -678,7 +671,7 @@
del self.last_zero_arrays[:]
self._setarrayitems_occurred.clear()
#
- # Then write the ZERO_PTR_FIELDs that are still pending
+ # Then write the NULL-pointer-writing ops that are still pending
for v, d in self._delayed_zero_setfields.iteritems():
v = self.get_box_replacement(v)
for ofs in d.iterkeys():
diff --git a/rpython/jit/backend/test/runner_test.py
b/rpython/jit/backend/test/runner_test.py
--- a/rpython/jit/backend/test/runner_test.py
+++ b/rpython/jit/backend/test/runner_test.py
@@ -4964,52 +4964,6 @@
[boxfloat(12.5)], 'int')
assert res == struct.unpack("I", struct.pack("f", 12.5))[0]
- def test_zero_ptr_field(self):
- if not isinstance(self.cpu, AbstractLLCPU):
- py.test.skip("llgraph can't do zero_ptr_field")
- T = lltype.GcStruct('T')
- S = lltype.GcStruct('S', ('x', lltype.Ptr(T)))
- tdescr = self.cpu.sizeof(T)
- sdescr = self.cpu.sizeof(S)
- fielddescr = self.cpu.fielddescrof(S, 'x')
- loop = parse("""
- []
- p0 = new(descr=tdescr)
- p1 = new(descr=sdescr)
- setfield_gc(p1, p0, descr=fielddescr)
- zero_ptr_field(p1, %d)
- finish(p1)
- """ % fielddescr.offset, namespace=locals())
- looptoken = JitCellToken()
- self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
- deadframe = self.cpu.execute_token(looptoken)
- ref = self.cpu.get_ref_value(deadframe, 0)
- s = lltype.cast_opaque_ptr(lltype.Ptr(S), ref)
- assert not s.x
-
- def test_zero_ptr_field_2(self):
- if not isinstance(self.cpu, AbstractLLCPU):
- py.test.skip("llgraph does not do zero_ptr_field")
-
- from rpython.jit.backend.llsupport import symbolic
- S = lltype.GcStruct('S', ('x', lltype.Signed),
- ('p', llmemory.GCREF),
- ('y', lltype.Signed))
- s = lltype.malloc(S)
- s.x = -1296321
- s.y = -4398176
- s_ref = lltype.cast_opaque_ptr(llmemory.GCREF, s)
- s.p = s_ref
- ofs_p, _ = symbolic.get_field_token(S, 'p', False)
- #
- self.execute_operation(rop.ZERO_PTR_FIELD, [
- InputArgRef(s_ref), ConstInt(ofs_p)], # OK for now to assume
that the
- 'void') # 2nd argument is a constant
- #
- assert s.x == -1296321
- assert s.p == lltype.nullptr(llmemory.GCREF.TO)
- assert s.y == -4398176
-
def test_zero_array(self):
if not isinstance(self.cpu, AbstractLLCPU):
py.test.skip("llgraph does not do zero_array")
diff --git a/rpython/jit/backend/test/test_ll_random.py
b/rpython/jit/backend/test/test_ll_random.py
--- a/rpython/jit/backend/test/test_ll_random.py
+++ b/rpython/jit/backend/test/test_ll_random.py
@@ -745,7 +745,6 @@
OPERATIONS.append(GetInteriorFieldOperation(rop.GETINTERIORFIELD_GC_I))
OPERATIONS.append(GetInteriorFieldOperation(rop.GETINTERIORFIELD_GC_I))
OPERATIONS.append(SetFieldOperation(rop.SETFIELD_GC))
- OPERATIONS.append(ZeroPtrFieldOperation(rop.ZERO_PTR_FIELD))
OPERATIONS.append(SetInteriorFieldOperation(rop.SETINTERIORFIELD_GC))
OPERATIONS.append(NewOperation(rop.NEW))
OPERATIONS.append(NewOperation(rop.NEW_WITH_VTABLE))
diff --git a/rpython/jit/backend/test/test_random.py
b/rpython/jit/backend/test/test_random.py
--- a/rpython/jit/backend/test/test_random.py
+++ b/rpython/jit/backend/test/test_random.py
@@ -57,19 +57,11 @@
def do(self, opnum, argboxes, descr=None):
self.fakemetainterp._got_exc = None
op = ResOperation(opnum, argboxes, descr)
- if opnum != rop.ZERO_PTR_FIELD:
- result = _execute_arglist(self.cpu, self.fakemetainterp,
- opnum, argboxes, descr)
- if result is not None:
- c_result = wrap_constant(result)
- op.copy_value_from(c_result)
- else:
- import ctypes
- addr = self.cpu.cast_gcref_to_int(argboxes[0].getref_base())
- offset = argboxes[1].getint()
- assert (offset % ctypes.sizeof(ctypes.c_long)) == 0
- ptr = ctypes.cast(addr, ctypes.POINTER(ctypes.c_long))
- ptr[offset / ctypes.sizeof(ctypes.c_long)] = 0
+ result = _execute_arglist(self.cpu, self.fakemetainterp,
+ opnum, argboxes, descr)
+ if result is not None:
+ c_result = wrap_constant(result)
+ op.copy_value_from(c_result)
self.loop.operations.append(op)
return op
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
@@ -367,7 +367,6 @@
rop.INCREMENT_DEBUG_COUNTER,
rop.COND_CALL_GC_WB,
rop.COND_CALL_GC_WB_ARRAY,
- rop.ZERO_PTR_FIELD,
rop.ZERO_ARRAY,
rop.DEBUG_MERGE_POINT,
rop.JIT_DEBUG,
diff --git a/rpython/jit/metainterp/optimizeopt/dependency.py
b/rpython/jit/metainterp/optimizeopt/dependency.py
--- a/rpython/jit/metainterp/optimizeopt/dependency.py
+++ b/rpython/jit/metainterp/optimizeopt/dependency.py
@@ -18,7 +18,6 @@
, (rop.SETINTERIORFIELD_RAW, 0, -1)
, (rop.SETFIELD_GC, 0, -1)
, (rop.SETFIELD_RAW, 0, -1)
- , (rop.ZERO_PTR_FIELD, 0, -1)
, (rop.ZERO_ARRAY, 0, -1)
, (rop.STRSETITEM, 0, -1)
, (rop.UNICODESETITEM, 0, -1)
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
@@ -1221,8 +1221,6 @@
'SETINTERIORFIELD_GC/3d/n',
'SETINTERIORFIELD_RAW/3d/n', # right now, only used by tests
'SETFIELD_GC/2d/n',
- 'ZERO_PTR_FIELD/2/n', # only emitted by the rewrite, clears a pointer field
- # at a given constant offset, no descr
'ZERO_ARRAY/3d/n', # only emitted by the rewrite, clears (part of) an
array
# [arraygcptr, firstindex, length], descr=ArrayDescr
'SETFIELD_RAW/2d/n',
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit