Author: Armin Rigo <ar...@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: _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit