Author: Armin Rigo <[email protected]>
Branch: optresult-unroll
Changeset: r79414:18b4835f4afb
Date: 2015-09-04 12:50 +0200
http://bitbucket.org/pypy/pypy/changeset/18b4835f4afb/
Log: Also test some other guards, and run with or without gcremovetypeptr
diff --git a/rpython/jit/backend/llsupport/descr.py
b/rpython/jit/backend/llsupport/descr.py
--- a/rpython/jit/backend/llsupport/descr.py
+++ b/rpython/jit/backend/llsupport/descr.py
@@ -64,7 +64,7 @@
return heaptracker.adr2int(llmemory.cast_ptr_to_adr(self.vtable))
def get_type_id(self):
- assert self.tid != 0
+ assert self.tid
return self.tid
def get_size_descr(gccache, STRUCT,
vtable=lltype.nullptr(rclass.OBJECT_VTABLE)):
@@ -293,7 +293,7 @@
assert False
def get_type_id(self):
- assert self.tid != 0
+ assert self.tid
return self.tid
def repr_of_descr(self):
diff --git a/rpython/jit/backend/llsupport/test/test_zrpy_gc_direct.py
b/rpython/jit/backend/llsupport/test/test_zrpy_gc_direct.py
--- a/rpython/jit/backend/llsupport/test/test_zrpy_gc_direct.py
+++ b/rpython/jit/backend/llsupport/test/test_zrpy_gc_direct.py
@@ -5,13 +5,13 @@
from rpython.jit.metainterp.gc import get_description
from rpython.annotator.listdef import s_list_of_strings
from rpython.rtyper.lltypesystem import lltype, llmemory, rffi
-from rpython.rtyper.rclass import getclassrepr
+from rpython.rtyper.rclass import getclassrepr, getinstancerepr
from rpython.translator.unsimplify import call_initial_function
from rpython.translator.translator import TranslationContext
from rpython.translator.c import genc
-def test_guard_class():
+def run_guards_translated(gcremovetypeptr):
class A(object):
pass
class B(A):
@@ -24,7 +24,7 @@
t = TranslationContext()
t.config.translation.gc = "minimark"
- t.config.translation.gcremovetypeptr = True
+ t.config.translation.gcremovetypeptr = gcremovetypeptr
ann = t.buildannotator()
ann.build_types(main, [s_list_of_strings], main_entry_point=True)
rtyper = t.buildrtyper()
@@ -32,6 +32,8 @@
classdef = ann.bookkeeper.getuniqueclassdef(B)
rclass = getclassrepr(rtyper, classdef)
+ rinstance = getinstancerepr(rtyper, classdef)
+ LLB = rinstance.lowleveltype.TO
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")
@@ -44,7 +46,10 @@
finaldescr = BasicFinalDescr()
faildescr = BasicFailDescr()
- loop = parse("""
+ descr_B = cpu.sizeof(LLB, vtable_B)
+ typeid_B = descr_B.get_type_id()
+
+ loop1 = parse("""
[p0]
guard_class(p0, ConstInt(vtable_B), descr=faildescr) []
finish(descr=finaldescr)
@@ -52,13 +57,44 @@
'faildescr': faildescr,
'vtable_B': vtable_B})
+ loop2 = parse("""
+ [p0]
+ guard_gc_type(p0, ConstInt(typeid_B), descr=faildescr) []
+ finish(descr=finaldescr)
+ """, namespace={'finaldescr': finaldescr,
+ 'faildescr': faildescr,
+ 'typeid_B': typeid_B})
+
+ loop3 = parse("""
+ [p0]
+ guard_is_object(p0, descr=faildescr) []
+ finish(descr=finaldescr)
+ """, namespace={'finaldescr': finaldescr,
+ 'faildescr': faildescr})
+
def g():
cpu.setup_once()
- token = JitCellToken()
- cpu.compile_loop(loop.inputargs, loop.operations, token)
+ token1 = JitCellToken()
+ token2 = JitCellToken()
+ token3 = JitCellToken()
+ cpu.compile_loop(loop1.inputargs, loop1.operations, token1)
+ cpu.compile_loop(loop2.inputargs, loop2.operations, token2)
+ cpu.compile_loop(loop3.inputargs, loop3.operations, token3)
- for x in [A(),B(), C()]:
- p0 = rffi.cast(llmemory.GCREF, x)
+ for token, p0 in [
+ (token1, rffi.cast(llmemory.GCREF, A())),
+ (token1, rffi.cast(llmemory.GCREF, B())),
+ (token1, rffi.cast(llmemory.GCREF, C())),
+
+ (token2, rffi.cast(llmemory.GCREF, A())),
+ (token2, rffi.cast(llmemory.GCREF, B())),
+ (token2, rffi.cast(llmemory.GCREF, C())),
+ (token2, rffi.cast(llmemory.GCREF, [42, 43])),
+
+ (token3, rffi.cast(llmemory.GCREF, A())),
+ (token3, rffi.cast(llmemory.GCREF, B())),
+ (token3, rffi.cast(llmemory.GCREF, [44, 45])),
+ ]:
frame = execute_token(token, p0)
descr = cpu.get_latest_descr(frame)
if descr is finaldescr:
@@ -75,4 +111,22 @@
cbuilder.compile()
data = cbuilder.cmdexec('')
- assert data == 'fail\nmatch\nfail\n'
+ assert data == ('fail\n'
+ 'match\n'
+ 'fail\n'
+
+ 'fail\n'
+ 'match\n'
+ 'fail\n'
+ 'fail\n'
+
+ 'match\n'
+ 'match\n'
+ 'fail\n')
+
+
+def test_guards_translated_with_gctypeptr():
+ run_guards_translated(gcremovetypeptr=False)
+
+def test_guards_translated_without_gctypeptr():
+ run_guards_translated(gcremovetypeptr=True)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit