[pypy-commit] pypy jit-cleanup: Move cls_of_box() to cpu and kill rpython.jit.metainterp.typesystem

rlamy pypy.commits at gmail.com
Sat Apr 6 13:00:35 EDT 2019


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: jit-cleanup
Changeset: r96423:690f56c5e4e9
Date: 2019-04-06 02:51 +0100
http://bitbucket.org/pypy/pypy/changeset/690f56c5e4e9/

Log:	Move cls_of_box() to cpu and kill rpython.jit.metainterp.typesystem

diff --git a/rpython/jit/backend/arm/test/test_regalloc.py b/rpython/jit/backend/arm/test/test_regalloc.py
--- a/rpython/jit/backend/arm/test/test_regalloc.py
+++ b/rpython/jit/backend/arm/test/test_regalloc.py
@@ -150,7 +150,6 @@
                                                     EffectInfo.MOST_GENERAL)
     f10_calldescr = cpu.calldescrof(F10PTR.TO, F10PTR.TO.ARGS,
                                     F10PTR.TO.RESULT, EffectInfo.MOST_GENERAL)
-    typesystem = 'lltype'
     namespace = locals().copy()
 
 class TestRegallocSimple(CustomBaseTestRegalloc):
diff --git a/rpython/jit/backend/model.py b/rpython/jit/backend/model.py
--- a/rpython/jit/backend/model.py
+++ b/rpython/jit/backend/model.py
@@ -1,6 +1,9 @@
 import weakref
 from rpython.rlib.debug import debug_start, debug_print, debug_stop
 from rpython.rtyper.lltypesystem import lltype, llmemory
+from rpython.rtyper.rclass import OBJECTPTR
+from rpython.jit.metainterp.history import ConstInt
+from rpython.jit.metainterp.support import ptr2int
 
 class CPUTotalTracker(object):
     total_compiled_loops = 0
@@ -9,8 +12,6 @@
     total_freed_bridges = 0
 
 class AbstractCPU(object):
-    from rpython.jit.metainterp.typesystem import llhelper as ts
-
     supports_floats = False
     supports_longlong = False
     # ^^^ This is only useful on 32-bit platforms.  If True,
@@ -194,6 +195,10 @@
         x = llmemory.cast_int_to_adr(x)
         return llmemory.cast_adr_to_ptr(x, TYPE)
 
+    def cls_of_box(self, box):
+        obj = lltype.cast_opaque_ptr(OBJECTPTR, box.getref_base())
+        return ConstInt(ptr2int(obj.typeptr))
+
 
     # ---------- the backend-dependent operations ----------
 
diff --git a/rpython/jit/metainterp/blackhole.py b/rpython/jit/metainterp/blackhole.py
--- a/rpython/jit/metainterp/blackhole.py
+++ b/rpython/jit/metainterp/blackhole.py
@@ -4,7 +4,8 @@
 from rpython.jit.metainterp.jitexc import get_llexception, reraise
 from rpython.jit.metainterp import jitexc
 from rpython.jit.metainterp.history import MissingValue
-from rpython.jit.metainterp.support import adr2int, int2adr, int_signext
+from rpython.jit.metainterp.support import (
+    adr2int, int2adr, ptr2int, int_signext)
 from rpython.rlib import longlong2float
 from rpython.rlib.debug import ll_assert, make_sure_not_resized
 from rpython.rlib.debug import check_annotation
diff --git a/rpython/jit/metainterp/optimizeopt/bridgeopt.py b/rpython/jit/metainterp/optimizeopt/bridgeopt.py
--- a/rpython/jit/metainterp/optimizeopt/bridgeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/bridgeopt.py
@@ -142,7 +142,7 @@
         class_known = bitfield & mask
         mask >>= 1
         if class_known:
-            cls = optimizer.cpu.ts.cls_of_box(frontend_boxes[i])
+            cls = optimizer.cpu.cls_of_box(frontend_boxes[i])
             optimizer.make_constant_class(box, cls)
 
     # heap knowledge
diff --git a/rpython/jit/metainterp/optimizeopt/info.py b/rpython/jit/metainterp/optimizeopt/info.py
--- a/rpython/jit/metainterp/optimizeopt/info.py
+++ b/rpython/jit/metainterp/optimizeopt/info.py
@@ -15,7 +15,7 @@
 
 class AbstractInfo(AbstractValue):
     _attrs_ = ()
-    
+
     is_info_class = True
 
     def force_box(self, op, optforce):
@@ -89,7 +89,7 @@
 class NonNullPtrInfo(PtrInfo):
     _attrs_ = ('last_guard_pos',)
     last_guard_pos = -1
-    
+
     def is_nonnull(self):
         return True
 
@@ -469,7 +469,7 @@
 
     def setitem_raw(self, offset, itemsize, descr, itemop):
         self.parent.setitem_raw(self.offset+offset, itemsize, descr, itemop)
-    
+
     def _force_elements(self, op, optforce, descr):
         if self.parent.is_virtual():
             self.parent._force_elements(op, optforce, descr)
@@ -643,7 +643,7 @@
             return 0 # annotation hack
         one_size = len(all_fdescrs)
         return index * one_size + fielddescr.get_field_descr().get_index()
-        
+
     def setinteriorfield_virtual(self, index, fielddescr, fld):
         index = self._compute_index(index, fielddescr)
         self._items[index] = fld
@@ -693,7 +693,7 @@
 
 class ConstPtrInfo(PtrInfo):
     _attrs_ = ('_const',)
-    
+
     def __init__(self, const):
         self._const = const
 
@@ -719,7 +719,7 @@
         if info is None:
             info = ArrayPtrInfo(descr)
             optheap.const_infos[ref] = info
-        return info        
+        return info
 
     def getfield(self, fielddescr, optheap=None):
         info = self._get_info(fielddescr.get_parent_descr(), optheap)
@@ -755,7 +755,7 @@
             # guard_gc_type
             if not cpu.check_is_object(self._const.getref_base()):
                 return None
-        return cpu.ts.cls_of_box(self._const)
+        return cpu.cls_of_box(self._const)
 
     def same_info(self, other):
         if not isinstance(other, ConstPtrInfo):
@@ -804,7 +804,7 @@
                 return -1
             return len(s)
         elif mode is vstring.mode_unicode:
-            s = self._unpack_str(vstring.mode_unicode)            
+            s = self._unpack_str(vstring.mode_unicode)
             if s is None:
                 return -1
             return len(s)
@@ -835,7 +835,7 @@
                                         targetbox, CONST_0, offsetbox,
                                         lgt, mode)
 
-    
+
 class FloatConstInfo(AbstractInfo):
     def __init__(self, const):
         self._const = const
diff --git a/rpython/jit/metainterp/optimizeopt/rewrite.py b/rpython/jit/metainterp/optimizeopt/rewrite.py
--- a/rpython/jit/metainterp/optimizeopt/rewrite.py
+++ b/rpython/jit/metainterp/optimizeopt/rewrite.py
@@ -393,7 +393,7 @@
         # class cannot possibly match (see test_issue2926)
         if info and info.is_constant():
             c = self.get_box_replacement(op.getarg(0))
-            vtable = optimizer.cpu.ts.cls_of_box(c).getint()
+            vtable = optimizer.cpu.cls_of_box(c).getint()
             if optimizer._check_subclass(vtable, op.getarg(1).getint()):
                 return
             raise InvalidLoop("GUARD_SUBCLASS(const) proven to always fail")
@@ -482,7 +482,7 @@
                               'guard that it is not NULL')
         previous_classbox = info.get_known_class(self.optimizer.cpu)
         if previous_classbox is not None:
-            expected_classbox = self.optimizer.cpu.ts.cls_of_box(c_value)
+            expected_classbox = self.optimizer.cpu.cls_of_box(c_value)
             assert expected_classbox is not None
             if not previous_classbox.same_constant(
                     expected_classbox):
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
@@ -31,13 +31,13 @@
 
 class BaseTestGenerateGuards(BaseTest):
     def setup_class(self):
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.nodeaddr))
         value = info.InstancePtrInfo(None, classbox)
         self.knownclass_info = not_virtual(self.cpu, 'r', value)
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.node2addr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.node2addr))
         value = info.InstancePtrInfo(None, classbox)
         self.knownclass_info2 = not_virtual(self.cpu, 'r', value)
-    
+
     def guards(self, info1, info2, box, runtime_box, expected, inputargs=None):
         if inputargs is None:
             inputargs = [box]
@@ -97,13 +97,13 @@
         # subsequently in all cases, so we just need to ensure that this case does
         # not cause segfaults.
         optimizer = FakeOptimizer(self.cpu)
-        classbox1 = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+        classbox1 = self.cpu.cls_of_box(InputArgRef(self.nodeaddr))
         innervalue1 = info.InstancePtrInfo(
                 known_class=classbox1, is_virtual=True,
                 descr=self.valuedescr.get_parent_descr())
         for field in self.valuedescr.get_parent_descr().get_all_fielddescrs():
             innervalue1.setfield(field, None, ConstInt(42))
-        classbox2 = self.cpu.ts.cls_of_box(InputArgRef(self.myptr3))
+        classbox2 = self.cpu.cls_of_box(InputArgRef(self.myptr3))
         innervalue2 = info.InstancePtrInfo(
                 known_class=classbox2, is_virtual=True,
                 descr=self.valuedescr3.get_parent_descr())
@@ -175,7 +175,7 @@
 
         ptr = info.PtrInfo()
         nonnull = info.NonNullPtrInfo()
-        clsbox = self.cpu.ts.cls_of_box(InputArgRef(self.myptr))
+        clsbox = self.cpu.cls_of_box(InputArgRef(self.myptr))
         knownclass = info.InstancePtrInfo(known_class=clsbox)
         const = info.ConstPtrInfo(ConstPtr(self.myptr))
         inorder = [ptr, nonnull, knownclass, const]
@@ -264,10 +264,10 @@
 
         nonnull_info = not_virtual(self.cpu, 'r', info.NonNullPtrInfo())
 
-        classbox1 = self.cpu.ts.cls_of_box(ConstPtr(self.nodeaddr))
+        classbox1 = self.cpu.cls_of_box(ConstPtr(self.nodeaddr))
         knownclass_info = not_virtual(self.cpu, 'r',
                                       info.InstancePtrInfo(None, classbox1))
-        classbox2 = self.cpu.ts.cls_of_box(ConstPtr(self.node2addr))
+        classbox2 = self.cpu.cls_of_box(ConstPtr(self.node2addr))
         knownclass2_info = not_virtual(self.cpu, 'r',
                                        info.InstancePtrInfo(None, classbox2))
 
@@ -455,20 +455,20 @@
         self.check_no_guards(info1, info2)
 
     def test_known_class(self):
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.nodeaddr))
         value1 = info.InstancePtrInfo(None, classbox)
         info1 = not_virtual(self.cpu, 'r', value1)
         info2 = not_virtual(self.cpu, 'r', None)
         expected = """
         [p0]
-        guard_nonnull_class(p0, ConstClass(node_vtable)) []        
+        guard_nonnull_class(p0, ConstClass(node_vtable)) []
         """
         self.guards(info1, info2, InputArgRef(),
                     InputArgRef(self.nodeaddr), expected)
         self.check_invalid(info1, info2, InputArgRef())
 
     def test_known_class_value(self):
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.nodeaddr))
         value1 = info.InstancePtrInfo(None, classbox)
         box = InputArgRef()
         guards = []
@@ -493,7 +493,7 @@
         self.compare(guards, expected, [box])
 
     def test_equal_inputargs(self):
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.nodeaddr))
         value = info.InstancePtrInfo(None, classbox)
         knownclass_info = not_virtual(self.cpu, 'r', value)
         vstate1 = VirtualState([knownclass_info, knownclass_info])
@@ -531,7 +531,7 @@
 
 
     def test_generate_guards_on_virtual_fields_matches_array(self):
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.nodeaddr))
         innervalue1 = info.InstancePtrInfo(None, classbox)
         innerinfo1 = not_virtual(self.cpu, 'r', innervalue1)
         innerinfo1.position = 1
@@ -561,7 +561,7 @@
         self.guards(info1, info2, runtime_box, runtime_box, expected, [box])
 
     def test_generate_guards_on_virtual_fields_matches_instance(self):
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.nodeaddr))
         innervalue1 = info.InstancePtrInfo(None, classbox)
         innerinfo1 = not_virtual(self.cpu, 'r', innervalue1)
         innerinfo1.position = 1
@@ -589,7 +589,7 @@
         self.guards(info1, info2, nodebox, runtime_box, expected, [node2box])
 
     def test_generate_guards_on_virtual_fields_matches_struct(self):
-        constclassbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+        constclassbox = self.cpu.cls_of_box(InputArgRef(self.nodeaddr))
         innervalue1 = info.InstancePtrInfo(None, constclassbox)
         innerinfo1 = not_virtual(self.cpu, 'r', innervalue1)
         innerinfo1.position = 1
@@ -620,7 +620,7 @@
                     [node2box])
 
     def test_generate_guards_on_virtual_fields_matches_arraystruct(self):
-        constclassbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+        constclassbox = self.cpu.cls_of_box(InputArgRef(self.nodeaddr))
         innervalue1 = info.InstancePtrInfo(None, constclassbox)
         innerinfo1 = not_virtual(self.cpu, 'r', innervalue1)
         innerinfo1.position = 1
@@ -630,7 +630,7 @@
         NODE = lltype.Struct('NODE', ('x', llmemory.GCREF))
         ARRAY = lltype.GcArray(NODE)
         descr = self.cpu.fielddescrof(NODE, 'x')
-        
+
         arraydescr = self.cpu.arraydescrof(ARRAY)
 
         info1 = VArrayStructStateInfo(arraydescr, [descr], 1)
@@ -680,7 +680,7 @@
         unknown_info2 = not_virtual(self.cpu, 'r',
                                             info.InstancePtrInfo())
         info3.fieldstate = [unknown_info1, unknown_info2]
-        vstate3 = VirtualState([info3])        
+        vstate3 = VirtualState([info3])
         assert vstate3.generalization_of(vstate2, FakeOptimizer(self.cpu))
         assert vstate3.generalization_of(vstate1, FakeOptimizer(self.cpu))
         assert not vstate2.generalization_of(vstate3, FakeOptimizer(self.cpu))
@@ -688,7 +688,7 @@
 
     def test_virtuals_with_nonmatching_fields(self):
         info1 = VirtualStateInfo(ConstInt(42), [1, 2])
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.nodeaddr))
         value = info.InstancePtrInfo(None, classbox)
         knownclass_info = not_virtual(self.cpu, 'r', value)
         info1.fieldstate = [knownclass_info, knownclass_info]
@@ -696,7 +696,7 @@
         assert vstate1.generalization_of(vstate1, FakeOptimizer(self.cpu))
 
         info2 = VirtualStateInfo(ConstInt(42), [1, 2])
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.node2addr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.node2addr))
         value = info.InstancePtrInfo(None, classbox)
         knownclass_info = not_virtual(self.cpu, 'r', value)
         info2.fieldstate = [knownclass_info, knownclass_info]
@@ -708,7 +708,7 @@
 
     def test_virtuals_with_nonmatching_descrs(self):
         info1 = VirtualStateInfo(ConstInt(42), [10, 20])
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.nodeaddr))
         value = info.InstancePtrInfo(None, classbox)
         knownclass_info = not_virtual(self.cpu, 'r', value)
         info1.fieldstate = [knownclass_info, knownclass_info]
@@ -716,7 +716,7 @@
         assert vstate1.generalization_of(vstate1, FakeOptimizer(self.cpu))
 
         info2 = VirtualStateInfo(ConstInt(42), [1, 2])
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.node2addr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.node2addr))
         value = info.InstancePtrInfo(None, classbox)
         knownclass_info = not_virtual(self.cpu, 'r', value)
         info2.fieldstate = [knownclass_info, knownclass_info]
@@ -725,10 +725,10 @@
 
         assert not vstate2.generalization_of(vstate1, FakeOptimizer(self.cpu))
         assert not vstate1.generalization_of(vstate2, FakeOptimizer(self.cpu))
-        
+
     def test_virtuals_with_nonmatching_classes(self):
         info1 = VirtualStateInfo(ConstInt(42), [1, 2])
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.nodeaddr))
         value = info.InstancePtrInfo(None, classbox)
         knownclass_info = not_virtual(self.cpu, 'r', value)
         info1.fieldstate = [knownclass_info, knownclass_info]
@@ -736,7 +736,7 @@
         assert vstate1.generalization_of(vstate1, FakeOptimizer(self.cpu))
 
         info2 = VirtualStateInfo(ConstInt(7), [1, 2])
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.node2addr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.node2addr))
         value = info.InstancePtrInfo(None, classbox)
         knownclass_info = not_virtual(self.cpu, 'r', value)
         info2.fieldstate = [knownclass_info, knownclass_info]
@@ -748,7 +748,7 @@
 
     def test_nonvirtual_is_not_virtual(self):
         info1 = VirtualStateInfo(ConstInt(42), [1, 2])
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.nodeaddr))
         value = info.InstancePtrInfo(None, classbox)
         knownclass_info = not_virtual(self.cpu, 'r', value)
         info1.fieldstate = [knownclass_info, knownclass_info]
@@ -764,7 +764,7 @@
 
     def test_arrays_with_nonmatching_fields(self):
         info1 = VArrayStateInfo(42)
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.nodeaddr))
         value = info.InstancePtrInfo(None, classbox)
         knownclass_info = not_virtual(self.cpu, 'r', value)
         info1.fieldstate = [knownclass_info, knownclass_info]
@@ -772,7 +772,7 @@
         assert vstate1.generalization_of(vstate1, FakeOptimizer(self.cpu))
 
         info2 = VArrayStateInfo(42)
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.node2addr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.node2addr))
         value = info.InstancePtrInfo(None, classbox)
         knownclass_info = not_virtual(self.cpu, 'r', value)
         info2.fieldstate = [knownclass_info, knownclass_info]
@@ -784,7 +784,7 @@
 
     def test_arrays_of_different_sizes(self):
         info1 = VArrayStateInfo(42)
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.nodeaddr))
         value = info.InstancePtrInfo(None, classbox)
         knownclass_info = not_virtual(self.cpu, 'r', value)
         info1.fieldstate = [knownclass_info, knownclass_info]
@@ -792,7 +792,7 @@
         assert vstate1.generalization_of(vstate1, FakeOptimizer(self.cpu))
 
         info2 = VArrayStateInfo(42)
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.node2addr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.node2addr))
         value = info.InstancePtrInfo(None, classbox)
         knownclass_info = not_virtual(self.cpu, 'r', value)
         info2.fieldstate = [knownclass_info]
@@ -815,7 +815,7 @@
 
         assert not vstate2.generalization_of(vstate1, FakeOptimizer(self.cpu))
         assert not vstate1.generalization_of(vstate2, FakeOptimizer(self.cpu))
-        
+
     def test_nonvirtual_is_not_array(self):
         info1 = VArrayStateInfo(42)
         info1.fieldstate = [self.knownclass_info, self.knownclass_info]
@@ -827,10 +827,10 @@
 
         assert not vstate2.generalization_of(vstate1, FakeOptimizer(self.cpu))
         assert not vstate1.generalization_of(vstate2, FakeOptimizer(self.cpu))
-        
+
 
     def test_crash_varay_clear(self):
-        classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+        classbox = self.cpu.cls_of_box(InputArgRef(self.nodeaddr))
         innervalue1 = info.InstancePtrInfo(None, classbox)
         innerinfo1 = not_virtual(self.cpu, 'r', innervalue1)
         innerinfo1.position = 1
@@ -873,13 +873,13 @@
                                             values)
         data = compile.BridgeCompileData(trace, runtime_boxes,
             enable_opts=self.enable_opts, inline_short_preamble=True)
-            
+
         info, newops = optimize_trace(metainterp_sd, None, data)
         if info.final():
             bridge.operations = newops
             bridge.inputargs = info.inputargs
         return info
-        
+
     def optimize_bridge(self, loops, bridge, expected, expected_target='Loop',
                         boxvalues=None):
         if isinstance(loops, str):
@@ -966,7 +966,7 @@
         """
         self.optimize_bridge(loop, bridge, expected, boxvalues=[self.myptr])
 
-    def test_cached_unused_nonnull(self):        
+    def test_cached_unused_nonnull(self):
         loop = """
         [p0]
         p1 = getfield_gc_r(p0, descr=nextdescr)
@@ -985,10 +985,10 @@
         p1 = getfield_gc_r(p0, descr=nextdescr)
         guard_nonnull(p1) []
         jump(p0)
-        """        
+        """
         self.optimize_bridge(loop, bridge, expected, boxvalues=[self.myptr])
 
-    def test_cached_invalid_nonnull(self):        
+    def test_cached_invalid_nonnull(self):
         loop = """
         [p0]
         p1 = getfield_gc_r(p0, descr=nextdescr)
@@ -998,7 +998,7 @@
         bridge = """
         [p0]
         p1 = getfield_gc_r(p0, descr=nextdescr)
-        guard_value(p1, ConstPtr(nullptr)) []        
+        guard_value(p1, ConstPtr(nullptr)) []
         jump(p0)
         """
         self.optimize_bridge(loop, bridge, bridge, 'Preamble',
@@ -1074,7 +1074,7 @@
         guard_is_object(p0) []
         guard_subclass(p0, ConstClass(node_vtable)) []
         p1 = getfield_gc_r(p0, descr=nextdescr)
-        guard_value(p1, ConstPtr(myptr)) []       
+        guard_value(p1, ConstPtr(myptr)) []
         jump(p0)
         """
         self.optimize_bridge(loop, bridge, expected, 'Loop', [self.myptr])
@@ -1159,7 +1159,7 @@
         guard_nonnull(p1) []
         guard_is_object(p1) []
         guard_class(p1, ConstClass(node_vtable)) []
-        jump(p0)        
+        jump(p0)
         """
         self.optimize_bridge(loop, bridge, expected, 'Loop', [self.myptr])
 
@@ -1190,7 +1190,7 @@
         ifoo = arraylen_gc(p0, descr=arraydescr)
         i3 = getarrayitem_gc_i(p0, 10, descr=arraydescr)
         jump(p0, i3)
-        """        
+        """
         self.optimize_bridge(loop, bridge, expected, 'Loop0', [self.myptr])
         bridge = """
         [p0]
@@ -1231,10 +1231,10 @@
         [p0]
         p1 = getfield_gc_r(p0, descr=nextdescr)
         i2 = getarrayitem_gc_i(p1, 15, descr=arraydescr)
-        i3 = arraylen_gc(p1, descr=arraydescr) # Should be killed by backend        
+        i3 = arraylen_gc(p1, descr=arraydescr) # Should be killed by backend
         i4 = getarrayitem_gc_i(p1, 10, descr=arraydescr)
         jump(p0, p1, i4)
-        """        
+        """
         self.optimize_bridge(loop, bridge, expected)
         bridge = """
         [p0]
@@ -1251,7 +1251,7 @@
         guard_true(i4) []
         i5 = getarrayitem_gc_i(p1, 10, descr=arraydescr)
         jump(p0, p1, i5)
-        """        
+        """
         self.optimize_bridge(loop, bridge, expected)
         bridge = """
         [p0]
@@ -1270,7 +1270,7 @@
         guard_true(i4) []
         i5 = getarrayitem_gc_i(p1, 10, descr=arraydescr)
         jump(p0, p1, i5)
-        """        
+        """
         self.optimize_bridge(loop, bridge, expected, 'Loop', [self.myptr])
 
     def test_cached_setarrayitem_gc(self):
@@ -1308,7 +1308,7 @@
         loop = """
         [p5]
         i10 = getfield_gc_i(p5, descr=valuedescr)
-        call_n(i10, descr=nonwritedescr) 
+        call_n(i10, descr=nonwritedescr)
         setfield_gc(p5, 1, descr=valuedescr)
         jump(p5)
         """
@@ -1344,7 +1344,7 @@
         i10 = getfield_gc_i(p5, descr=valuedescr)
         i11 = getfield_gc_i(p6, descr=chardescr)
         call_n(i10, i11, descr=nonwritedescr)
-        setfield_gc(p6, i10, descr=nextdescr)        
+        setfield_gc(p6, i10, descr=nextdescr)
         jump(p5, p6)
         """
         bridge = """
@@ -1379,7 +1379,7 @@
 
     def setup_class(self):
         py.test.skip("rewrite")
-    
+
     def test_short_box_duplication_direct(self):
         class Optimizer(FakeOptimizer):
             def produce_potential_short_preamble_ops(_self, sb):
@@ -1436,7 +1436,7 @@
                     if op and op.result == int_neg.getarg(0)]
         assert len(getfield) == 1
         assert getfield[0].getarg(0) in [self.p1, self.p2]
-        
+
     def test_prioritize2(self):
         class Optimizer(FakeOptimizer):
             def produce_potential_short_preamble_ops(_self, sb):
@@ -1454,7 +1454,7 @@
                     if op and op.result == int_neg.getarg(0)]
         assert len(getfield) == 1
         assert getfield[0].getarg(0) == self.p2
-        
+
     def test_prioritize3(self):
         class Optimizer(FakeOptimizer):
             def produce_potential_short_preamble_ops(_self, sb):
diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py b/rpython/jit/metainterp/optimizeopt/virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py
@@ -596,14 +596,14 @@
             raise VirtualStatesCantMatch('trying to match ptr with non-ptr??!')
         if other.level == LEVEL_UNKNOWN:
             if (runtime_box and runtime_box.nonnull() and
-                  self.known_class.same_constant(cpu.ts.cls_of_box(runtime_box))):
+                  self.known_class.same_constant(cpu.cls_of_box(runtime_box))):
                 op = ResOperation(rop.GUARD_NONNULL_CLASS, [box, self.known_class])
                 extra_guards.append(op)
             else:
                 raise VirtualStatesCantMatch("other's class is unknown")
         elif other.level == LEVEL_NONNULL:
             if (runtime_box and self.known_class.same_constant(
-                    cpu.ts.cls_of_box(runtime_box))):
+                    cpu.cls_of_box(runtime_box))):
                 op = ResOperation(rop.GUARD_CLASS, [box, self.known_class])
                 extra_guards.append(op)
             else:
@@ -615,7 +615,7 @@
         else:
             assert other.level == LEVEL_CONSTANT
             if (other.constbox.nonnull() and
-                    self.known_class.same_constant(cpu.ts.cls_of_box(other.constbox))):
+                    self.known_class.same_constant(cpu.cls_of_box(other.constbox))):
                 pass
             else:
                 raise VirtualStatesCantMatch("classes don't match")
diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -1383,7 +1383,8 @@
         exc_value = self.metainterp.last_exc_value
         assert exc_value
         assert self.metainterp.class_of_last_exc_is_const
-        return self.metainterp.cpu.ts.cls_of_box(ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, exc_value)))
+        exc_cls = rclass.ll_cast_to_object(exc_value).typeptr
+        return ConstInt(ptr2int(exc_cls))
 
     @arguments()
     def opimpl_last_exc_value(self):
@@ -1583,7 +1584,7 @@
             return promoted_box
 
     def cls_of_box(self, box):
-        return self.metainterp.cpu.ts.cls_of_box(box)
+        return self.metainterp.cpu.cls_of_box(box)
 
     @specialize.arg(1)
     def execute(self, opnum, *argboxes):
diff --git a/rpython/jit/metainterp/test/test_bridgeopt.py b/rpython/jit/metainterp/test/test_bridgeopt.py
--- a/rpython/jit/metainterp/test/test_bridgeopt.py
+++ b/rpython/jit/metainterp/test/test_bridgeopt.py
@@ -15,18 +15,14 @@
 
 from hypothesis import strategies, given
 
-class FakeTS(object):
+
+class FakeCPU(object):
     def __init__(self, dct):
         self.dct = dct
 
     def cls_of_box(self, box):
         return self.dct[box]
 
-
-class FakeCPU(object):
-    def __init__(self, dct):
-        self.ts = FakeTS(dct)
-
 class FakeOptimizer(object):
     metainterp_sd = None
     optheap = None
diff --git a/rpython/jit/metainterp/test/test_compile.py b/rpython/jit/metainterp/test/test_compile.py
--- a/rpython/jit/metainterp/test/test_compile.py
+++ b/rpython/jit/metainterp/test/test_compile.py
@@ -5,7 +5,7 @@
 from rpython.jit.metainterp.compile import compile_tmp_callback
 from rpython.jit.metainterp import jitexc
 from rpython.rlib.rjitlog import rjitlog as jl
-from rpython.jit.metainterp import jitprof, typesystem, compile
+from rpython.jit.metainterp import jitprof, compile
 from rpython.jit.metainterp.optimizeopt.test.test_util import LLtypeMixin
 from rpython.jit.tool.oparser import parse, convert_loop_to_trace
 from rpython.jit.metainterp.optimizeopt import ALL_OPTS_DICT
@@ -19,7 +19,6 @@
     class tracker:
         pass
 
-    ts = typesystem.llhelper
     def __init__(self):
         self.seen = []
 
diff --git a/rpython/jit/metainterp/test/test_quasiimmut.py b/rpython/jit/metainterp/test/test_quasiimmut.py
--- a/rpython/jit/metainterp/test/test_quasiimmut.py
+++ b/rpython/jit/metainterp/test/test_quasiimmut.py
@@ -4,7 +4,6 @@
 from rpython.rtyper.lltypesystem import lltype, llmemory
 from rpython.rtyper import rclass
 from rpython.rtyper.rclass import FieldListAccessor, IR_QUASIIMMUTABLE
-from rpython.jit.metainterp import typesystem
 from rpython.jit.metainterp.quasiimmut import QuasiImmut
 from rpython.jit.metainterp.quasiimmut import get_current_qmut_instance
 from rpython.jit.metainterp.test.support import LLJitMixin
@@ -23,8 +22,6 @@
     assert not foo.mutate_x
 
     class FakeCPU:
-        ts = typesystem.llhelper
-
         def bh_getfield_gc_r(self, gcref, fielddescr):
             assert fielddescr == mutatefielddescr
             foo = lltype.cast_opaque_ptr(lltype.Ptr(STRUCT), gcref)
diff --git a/rpython/jit/metainterp/test/test_warmspot.py b/rpython/jit/metainterp/test/test_warmspot.py
--- a/rpython/jit/metainterp/test/test_warmspot.py
+++ b/rpython/jit/metainterp/test/test_warmspot.py
@@ -578,7 +578,6 @@
 
 class TestWarmspotDirect(object):
     def setup_class(cls):
-        from rpython.jit.metainterp.typesystem import llhelper
         from rpython.jit.codewriter.support import annotate
         from rpython.jit.metainterp.warmspot import WarmRunnerDesc
         from rpython.rtyper.rclass import OBJECT, OBJECT_VTABLE
@@ -615,7 +614,6 @@
             supports_floats = False
             supports_longlong = False
             supports_singlefloats = False
-            ts = llhelper
             translate_support_code = False
             stats = "stats"
 
diff --git a/rpython/jit/metainterp/typesystem.py b/rpython/jit/metainterp/typesystem.py
deleted file mode 100644
--- a/rpython/jit/metainterp/typesystem.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from rpython.rtyper.lltypesystem import lltype, llmemory
-from rpython.rtyper import rclass
-from rpython.jit.metainterp import history
-from rpython.jit.metainterp.support import ptr2int
-from rpython.rlib.objectmodel import r_dict
-
-
-class TypeSystemHelper(object):
-
-    def _freeze_(self):
-        return True
-
-class LLTypeHelper(TypeSystemHelper):
-
-    name = 'lltype'
-
-    def cls_of_box(self, box):
-        obj = lltype.cast_opaque_ptr(rclass.OBJECTPTR, box.getref_base())
-        return history.ConstInt(ptr2int(obj.typeptr))
-
-llhelper = LLTypeHelper()
diff --git a/rpython/jit/metainterp/virtualizable.py b/rpython/jit/metainterp/virtualizable.py
--- a/rpython/jit/metainterp/virtualizable.py
+++ b/rpython/jit/metainterp/virtualizable.py
@@ -284,7 +284,6 @@
         force_virtualizable_if_necessary._always_inline_ = True
         #
         all_graphs = self.warmrunnerdesc.translator.graphs
-        ts = self.warmrunnerdesc.cpu.ts
         FUNC = lltype.FuncType([self.VTYPEPTR], lltype.Void)
         funcptr = self.warmrunnerdesc.helper_func(
             lltype.Ptr(FUNC), force_virtualizable_if_necessary)
diff --git a/rpython/jit/tool/oparser_model.py b/rpython/jit/tool/oparser_model.py
--- a/rpython/jit/tool/oparser_model.py
+++ b/rpython/jit/tool/oparser_model.py
@@ -8,7 +8,6 @@
         from rpython.jit.metainterp.history import TreeLoop, JitCellToken
         from rpython.jit.metainterp.history import ConstInt, ConstPtr, ConstFloat
         from rpython.jit.metainterp.history import BasicFailDescr, BasicFinalDescr, TargetToken
-        from rpython.jit.metainterp.typesystem import llhelper
         from rpython.jit.metainterp.opencoder import Trace
 
         from rpython.jit.metainterp.history import get_const_ptr_for_string
@@ -119,11 +118,6 @@
         def ptr_to_int(obj):
             return id(obj)
 
-        class llhelper(object):
-            pass
-
-    MockLoopModel.llhelper.BoxRef = MockLoopModel.BoxRef
-
     return MockLoopModel
 
 


More information about the pypy-commit mailing list