[pypy-commit] pypy optresult-unroll: (fijal, arigo) Trying to write a direct, translated test for

arigo noreply at buildbot.pypy.org
Fri Sep 4 11:55:21 CEST 2015


Author: Armin Rigo <arigo at tunes.org>
Branch: optresult-unroll
Changeset: r79412:3a328bfeb255
Date: 2015-09-04 11:55 +0200
http://bitbucket.org/pypy/pypy/changeset/3a328bfeb255/

Log:	(fijal, arigo) Trying to write a direct, translated test for the
	code that can only be tested when translated, here in guard_class

diff --git a/rpython/jit/backend/llsupport/gc.py b/rpython/jit/backend/llsupport/gc.py
--- a/rpython/jit/backend/llsupport/gc.py
+++ b/rpython/jit/backend/llsupport/gc.py
@@ -24,6 +24,7 @@
 class MovableObjectTracker(object):
 
     ptr_array_type = lltype.GcArray(llmemory.GCREF)
+    ptr_array_gcref = lltype.nullptr(llmemory.GCREF.TO)
 
     def __init__(self, cpu, const_pointers):
         size = len(const_pointers)
@@ -669,7 +670,7 @@
         a translation with --gcremovetypeptr.
          """
         from rpython.memory.gctypelayout import GCData
-        assert translator.config.translation.gcremovetypeptr
+        assert self.gcdescr.config.translation.gcremovetypeptr
 
         # hard-coded assumption: to go from an object to its class
         # we would use the following algorithm:
diff --git a/rpython/jit/backend/llsupport/llmodel.py b/rpython/jit/backend/llsupport/llmodel.py
--- a/rpython/jit/backend/llsupport/llmodel.py
+++ b/rpython/jit/backend/llsupport/llmodel.py
@@ -25,6 +25,12 @@
 
     HAS_CODEMAP = False
 
+    done_with_this_frame_descr_int      = None   # overridden by pyjitpl.py
+    done_with_this_frame_descr_float    = None
+    done_with_this_frame_descr_ref      = None
+    done_with_this_frame_descr_void     = None
+    exit_frame_with_exception_descr_ref = None
+
     def __init__(self, rtyper, stats, opts, translate_support_code=False,
                  gcdescr=None):
         assert type(opts) is not bool
diff --git a/rpython/jit/backend/llsupport/test/test_zrpy_gc_direct.py b/rpython/jit/backend/llsupport/test/test_zrpy_gc_direct.py
new file mode 100644
--- /dev/null
+++ b/rpython/jit/backend/llsupport/test/test_zrpy_gc_direct.py
@@ -0,0 +1,60 @@
+from rpython.jit.backend.detect_cpu import getcpuclass
+from rpython.jit.tool.oparser import parse
+from rpython.jit.metainterp.history import JitCellToken, NoStats
+from rpython.jit.metainterp.history import BasicFinalDescr, BasicFailDescr
+from rpython.jit.metainterp.gc import get_description
+from rpython.annotator.listdef import s_list_of_strings
+from rpython.rtyper.lltypesystem import lltype, llmemory
+from rpython.rtyper.rclass import getclassrepr
+from rpython.translator.unsimplify import call_initial_function
+from rpython.translator.translator import TranslationContext
+
+
+def test_guard_class():
+    class A(object):
+        pass
+    class B(A):
+        pass
+    class C(B):
+        pass
+    def main(argv):
+        A(); B(); C()
+        return 0
+
+    t = TranslationContext()
+    t.config.translation.gc = "minimark"
+    t.config.translation.gcremovetypeptr = True
+    ann = t.buildannotator()
+    ann.build_types(main, [s_list_of_strings], main_entry_point=True)
+    rtyper = t.buildrtyper()
+    rtyper.specialize()
+
+    classdef = ann.bookkeeper.getuniqueclassdef(B)
+    rclass = getclassrepr(rtyper, classdef)
+    vtable_B = rclass.getvtable()
+    adr_vtable_B = llmemory.cast_ptr_to_adr(vtable_B)
+    vtable_B = llmemory.cast_adr_to_int(adr_vtable_B, mode="symbolic")
+
+    CPU = getcpuclass()
+    cpu = CPU(rtyper, NoStats(),
+              translate_support_code=True,
+              gcdescr=get_description(t.config))
+
+    loop = parse("""
+    [p0]
+    guard_class(p0, ConstInt(vtable_B), descr=faildescr) []
+    finish(descr=finaldescr)
+    """, namespace={'finaldescr': BasicFinalDescr(),
+                    'faildescr': BasicFailDescr(),
+                    'vtable_B': vtable_B})
+
+    def g():
+        cpu.setup_once()
+        token = JitCellToken()
+        cpu.compile_loop(loop.inputargs, loop.operations, token)
+
+        # xxx
+
+    call_initial_function(t, g)
+
+#...turn to C here
diff --git a/rpython/jit/backend/x86/assembler.py b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -1791,7 +1791,7 @@
         if IS_X86_32:
             self.mc.MOVZX16(loc_typeid, mem(loc_object, 0))
         else:
-            self.mc.MOVZX32(loc_typeid, mem(loc_object, 0))
+            self.mc.MOV32(loc_typeid, mem(loc_object, 0))
         loc_infobits = addr_add(imm(base_type_info), loc_typeid, scale=shift_by)
         self.mc.TEST(loc_infobits, imm(IS_OBJECT_FLAG))
         #
diff --git a/rpython/jit/backend/x86/regalloc.py b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -438,7 +438,7 @@
         self.perform_guard(op, [x, y], None)
 
     def consider_guard_subclass(self, op):
-        xxx
+        assert 0 # xxx
 
     def _consider_binop_part(self, op, symm=False):
         x = op.getarg(0)
@@ -802,6 +802,7 @@
 
     def _consider_real_call(self, op):
         effectinfo = op.getdescr().get_extra_info()
+        assert effectinfo is not None
         oopspecindex = effectinfo.oopspecindex
         if oopspecindex != EffectInfo.OS_NONE:
             if IS_X86_32:


More information about the pypy-commit mailing list