Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r78482:b69837aebecf
Date: 2015-07-07 09:36 +0200
http://bitbucket.org/pypy/pypy/changeset/b69837aebecf/
Log: invent new names for inputargs too, we need to rethink the
check_lazy_fail_args at some point
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py
b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -5,7 +5,8 @@
from rpython.jit.metainterp.optimizeopt.intutils import IntBound,\
ConstIntBound, MININT, MAXINT
from rpython.jit.metainterp.optimizeopt.util import make_dispatcher_method
-from rpython.jit.metainterp.resoperation import rop, AbstractResOp, GuardResOp
+from rpython.jit.metainterp.resoperation import rop, AbstractResOp,
GuardResOp,\
+ OpHelpers
from rpython.jit.metainterp.optimizeopt import info
from rpython.jit.metainterp.typesystem import llhelper
from rpython.rlib.objectmodel import specialize, we_are_translated
@@ -19,6 +20,13 @@
llhelper.CONST_NULLREF = llhelper.CONST_NULL
REMOVED = AbstractResOp()
+class LoopInfo(object):
+ pass
+
+class BasicLoopInfo(LoopInfo):
+ def __init__(self, inputargs):
+ self.inputargs = inputargs
+
class Optimization(object):
next_optimization = None
@@ -286,15 +294,9 @@
zzz
def get_box_replacement(self, op):
- from rpython.jit.metainterp.optimizeopt.unroll import PreambleOp
-
- orig_op = op
if op is None:
return op
- res = op.get_box_replacement()
- if isinstance(res, PreambleOp):
- xxx
- return res
+ return op.get_box_replacement()
def force_box(self, op):
op = self.get_box_replacement(op)
@@ -432,7 +434,12 @@
return CONST_0
def propagate_all_forward(self, inputargs, ops, call_pure_results=None):
- self.init_inparg_dict_from(inputargs)
+ newargs = []
+ for inparg in inputargs:
+ new_arg = OpHelpers.inputarg_from_tp(inparg.type)
+ inparg.set_forwarded(new_arg)
+ newargs.append(new_arg)
+ self.init_inparg_dict_from(newargs)
self.call_pure_results = call_pure_results
for op in ops:
self._really_emitted_operation = None
@@ -441,7 +448,7 @@
#self.loop.quasi_immutable_deps = self.quasi_immutable_deps
# accumulate counters
self.resumedata_memo.update_counters(self.metainterp_sd.profiler)
- return None, self._newoperations
+ return BasicLoopInfo(newargs), self._newoperations
def send_extra_operation(self, op):
self.first_optimization.propagate_forward(op)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -84,7 +84,9 @@
call_pure_results = self._convert_call_pure_results(call_pure_results)
compile_data = compile.SimpleCompileData(label_op, loop.operations,
call_pure_results)
- _, ops = self._do_optimize_loop(compile_data)
+ info, ops = self._do_optimize_loop(compile_data)
+ label_op = ResOperation(rop.LABEL, info.inputargs)
+ loop.inputargs = info.inputargs
loop.operations = [label_op] + ops
#print '\n'.join([str(o) for o in loop.operations])
self.loop = loop
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
@@ -3332,7 +3332,6 @@
self.optimize_loop(ops, expected)
def test_int_and_or_with_zero(self):
- xxx
ops = """
[i0, i1]
i2 = int_and(i0, 0)
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
@@ -420,7 +420,6 @@
#
compile_data.enable_opts = self.enable_opts
state = optimize_trace(metainterp_sd, None, compile_data)
- compile_data.forget_optimization_info()
return state
def _convert_call_pure_results(self, d):
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
@@ -5,7 +5,7 @@
from rpython.jit.metainterp.optimize import InvalidLoop
from rpython.jit.metainterp.optimizeopt import info
from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer,\
- Optimization
+ Optimization, LoopInfo
from rpython.jit.metainterp.optimizeopt.virtualstate import
(VirtualStateConstructor,
BadVirtualState, VirtualStatesCantMatch)
from rpython.jit.metainterp.resoperation import rop, ResOperation,\
@@ -257,7 +257,8 @@
# by short preamble
for op, preamble_op in exported_state.short_boxes.items():
if preamble_op.is_always_pure():
- self.pure(op.getopnum(), PreambleOp(op, preamble_op, None))
+ self.pure(op.getopnum(), PreambleOp(op, preamble_op,
+ self.optimizer.getinfo(op)))
else:
yyy
@@ -694,8 +695,6 @@
'it has at the start of the target loop')
i += 1
-class LoopInfo(object):
- pass
class UnrollInfo(LoopInfo):
""" A state after optimizing the peeled loop, contains the following:
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
@@ -34,10 +34,12 @@
def get_box_replacement(op):
orig_op = op
+ c = 0
while (op.get_forwarded() is not None and
not op.get_forwarded().is_info_class):
+ c += 1
op = op.get_forwarded()
- if op is not orig_op:
+ if op is not orig_op and c > 1:
orig_op.set_forwarded(op)
return op
@@ -1136,3 +1138,13 @@
opnum == rop.CALL_RELEASE_GIL_R or
opnum == rop.CALL_RELEASE_GIL_F or
opnum == rop.CALL_RELEASE_GIL_N)
+
+ @staticmethod
+ def inputarg_from_tp(tp):
+ if tp == 'i':
+ return InputArgInt()
+ elif tp == 'r':
+ return InputArgRef()
+ else:
+ assert tp == 'f'
+ return InputArgFloat()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit