[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