[pypy-commit] pypy dynamic-specialized-tuple: even more hacks. I think we should scrap all of this work and rethink.
alex_gaynor
noreply at buildbot.pypy.org
Wed Mar 14 22:23:29 CET 2012
Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: dynamic-specialized-tuple
Changeset: r53605:ae7106d140d0
Date: 2012-03-14 14:23 -0700
http://bitbucket.org/pypy/pypy/changeset/ae7106d140d0/
Log: even more hacks. I think we should scrap all of this work and
rethink.
diff --git a/pypy/jit/backend/llgraph/runner.py b/pypy/jit/backend/llgraph/runner.py
--- a/pypy/jit/backend/llgraph/runner.py
+++ b/pypy/jit/backend/llgraph/runner.py
@@ -334,7 +334,7 @@
token = history.getkind(getattr(S, fieldname))
return self.getdescr(ofs, token[0], name=fieldname)
- def interiorfielddescrof(self, A, fieldname):
+ def interiorfielddescrof(self, A, fieldname, force_kind=None):
width = symbolic.get_size(A)
if isinstance(A, lltype.GcArray):
S = A.OF
@@ -343,6 +343,8 @@
else:
ofs, size = symbolic.get_field_token(A, fieldname)
token = history.getkind(getattr(A, fieldname).OF)
+ if force_kind is not None:
+ token = force_kind
return self.getdescr(ofs, token[0], name=fieldname, width=width)
def interiorfielddescrof_dynamic(self, offset, width, fieldsize,
diff --git a/pypy/jit/codewriter/jtransform.py b/pypy/jit/codewriter/jtransform.py
--- a/pypy/jit/codewriter/jtransform.py
+++ b/pypy/jit/codewriter/jtransform.py
@@ -1,3 +1,5 @@
+import copy
+
import py
from pypy.jit.codewriter import support, heaptracker, longlong
@@ -5,9 +7,9 @@
from pypy.jit.codewriter.flatten import ListOfKind, IndirectCallTargets
from pypy.jit.codewriter.policy import log
from pypy.jit.metainterp import quasiimmut
+from pypy.jit.metainterp.blackhole import BlackholeInterpreter
from pypy.jit.metainterp.history import getkind
from pypy.jit.metainterp.typesystem import deref, arrayItem
-from pypy.jit.metainterp.blackhole import BlackholeInterpreter
from pypy.objspace.flow.model import SpaceOperation, Variable, Constant, c_last_exception
from pypy.rlib import objectmodel
from pypy.rlib.jit import _we_are_jitted
@@ -16,6 +18,7 @@
from pypy.translator.simplify import get_funcobj
from pypy.translator.unsimplify import varoftype
+
class UnsupportedMallocFlags(Exception):
pass
@@ -234,6 +237,9 @@
raise Exception("Must cast_adr_to_ptr of directly read adr")
prev_op.opname = 'getinteriorfield_gc_r'
prev_op.result = op.result
+ descr = copy.copy(prev_op.args[2])
+ descr.typeinfo = "r"
+ prev_op.args = prev_op.args[:2] + [descr]
return prev_op
def rewrite_op_cast_bool_to_int(self, op): pass
@@ -856,9 +862,9 @@
if orig_value is not None:
v_value = orig_value
+ kind = getkind(v_value.concretetype)[0]
descr = self.cpu.interiorfielddescrof(v_inst.concretetype.TO,
- c_field.value)
- kind = getkind(v_value.concretetype)[0]
+ c_field.value, force_kind=kind)
args = [v_inst, v_index, v_value, descr]
return SpaceOperation('setinteriorfield_gc_%s' % kind, args,
op.result)
diff --git a/pypy/jit/codewriter/test/test_jtransform.py b/pypy/jit/codewriter/test/test_jtransform.py
--- a/pypy/jit/codewriter/test/test_jtransform.py
+++ b/pypy/jit/codewriter/test/test_jtransform.py
@@ -38,7 +38,7 @@
return ('calldescr', FUNC, ARGS, RESULT)
def fielddescrof(self, STRUCT, name):
return ('fielddescr', STRUCT, name)
- def interiorfielddescrof(self, ARRAY, name):
+ def interiorfielddescrof(self, ARRAY, name, force_kind=None):
return ('interiorfielddescr', ARRAY, name)
def arraydescrof(self, ARRAY):
return FakeDescr(('arraydescr', ARRAY))
More information about the pypy-commit
mailing list