Author: Maciej Fijalkowski <[email protected]>
Branch: optresult
Changeset: r77877:06323de370d7
Date: 2015-06-05 09:18 +0200
http://bitbucket.org/pypy/pypy/changeset/06323de370d7/
Log: start fighting with unrolling
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -144,7 +144,7 @@
self.optimize_loop(ops, expected)
def test_constfold_all(self):
- from rpython.jit.metainterp.executor import _execute_nonspec
+ from rpython.jit.metainterp.executor import _execute_arglist
import random
for opnum in range(rop.INT_ADD, rop.SAME_AS_I+1):
try:
@@ -168,7 +168,7 @@
jump()
""" % (op.lower(), ', '.join(map(str, args)))
argboxes = [InputArgInt(a) for a in args]
- expected_value = _execute_nonspec(self.cpu, None, opnum, argboxes)
+ expected_value = _execute_arglist(self.cpu, None, opnum, argboxes)
expected = """
[]
escape_n(%d)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py
b/rpython/jit/metainterp/optimizeopt/test/test_util.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_util.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py
@@ -395,6 +395,8 @@
from rpython.jit.metainterp.optimizeopt.util import args_dict
self.loop = loop
+ operations = loop.operations
+ inputargs = loop.inputargs
loop.call_pure_results = args_dict()
if call_pure_results is not None:
for k, v in call_pure_results.items():
@@ -405,10 +407,13 @@
if hasattr(self, 'callinfocollection'):
metainterp_sd.callinfocollection = self.callinfocollection
#
- return optimize_trace(metainterp_sd, None, loop,
+ state = optimize_trace(metainterp_sd, None, loop,
self.enable_opts,
start_state=start_state,
export_state=export_state)
+ compile.forget_optimization_info(operations)
+ compile.forget_optimization_info(inputargs)
+ return state
def unroll_and_optimize(self, loop, call_pure_results=None):
metainterp_sd = FakeMetaInterpStaticData(self.cpu)
@@ -421,7 +426,6 @@
jump_args = jumpop.getarglist()[:]
operations = operations[:-1]
- xxx
preamble = TreeLoop('preamble')
preamble.inputargs = inputargs
@@ -436,10 +440,9 @@
assert preamble.operations[-1].getopnum() == rop.LABEL
loop.operations = [preamble.operations[-1]] + \
- cloned_operations + \
- [ResOperation(rop.JUMP, [memo.get(a, a) for a in
jump_args],
+ operations + \
+ [ResOperation(rop.JUMP, jump_args[:],
descr=token)]
- #[inliner.inline_op(jumpop)]
assert loop.operations[-1].getopnum() == rop.JUMP
assert loop.operations[0].getopnum() == rop.LABEL
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py
b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -175,11 +175,11 @@
def export_state(self, targetop):
original_jump_args = targetop.getarglist()
- jump_args = [self.getvalue(a).get_key_box() for a in
original_jump_args]
+ jump_args = [self.get_box_replacement(a) for a in original_jump_args]
virtual_state = self.get_virtual_state(jump_args)
- values = [self.getvalue(arg) for arg in jump_args]
+ values = [self.getinfo(arg) for arg in jump_args]
inputargs = virtual_state.make_inputargs(values, self.optimizer)
short_inputargs = virtual_state.make_inputargs(values, self.optimizer,
keyboxes=True)
@@ -401,6 +401,7 @@
# short[i] = op
# Clone ops and boxes to get private versions and
+ return
short_inputargs = short[0].getarglist()
boxmap = {}
newargs = [None] * len(short_inputargs)
@@ -411,8 +412,8 @@
else:
newargs[i] = a.clone_input_arg()
boxmap[a] = newargs[i]
- memo = Memo(short_inputargs, newargs)
- target_token.assumed_classes = {}
+ #memo = Memo(short_inputargs, newargs)
+ #target_token.assumed_classes = {}
for i in range(len(short)):
op = short[i]
newop = op.clone(memo)
diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py
b/rpython/jit/metainterp/optimizeopt/virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py
@@ -457,7 +457,8 @@
self.info_counter = -1
self.numnotvirtuals = 0
for s in state:
- s.enum(self)
+ if s:
+ s.enum(self)
def generalization_of(self, other, bad=None, cpu=None):
state = GenerateGuardState(cpu=cpu, bad=bad)
@@ -528,6 +529,9 @@
return self.optimizer.getvalue(box)
def state(self, box):
+ if box.type == 'r':
+ xxxx
+ return None
value = self.getvalue(box)
box = value.get_key_box()
try:
@@ -551,12 +555,15 @@
opt = self.optimizer.optearlyforce
else:
opt = self.optimizer
- values = [self.getvalue(box).force_at_end_of_preamble(already_forced,
- opt)
- for box in jump_args]
+ for box in jump_args:
+ if box.type == 'r':
+ zxsadsadsa
+ #values = [self.getvalue(box).force_at_end_of_preamble(already_forced,
+ # opt)
+ # for box in jump_args]
- for value in values:
- value.visitor_walk_recursive(self)
+ #for value in values:
+ # value.visitor_walk_recursive(self)
return VirtualState([self.state(box) for box in jump_args])
def visit_not_virtual(self, value):
diff --git a/rpython/jit/metainterp/resoperation.py
b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -122,6 +122,7 @@
def copy_and_change(self, opnum, args=None, descr=None):
"shallow copy: the returned operation is meant to be used in place of
self"
+ # XXX specialize
from rpython.jit.metainterp.history import DONT_CHANGE
if args is None:
diff --git a/rpython/jit/tool/oparser.py b/rpython/jit/tool/oparser.py
--- a/rpython/jit/tool/oparser.py
+++ b/rpython/jit/tool/oparser.py
@@ -28,19 +28,10 @@
if args is not None:
op.initarglist(args)
else:
- op.initarglist(self._args)
+ op.initarglist(self._args[:])
assert descr is None
return op
- def clone(self, memo):
- op = self.__class__()
- op.initarglist([memo.get(arg, arg) for arg in self.getarglist()])
- memo.set(self, op)
- return op
-
- def clone_input_arg(self):
- assert self.type == 'r'
- return InputArgRef()
class ESCAPE_OP_I(ESCAPE_OP):
type = 'i'
@@ -76,11 +67,6 @@
def getopname(self):
return 'force_spill'
- def clone(self):
- op = FORCE_SPILL()
- op.initarglist(self.getarglist()[:])
- return op
-
def copy_and_change(self, opnum, args=None, descr=None):
assert opnum == self.OPNUM
newop = FORCE_SPILL()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit