[pypy-svn] r62135 - in pypy/branch/pyjitpl5/pypy/jit: backend/llgraph metainterp metainterp/test
arigo at codespeak.net
arigo at codespeak.net
Wed Feb 25 13:09:41 CET 2009
Author: arigo
Date: Wed Feb 25 13:09:39 2009
New Revision: 62135
Modified:
pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/llimpl.py
pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/runner.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/history.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/specnode.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_send.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_zrpy_basic.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_zrpy_send.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/virtualizable.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/warmspot.py
Log:
RPythonification. All tests pass, apart from
test_zrpy_virtualizable.
Modified: pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/llimpl.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/llimpl.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/llimpl.py Wed Feb 25 13:09:39 2009
@@ -141,7 +141,7 @@
else:
return repr(x)
-def repr_list(lst, types, cpu):
+def repr_list(lst, types, memocast):
res_l = []
if types and types[-1] == 'varargs':
types = types[:-1] + ('int',) * (len(lst) - len(types) + 1)
@@ -152,12 +152,12 @@
else:
extraarg = None
if isinstance(elem, Constant):
- res_l.append('(%s)' % repr1(elem, tp, cpu, extraarg))
+ res_l.append('(%s)' % repr1(elem, tp, memocast, extraarg))
else:
- res_l.append(repr1(elem, tp, cpu, extraarg))
+ res_l.append(repr1(elem, tp, memocast, extraarg))
return '[%s]' % (', '.join(res_l))
-def repr1(x, tp, cpu, extraarg):
+def repr1(x, tp, memocast, extraarg):
if tp == "intorptr":
if extraarg % 2:
tp = "ptr"
@@ -172,7 +172,7 @@
return '(* None)'
if isinstance(x, int):
# XXX normalize?
- ptr = str(cpu.cast_int_to_adr(x))
+ ptr = str(cast_int_to_adr(memocast, x))
else:
if getattr(x, '_fake', None):
return repr(x)
@@ -270,9 +270,9 @@
op.jump_target_index = loop_target_index
if op.opname == 'jump':
if loop_target == loop and loop_target_index == 0:
- log.trace("compiling new loop")
+ log.info("compiling new loop")
else:
- log.trace("compiling new bridge")
+ log.info("compiling new bridge")
def compile_add_failnum(loop, failnum):
loop = _from_opaque(loop)
@@ -296,16 +296,15 @@
class Frame(object):
- def __init__(self, cpu):
- assert cpu
+ def __init__(self, memocast):
llinterp = LLInterpreter(_rtyper) # '_rtyper' set by CPU
llinterp.traceback_frames = []
self.llframe = ExtendedLLFrame(None, None, llinterp)
- self.llframe.cpu = cpu
+ self.llframe.memocast = memocast
self.llframe.last_exception = None
self.llframe.last_exception_handled = True
- self.verbose = False # cpu is not None
- self.cpu = cpu
+ self.verbose = False
+ self.memocast = memocast
def getenv(self, v):
if isinstance(v, Constant):
@@ -402,10 +401,10 @@
extraarg = values[1]
else:
extraarg = None
- resdata = '-> ' + repr1(res, restype, self.cpu, extraarg)
+ resdata = '-> ' + repr1(res, restype, self.memocast, extraarg)
# fish the types
log.cpu('\t%s %s %s' % (opname, repr_list(values, argtypes,
- self.cpu), resdata))
+ self.memocast), resdata))
if res is None:
return []
elif isinstance(res, list):
@@ -417,9 +416,9 @@
TP = lltype.typeOf(x)
if isinstance(TP, lltype.Ptr):
assert TP.TO._gckind == 'raw'
- return self.cpu.cast_adr_to_int(llmemory.cast_ptr_to_adr(x))
+ return cast_adr_to_int(self.memocast, llmemory.cast_ptr_to_adr(x))
if TP == llmemory.Address:
- return self.cpu.cast_adr_to_int(x)
+ return cast_adr_to_int(self.memocast, x)
return lltype.cast_primitive(lltype.Signed, x)
def as_ptr(self, x):
@@ -434,8 +433,8 @@
log.trace('ran %d operations, %d jumps' % (count, count_jumps))
-def new_frame(cpu):
- frame = Frame(cpu)
+def new_frame(memocast):
+ frame = Frame(memocast)
return _to_opaque(frame)
def frame_clear(frame, loop, opindex):
@@ -581,13 +580,13 @@
def op_guard_nonnull(self, ptr):
if lltype.typeOf(ptr) != llmemory.GCREF:
- ptr = self.cpu.cast_int_to_adr(ptr)
+ ptr = cast_int_to_adr(self.memocast, ptr)
if not ptr:
raise GuardFailed
def op_guard_isnull(self, ptr):
if lltype.typeOf(ptr) != llmemory.GCREF:
- ptr = self.cpu.cast_int_to_adr(ptr)
+ ptr = cast_int_to_adr(self.memocast, ptr)
if ptr:
raise GuardFailed
@@ -621,7 +620,7 @@
def op_guard_class(self, value, expected_class):
value = lltype.cast_opaque_ptr(rclass.OBJECTPTR, value)
expected_class = llmemory.cast_adr_to_ptr(
- self.cpu.cast_int_to_adr(expected_class),
+ cast_int_to_adr(self.memocast, expected_class),
rclass.CLASSTYPE)
if value.typeptr != expected_class:
raise GuardFailed
@@ -643,7 +642,7 @@
def op_guard_exception(self, expected_exception):
expected_exception = llmemory.cast_adr_to_ptr(
- self.cpu.cast_int_to_adr(expected_exception),
+ cast_int_to_adr(self.memocast, expected_exception),
rclass.CLASSTYPE)
assert expected_exception
if self.last_exception:
@@ -673,7 +672,7 @@
def op_getfield_raw(self, intval, fielddesc):
STRUCT, fieldname = symbolic.TokenToField[fielddesc/2]
- ptr = llmemory.cast_adr_to_ptr(self.cpu.cast_int_to_adr(intval),
+ ptr = llmemory.cast_adr_to_ptr(cast_int_to_adr(self.memocast, intval),
lltype.Ptr(STRUCT))
return getattr(ptr, fieldname)
@@ -689,25 +688,25 @@
if isinstance(FIELDTYPE, lltype.Ptr):
assert FIELDTYPE.TO._gckind == 'raw'
newvalue = llmemory.cast_adr_to_ptr(
- self.cpu.cast_int_to_adr(newvalue),
+ cast_int_to_adr(self.memocast, newvalue),
FIELDTYPE)
elif FIELDTYPE == llmemory.Address:
- newvalue = self.cpu.cast_int_to_adr(newvalue)
+ newvalue = cast_int_to_adr(self.memocast, newvalue)
setattr(ptr, fieldname, newvalue)
def op_setfield_raw(self, intval, fielddesc, newvalue):
- ptr = llmemory.cast_adr_to_ptr(self.cpu.cast_int_to_adr(intval),
+ ptr = llmemory.cast_adr_to_ptr(cast_int_to_adr(self.memocast, intval),
lltype.Ptr(STRUCT))
self.op_setfield_gc(ptr, fielddesc, newvalue)
def op_ooisnull(self, ptr):
if lltype.typeOf(ptr) != llmemory.GCREF:
- ptr = self.cpu.cast_int_to_adr(ptr)
+ ptr = cast_int_to_adr(self.memocast, ptr)
return not ptr
def op_oononnull(self, ptr):
if lltype.typeOf(ptr) != llmemory.GCREF:
- ptr = self.cpu.cast_int_to_adr(ptr)
+ ptr = cast_int_to_adr(self.memocast, ptr)
return bool(ptr)
def op_oois(self, ptr1, ptr2):
@@ -745,7 +744,7 @@
self.last_exception = None
def do_call(self, f, *args):
- ptr = self.cpu.cast_int_to_adr(f).ptr
+ ptr = cast_int_to_adr(self.memocast, f).ptr
FUNC = lltype.typeOf(ptr).TO
ARGS = FUNC.ARGS
args = list(args)
Modified: pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/runner.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/runner.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/runner.py Wed Feb 25 13:09:39 2009
@@ -22,7 +22,7 @@
self.stats = stats or MiniStats()
self.stats.exec_counters = {}
self.stats.exec_jumps = 0
- self.memo_cast = lltype.nullptr(llimpl.MEMOCAST.TO)
+ self.memo_cast = llimpl.new_memo_cast()
llimpl._stats = self.stats
llimpl._rtyper = self.rtyper
if translate_support_code:
@@ -103,7 +103,7 @@
follow the merge point.
"""
assert result_type is None or isinstance(result_type, str)
- frame = llimpl.new_frame(self)
+ frame = llimpl.new_frame(self.memo_cast)
llimpl.frame_clear(frame, merge_point._compiled, merge_point._opindex)
for box in valueboxes:
if isinstance(box, history.BoxInt):
@@ -122,7 +122,7 @@
if opname[0] == '#':
return None
c = self.get_compiled_single_op(opname, valueboxes, result_type)
- frame = llimpl.new_frame(self)
+ frame = llimpl.new_frame(self.memo_cast)
llimpl.frame_clear(frame, c, 0)
for box in valueboxes:
if box.type == 'int':
@@ -269,8 +269,6 @@
return ofs_length
def cast_adr_to_int(self, adr):
- if not self.memo_cast:
- self.memo_cast = llimpl.new_memo_cast()
return llimpl.cast_adr_to_int(self.memo_cast, adr)
def cast_int_to_adr(self, int):
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/history.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/history.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/history.py Wed Feb 25 13:09:39 2009
@@ -69,6 +69,7 @@
__slots__ = ()
def _new(x, cpu):
+ "NOT_RPYTHON"
T = lltype.typeOf(x)
kind = getkind(T)
if kind == "int":
@@ -199,6 +200,7 @@
@staticmethod
def _new(x, cpu):
+ "NOT_RPYTHON"
kind = getkind(lltype.typeOf(x))
if kind == "int":
intval = lltype.cast_primitive(lltype.Signed, x)
@@ -438,7 +440,7 @@
if not canfold:
self.record(step, argboxes, resboxes)
return resboxes
- execute_and_record._annspecialcase_ = 'specialize:arg(3, 4)'
+ execute_and_record._annspecialcase_ = 'specialize:arg(4)'
def record(self, opname, argboxes, resboxes, opcls=ResOperation):
# xxx the indirection from record to _record is to work
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py Wed Feb 25 13:09:39 2009
@@ -1,6 +1,7 @@
import py
from pypy.rpython.lltypesystem import lltype, llmemory, rclass
from pypy.rpython.llinterp import LLException
+from pypy.rpython.annlowlevel import cast_instance_to_base_ptr
from pypy.tool.sourcetools import func_with_new_name
from pypy.rlib.objectmodel import we_are_translated, r_dict
from pypy.rlib.unroll import unrolling_iterable
@@ -629,7 +630,7 @@
if len(resboxes) == 1:
resultbox = resboxes[0]
self.make_result_box(resultbox)
- execute._annspecialcase_ = 'specialize:arg(3, 4)'
+ execute._annspecialcase_ = 'specialize:arg(4)'
def execute_with_exc(self, step, argboxes, result_type, pure=False):
old_index = len(self.metainterp.history.operations)
@@ -641,7 +642,8 @@
raise
etype, evalue = e.args[:2]
else:
- XXX
+ evalue = cast_instance_to_base_ptr(e)
+ etype = evalue.typeptr
if result_type == 'void':
resultboxes = []
else:
@@ -662,7 +664,7 @@
llmemory.cast_ptr_to_adr(etype))
value_as_gcref = lltype.cast_opaque_ptr(llmemory.GCREF, evalue)
return self.metainterp.handle_exception(type_as_int, value_as_gcref)
- execute_with_exc._annspecialcase_ = 'specialize:arg(3, 4)'
+ execute_with_exc._annspecialcase_ = 'specialize:arg(4)'
# ____________________________________________________________
@@ -759,8 +761,8 @@
else:
debug_print('LEAVE')
- def compile_and_run(self, args):
- orig_boxes = self.initialize_state_from_start(args)
+ def compile_and_run(self, *args):
+ orig_boxes = self.initialize_state_from_start(*args)
try:
self.interpret()
assert False, "should always raise"
@@ -843,17 +845,30 @@
specnode.extract_runtime_data(self.cpu, args[i], expanded_args)
return expanded_args
- def initialize_state_from_start(self, args):
+ def _initialize_from_start(self, original_boxes, num_green_args, *args):
+ if args:
+ value = args[0]
+ if isinstance(lltype.typeOf(value), lltype.Ptr):
+ value = lltype.cast_opaque_ptr(llmemory.GCREF, value)
+ if num_green_args > 0:
+ cls = ConstPtr
+ else:
+ cls = BoxPtr
+ else:
+ if num_green_args > 0:
+ cls = ConstInt
+ else:
+ cls = BoxInt
+ box = cls(value)
+ original_boxes.append(box)
+ self._initialize_from_start(original_boxes, num_green_args-1,
+ *args[1:])
+
+ def initialize_state_from_start(self, *args):
self.create_empty_history()
num_green_args = self.num_green_args
original_boxes = []
- for i in range(len(args)):
- value = args[i]
- if i < num_green_args:
- box = Const._new(value, self.cpu)
- else:
- box = Box._new(value, self.cpu)
- original_boxes.append(box)
+ self._initialize_from_start(original_boxes, num_green_args, *args)
# ----- make a new frame -----
self.framestack = []
f = self.newframe(self.portal_code)
@@ -867,7 +882,6 @@
self.history = history.History(self.cpu)
else:
self.history = history.BlackHole(self.cpu)
- self.guard_failure = guard_failure
guard_op = guard_failure.guard_op
boxes_from_frame = []
index = 0
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/specnode.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/specnode.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/specnode.py Wed Feb 25 13:09:39 2009
@@ -10,7 +10,16 @@
resultlist.append(valuebox)
def adapt_to(self, instnode):
- instnode.escaped = True
+ instnode.escaped = True
+
+ def mutate_nodes(self, instnode):
+ raise NotImplementedError
+
+ def equals(self, other):
+ raise NotImplementedError
+
+ def matches(self, other):
+ raise NotImplementedError
class NotSpecNode(SpecNode):
def mutate_nodes(self, instnode):
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_send.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_send.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_send.py Wed Feb 25 13:09:39 2009
@@ -161,8 +161,9 @@
w.foo()
y -= 1
return 42
+ policy = StopAtXPolicy(externfn)
for j in range(69, 75):
- res = self.meta_interp(f, [j], policy=StopAtXPolicy(externfn))
+ res = self.meta_interp(f, [j], policy=policy)
assert res == 42
self.check_loop_count(3)
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_zrpy_basic.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_zrpy_basic.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_zrpy_basic.py Wed Feb 25 13:09:39 2009
@@ -21,9 +21,12 @@
assert res == 490
def test_loop_2(self):
+ jitdriver = JitDriver(greens = [], reds = ['i', 'total'])
def f(i):
total = 0
while i > 3:
+ jitdriver.can_enter_jit(i=i, total=total)
+ jitdriver.jit_merge_point(i=i, total=total)
total += i
if i >= 10:
i -= 2
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_zrpy_send.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_zrpy_send.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_zrpy_send.py Wed Feb 25 13:09:39 2009
@@ -4,8 +4,4 @@
class TestLLSend(test_send.SendTests, LLInterpJitMixin):
- def test_oosend_guard_failure(self):
- py.test.skip("Fails with assertion error")
-
- def test_oosend_guard_failure_2(self):
- py.test.skip("Fails with assertion error")
+ pass
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/virtualizable.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/virtualizable.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/virtualizable.py Wed Feb 25 13:09:39 2009
@@ -1,7 +1,9 @@
from pypy.jit.metainterp import history
from pypy.rpython.lltypesystem import lltype, llmemory
-from pypy.rpython.annlowlevel import llhelper
+from pypy.rpython.annlowlevel import llhelper, cast_base_ptr_to_instance
+from pypy.annotation.model import lltype_to_annotation
+from pypy.rlib.objectmodel import we_are_translated
class VirtualizableDesc(history.AbstractValue):
hash = 0
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/warmspot.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/warmspot.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/warmspot.py Wed Feb 25 13:09:39 2009
@@ -27,12 +27,13 @@
warmrunnerdesc = WarmRunnerDesc(translator, **kwds)
warmrunnerdesc.state.set_param_threshold(3) # for tests
warmrunnerdesc.state.set_param_trace_eagerness(2) # for tests
+ warmrunnerdesc.finish()
return interp.eval_graph(graph, args)
-def rpython_ll_meta_interp(function, args, loops='not used right now', **kwds):
- return ll_meta_interp(function, args,
- translate_support_code=True, backendopt=True,
- **kwds)
+def rpython_ll_meta_interp(function, args, backendopt=True,
+ loops='not used right now', **kwds):
+ return ll_meta_interp(function, args, backendopt=backendopt,
+ translate_support_code=True, **kwds)
def find_can_enter_jit(graphs):
results = []
@@ -86,6 +87,8 @@
self.rewrite_jit_merge_point()
self.metainterp.num_green_args = self.num_green_args
self.metainterp.state = self.state
+
+ def finish(self):
if self.cpu.translate_support_code:
self.annhelper.finish()
@@ -461,7 +464,7 @@
getkeyhash._always_inline_ = True
def compile_and_run(self, argshash, *args):
- loop, boxes = warmrunnerdesc.metainterp.compile_and_run(list(args))
+ loop, boxes = warmrunnerdesc.metainterp.compile_and_run(*args)
if loop:
cpu = warmrunnerdesc.metainterp.cpu
mp = loop.operations[0]
More information about the Pypy-commit
mailing list