[pypy-commit] pypy jitframe-on-heap: work on test_zll_random
fijal
noreply at buildbot.pypy.org
Wed Jan 23 15:56:19 CET 2013
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: jitframe-on-heap
Changeset: r60377:19aef0a0fee3
Date: 2013-01-23 16:55 +0200
http://bitbucket.org/pypy/pypy/changeset/19aef0a0fee3/
Log: work on test_zll_random
diff --git a/rpython/jit/backend/test/test_ll_random.py b/rpython/jit/backend/test/test_ll_random.py
--- a/rpython/jit/backend/test/test_ll_random.py
+++ b/rpython/jit/backend/test/test_ll_random.py
@@ -258,7 +258,8 @@
names = names[1:]
name = r.choice(names)
descr = builder.cpu.fielddescrof(S, name)
- descr._random_info = 'cpu.fielddescrof(%s, %r)' % (S._name, name)
+ descr._random_info = 'cpu.fielddescrof(..., %r)' % (name,)
+ descr._random_type = S
TYPE = getattr(S, name)
return v, descr, TYPE
@@ -279,8 +280,8 @@
v_index = builder.get_index(len(array), r)
name = r.choice(A.OF._names)
descr = builder.cpu.interiorfielddescrof(A, name)
- descr._random_info = 'cpu.interiorfielddescrof(%s, %r)' % (A.OF._name,
- name)
+ descr._random_info = 'cpu.interiorfielddescrof(..., %r)' % (name,)
+ descr._random_type = A
TYPE = getattr(A.OF, name)
return v, v_index, descr, TYPE
@@ -320,7 +321,8 @@
class NewOperation(test_random.AbstractOperation):
def size_descr(self, builder, S):
descr = builder.cpu.sizeof(S)
- descr._random_info = 'cpu.sizeof(%s)' % (S._name,)
+ descr._random_info = 'cpu.sizeof(...)'
+ descr._random_type = S
return descr
def produce_into(self, builder, r):
@@ -339,6 +341,7 @@
def array_descr(self, builder, A):
descr = builder.cpu.arraydescrof(A)
descr._random_info = 'cpu.arraydescrof(...)'
+ descr._random_type = A
return descr
class GetArrayItemOperation(ArrayOperation):
diff --git a/rpython/jit/backend/test/test_random.py b/rpython/jit/backend/test/test_random.py
--- a/rpython/jit/backend/test/test_random.py
+++ b/rpython/jit/backend/test/test_random.py
@@ -10,6 +10,7 @@
from rpython.jit.metainterp.executor import execute_nonspec
from rpython.jit.metainterp.resoperation import opname
from rpython.jit.codewriter import longlong
+from rpython.rtyper.lltypesystem import lltype, rstr, rclass
class PleaseRewriteMe(Exception):
pass
@@ -89,13 +90,14 @@
seen[v] = True
return subset
- def process_operation(self, s, op, names, namespace):
+ def process_operation(self, s, op, names):
args = []
for v in op.getarglist():
if v in names:
args.append(names[v])
elif isinstance(v, ConstPtr):
- args.append('ConstPtr(...')
+ assert not v.value # otherwise should be in the names
+ args.append('ConstPtr(lltype.nullptr(llmemory.GCREF.TO))')
elif isinstance(v, ConstFloat):
args.append('ConstFloat(longlong.getfloatstorage(%r))'
% v.getfloat())
@@ -107,9 +109,12 @@
descrstr = ''
else:
try:
- descrstr = ', ' + op.getdescr()._random_info
+ descrstr = getattr(op.getdescr(), '_random_info')
except AttributeError:
- descrstr = ', descr=' + self.descr_counters.get(op.getdescr(), '...')
+ if op.opnum == rop.LABEL:
+ descrstr = 'TargetToken()'
+ else:
+ descrstr = ', descr=' + self.descr_counters.get(op.getdescr(), '...')
print >>s, ' ResOperation(rop.%s, [%s], %s%s),' % (
opname[op.getopnum()], ', '.join(args), names[op.result], descrstr)
@@ -138,11 +143,61 @@
if arg not in names:
writevar(arg, 'const_ptr')
+ def type_descr(TP, num):
+ if TP in TYPE_NAMES:
+ return TYPE_NAMES[TP]
+ if isinstance(TP, lltype.Ptr):
+ return "lltype.Ptr(%s)" % type_descr(TP.TO, num)
+ if isinstance(TP, lltype.Struct):
+ if TP._gckind == 'gc':
+ pref = 'Gc'
+ else:
+ pref = ''
+ fields = []
+ for k in TP._names:
+ v = getattr(TP, k)
+ fields.append('("%s", %s)' % (k, type_descr(v, num)))
+ return "lltype.%sStruct('S%d', %s)" % (pref, num,
+ ", ".join(fields))
+ elif isinstance(TP, lltype.GcArray):
+ return "lltype.GcArray(%s)" % (type_descr(TP.OF, num),)
+ if TP._name.upper() == TP._name:
+ return 'rffi.%s' % TP._name
+ return 'lltype.%s' % TP._name
+
s = output
names = {None: 'None'}
- subops = []
+ TYPE_NAMES = {
+ rstr.STR: 'rstr.STR',
+ rstr.UNICODE: 'rstr.UNICODE',
+ rclass.OBJECT: 'rclass.OBJECT',
+ rclass.OBJECT_VTABLE: 'rclass.OBJECT_VTABLE',
+ }
+ for op in self.loop.operations:
+ descr = op.getdescr()
+ if hasattr(descr, '_random_info'):
+ num = len(TYPE_NAMES)
+ tp_name = 'S' + str(num)
+ descr._random_info = descr._random_info.replace('...', tp_name)
+ print >>s, " %s = %s" % (tp_name,
+ type_descr(descr._random_type, num))
+ TYPE_NAMES[descr._random_type] = tp_name
#
def writevar(v, nameprefix, init=''):
+ if nameprefix == 'const_ptr':
+ if not v.value:
+ return 'lltype.nullptr(llmemory.GCREF.TO)'
+ TYPE = v.value._obj.ORIGTYPE
+ cont = lltype.cast_opaque_ptr(TYPE, v.value)
+ if TYPE.TO._is_varsize():
+ if isinstance(TYPE.TO, lltype.GcStruct):
+ lgt = len(cont.chars)
+ else:
+ lgt = len(cont)
+ init = 'lltype.malloc(%s, %d)' % (TYPE_NAMES[TYPE.TO],
+ lgt)
+ else:
+ init = 'lltype.malloc(%s)' % TYPE_NAMES[TYPE.TO]
names[v] = '%s%d' % (nameprefix, len(names))
print >>s, ' %s = %s(%s)' % (names[v], v.__class__.__name__,
init)
@@ -163,7 +218,11 @@
', '.join([names[v] for v in self.loop.inputargs]))
print >>s, ' operations = ['
for op in self.loop.operations:
- self.process_operation(s, op, names, subops)
+ self.process_operation(s, op, names)
+ for i, op in enumerate(self.loop.operations):
+ if op.is_guard():
+ fa = ", ".join([names[v] for v in op.getfailargs()])
+ print >>s, ' operations[%d].setfailargs([%s])' % (i, fa)
print >>s, ' ]'
if fail_descr is None:
print >>s, ' looptoken = JitCellToken()'
@@ -179,7 +238,7 @@
else:
vals.append("%r" % v.getint())
print >>s, ' loop_args = [%s]' % ", ".join(vals)
- print >>s, ' op = cpu.execute_token(looptoken, *loop_args)'
+ print >>s, ' frame = cpu.execute_token(looptoken, *loop_args)'
if self.should_fail_by is None:
fail_args = self.loop.operations[-1].getarglist()
else:
@@ -187,9 +246,9 @@
for i, v in enumerate(fail_args):
if isinstance(v, (BoxFloat, ConstFloat)):
print >>s, (' assert longlong.getrealfloat('
- 'cpu.get_float_value(%d)) == %r' % (i, v.value))
+ 'cpu.get_float_value(frame, %d)) == %r' % (i, v.value))
else:
- print >>s, (' assert cpu.get_int_value(%d) == %d'
+ print >>s, (' assert cpu.get_int_value(frame, %d) == %d'
% (i, v.value))
self.names = names
s.flush()
diff --git a/rpython/jit/backend/x86/test/test_regalloc2.py b/rpython/jit/backend/x86/test/test_regalloc2.py
--- a/rpython/jit/backend/x86/test/test_regalloc2.py
+++ b/rpython/jit/backend/x86/test/test_regalloc2.py
@@ -1,5 +1,6 @@
from rpython.jit.metainterp.history import ResOperation, BoxInt, ConstInt,\
- BasicFailDescr, JitCellToken, BasicFinalDescr, TargetToken
+ BasicFailDescr, JitCellToken, BasicFinalDescr, TargetToken, ConstPtr,\
+ BoxPtr
from rpython.jit.metainterp.resoperation import rop
from rpython.jit.backend.detect_cpu import getcpuclass
from rpython.jit.backend.x86.arch import WORD
@@ -302,7 +303,7 @@
fptr = llhelper(FPTR, f)
calldescr = cpu.calldescrof(FPTR.TO, FPTR.TO.ARGS, FPTR.TO.RESULT,
EffectInfo.MOST_GENERAL)
- return fptr, calldescr
+ return rffi.cast(lltype.Signed, fptr), calldescr
def getexception():
xtp = lltype.malloc(rclass.OBJECT_VTABLE, immortal=True)
@@ -312,3 +313,4 @@
hints={'vtable': xtp._obj})
xptr = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(X))
return xptr, xtp
+
More information about the pypy-commit
mailing list