[pypy-svn] r77762 - in pypy/branch/jit-unroll-loops/pypy/jit/metainterp: optimizeopt test
hakanardo at codespeak.net
hakanardo at codespeak.net
Sun Oct 10 19:06:17 CEST 2010
Author: hakanardo
Date: Sun Oct 10 19:06:15 2010
New Revision: 77762
Modified:
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.py
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/unroll.py
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/virtualize.py
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_virtual.py
Log:
test_basic.py and test_virtual.py probably ok
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.py Sun Oct 10 19:06:15 2010
@@ -209,6 +209,7 @@
# the following assert should always be true for now,
# because invalid loops that would fail it are detected
# earlier, in optimizefindnode.py.
+ raise InvalidLoop
assert realclassbox.same_constant(expectedclassbox)
return
emit_operation = True
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/unroll.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/unroll.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/unroll.py Sun Oct 10 19:06:15 2010
@@ -19,6 +19,7 @@
if op.getopnum() == rop.JUMP:
loop = self.optimizer.loop
loop.preamble.operations = self.optimizer.newoperations
+ print '\n'.join([str(o) for o in loop.preamble.operations])
self.optimizer.newoperations = []
jump_args = op.getarglist()
op.initarglist([])
@@ -39,7 +40,8 @@
argmap[loop_args[i]] = jump_args[i]
for v in self.optimizer.values.values():
- v.fromstart = True
+ if not v.is_constant() and v.box:
+ v.fromstart = True
self.snapshot_map ={None: None}
@@ -47,9 +49,11 @@
for arg in jump_args:
for a in self.getvalue(arg).get_forced_boxes():
if not isinstance(a, Const):
- inputargs.append(a)
-
+ inputargs.append(a)
+ print "Inputargs: ", inputargs
+
for op in loop_operations:
+ #import pdb; pdb.set_trace()
newop = op.clone()
newop.initarglist([self.inline_arg(a) for a in newop.getarglist()])
if op.result:
@@ -73,14 +77,20 @@
self.emit_operation(newop)
for op in self.optimizer.newoperations[current:]:
+ print "E: ", op
if op.is_guard():
op.getdescr().rd_snapshot = None #FIXME: In the right place?
-
- for a in op.getarglist():
+ args = op.getarglist()
+ if op.is_guard():
+ args = args + op.getfailargs()
+ for a in args:
if not isinstance(a, Const) and a in self.optimizer.values:
v = self.getvalue(a)
if v.fromstart and a not in inputargs:
+ print "Arg: ", a
inputargs.append(a)
+ if op.getopnum() == rop.JUMP:
+ op.initarglist(op.getarglist() + [argmap[a]])
return inputargs
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/virtualize.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/virtualize.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/virtualize.py Sun Oct 10 19:06:15 2010
@@ -122,11 +122,14 @@
fieldvalue.get_args_for_fail(modifier)
def get_forced_boxes(self):
- lst = self._get_field_descr_list()
- fieldboxes = []
- for ofs in lst:
- fieldboxes.extend(self._fields[ofs].get_forced_boxes())
- return fieldboxes
+ if self.box is None:
+ lst = self._get_field_descr_list()
+ fieldboxes = []
+ for ofs in lst:
+ fieldboxes.extend(self._fields[ofs].get_forced_boxes())
+ return fieldboxes
+ else:
+ return [self.box]
class VirtualValue(AbstractVirtualStructValue):
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_virtual.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_virtual.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_virtual.py Sun Oct 10 19:06:15 2010
@@ -49,6 +49,24 @@
res = self.meta_interp(f, [10])
assert res == f(10)
self.check_loop_count(1)
+ self.check_loops(new=0, float_add=0)
+
+ def test_virtualized_float2(self):
+ myjitdriver = JitDriver(greens = [], reds = ['n', 'node'])
+ def f(n):
+ node = self._new()
+ node.floatval = 0.0
+ while n > 0:
+ myjitdriver.can_enter_jit(n=n, node=node)
+ myjitdriver.jit_merge_point(n=n, node=node)
+ next = self._new()
+ next.floatval = node.floatval + .5
+ node = next
+ n -= 1
+ return node.floatval
+ res = self.meta_interp(f, [10])
+ assert res == f(10)
+ self.check_loop_count(1)
self.check_loops(new=0, float_add=1)
def test_virtualized_2(self):
@@ -143,10 +161,10 @@
node = next
n -= 1
return node.value
- res = self.meta_interp(f, [11], policy=StopAtXPolicy(externfn))
- assert res == f(11)
+ res = self.meta_interp(f, [15], policy=StopAtXPolicy(externfn))
+ assert res == f(15)
self.check_loop_count(2)
- self.check_loops(**{self._new_op: 2}) # XXX was 1
+ self.check_loops(**{self._new_op: 1})
self.check_loops(int_mul=0, call=1)
def test_two_virtuals(self):
More information about the Pypy-commit
mailing list