[pypy-svn] r77374 - in pypy/branch/jit-loop-invaraints/pypy/jit/metainterp: . optimizeopt test
hakanardo at codespeak.net
hakanardo at codespeak.net
Sun Sep 26 10:51:37 CEST 2010
Author: hakanardo
Date: Sun Sep 26 10:51:35 2010
New Revision: 77374
Modified:
pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/compile.py
pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/history.py
pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/optimize.py
pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/optimizeopt/invariant.py
pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/simple_optimize.py
pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/test/test_basic.py
pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/warmstate.py
Log:
Passing all metainterp tests except optimizeopt
Modified: pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/compile.py
==============================================================================
--- pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/compile.py (original)
+++ pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/compile.py Sun Sep 26 10:51:35 2010
@@ -501,9 +501,7 @@
new_loop.greenkey = self.original_greenkey
new_loop.inputargs = self.redkey
new_loop.token = new_loop_token
- print
- print "HEEEEEEEEEEEEEEEEEEEERRRRRRRRRRRRRRRRRRRRRRRR"
- print new_loop_token
+
send_loop_to_backend(metainterp_sd, new_loop, "entry bridge")
# send the new_loop to warmspot.py, to be called directly the next time
jitdriver_sd.warmstate.attach_unoptimized_bridge_from_interp(
@@ -535,13 +533,10 @@
new_loop.operations = [op.clone() for op in metainterp.history.operations]
metainterp_sd = metainterp.staticdata
state = metainterp.jitdriver_sd.warmstate
- debug_print("\ncnb: ")
try:
target_loop_token = state.optimize_bridge(metainterp_sd,
old_loop_tokens,
new_loop)
- debug_print("cnb: ", new_loop.operations[-1], target_loop_token)
-
except InvalidLoop:
# XXX I am fairly convinced that optimize_bridge cannot actually raise
# InvalidLoop
Modified: pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/history.py
==============================================================================
--- pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/history.py (original)
+++ pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/history.py Sun Sep 26 10:51:35 2010
@@ -120,7 +120,8 @@
raise NotImplementedError
class AbstractDescr(AbstractValue):
- __slots__ = ()
+ __slots__ = ('inlinable',)
+ inlinable = None
def repr_of_descr(self):
return '%r' % (self,)
@@ -703,7 +704,6 @@
# specnodes = ...
# and more data specified by the backend when the loop is compiled
number = 0
- inlinable = None
def __init__(self, number=0):
self.number = number
Modified: pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/optimize.py
==============================================================================
--- pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/optimize.py (original)
+++ pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/optimize.py Sun Sep 26 10:51:35 2010
@@ -1,4 +1,4 @@
-from pypy.rlib.debug import debug_start, debug_stop
+from pypy.rlib.debug import debug_start, debug_stop, debug_print
# ____________________________________________________________
Modified: pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/optimizeopt/invariant.py
==============================================================================
--- pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/optimizeopt/invariant.py (original)
+++ pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/optimizeopt/invariant.py Sun Sep 26 10:51:35 2010
@@ -2,6 +2,7 @@
from pypy.jit.metainterp.resoperation import rop, ResOperation
from pypy.jit.metainterp.compile import prebuiltNotSpecNode
from pypy.rlib.debug import debug_print
+from pypy.jit.metainterp.history import Const
class OptInvariant(Optimization):
"""Move loop invariant code into a preamble.
@@ -25,16 +26,7 @@
v = self.getvalue(arg_in)
v.invariant = True
- def invariant_boxes(self):
- invariant_boxes = []
- for op in self.optimizer.preamble:
- if self.get_constant_box(op.result) is None:
- v = self.getvalue(op.result)
- v.invariant = True
- box = v.force_box()
- if box and box not in invariant_boxes:
- invariant_boxes.append(box)
- return invariant_boxes
+ self.invariant_boxes = []
def propagate_forward(self, op):
@@ -46,7 +38,7 @@
preamble = loop.preamble
preamble.inputargs = loop.inputargs[:]
- invariant_boxes = self.invariant_boxes()
+ invariant_boxes = self.invariant_boxes
loop.inputargs.extend(invariant_boxes)
op.args = op.args + invariant_boxes
preamble.operations = self.optimizer.preamble
@@ -79,6 +71,10 @@
if self.get_constant_box(op.result) is None:
v = self.getvalue(op.result)
v.invariant = True
+ box = v.force_box()
+ if box and box not in self.invariant_boxes:
+ self.invariant_boxes.append(box)
+
return
@@ -107,7 +103,10 @@
argmap[loop.inputargs[i]] = inputargs[i]
for op in loop.operations:
newop = op.clone()
- newop.args = [argmap[a] for a in op.args]
+ for i in range(len(op.args)):
+ a = op.args[i]
+ if not isinstance(a, Const):
+ newop.args[i] = argmap[a]
if op.result:
newop.result = op.result.clonebox()
argmap[op.result] = newop.result
Modified: pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/simple_optimize.py
==============================================================================
--- pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/simple_optimize.py (original)
+++ pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/simple_optimize.py Sun Sep 26 10:51:35 2010
@@ -4,6 +4,7 @@
from pypy.jit.metainterp.resoperation import rop, ResOperation
from pypy.jit.metainterp import resume, compile
+from pypy.rlib.debug import debug_print
EMPTY_VALUES = {}
@@ -47,4 +48,5 @@
def optimize_bridge(metainterp_sd, old_loops, loop):
optimize_loop(metainterp_sd, [], loop)
+ loop.operations[-1].descr = old_loops[0]
return old_loops[0]
Modified: pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/test/test_basic.py (original)
+++ pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/test/test_basic.py Sun Sep 26 10:51:35 2010
@@ -340,7 +340,7 @@
'int_mul': 1, 'int_mul_ovf': 1,
'jump': 1})
- def test_loop_invariant_mul_guard(self):
+ def test_loop_invariant_mul_bridge1(self):
myjitdriver = JitDriver(greens = [], reds = ['y', 'res', 'x'])
def f(x, y):
res = 0
@@ -356,6 +356,26 @@
assert res == 919
self.check_loop_count(3)
+ def test_loop_invariant_mul_bridge_maintaining(self):
+ myjitdriver = JitDriver(greens = [], reds = ['y', 'res', 'x'])
+ def f(x, y):
+ res = 0
+ while y > 0:
+ myjitdriver.can_enter_jit(x=x, y=y, res=res)
+ myjitdriver.jit_merge_point(x=x, y=y, res=res)
+ res += x * x
+ if y<8:
+ res += 1
+ y -= 1
+ return res
+ res = self.meta_interp(f, [6, 16])
+ assert res == 583
+ self.check_loop_count(3)
+ self.check_loops({'int_lt': 1, 'int_gt': 1,
+ 'guard_false': 1, 'guard_true': 1,
+ 'int_sub': 2, 'int_mul': 2, 'int_add': 2,
+ 'jump': 3})
+
def test_loop_invariant_intbox(self):
myjitdriver = JitDriver(greens = [], reds = ['y', 'res', 'x'])
class I:
Modified: pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/warmstate.py
==============================================================================
--- pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/warmstate.py (original)
+++ pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/warmstate.py Sun Sep 26 10:51:35 2010
@@ -13,6 +13,7 @@
from pypy.rlib.debug import debug_start, debug_stop, debug_print
from pypy.jit.metainterp import history
from pypy.jit.codewriter import support, heaptracker
+from pypy.rlib.debug import debug_print
# ____________________________________________________________
More information about the Pypy-commit
mailing list