[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