Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r78479:ab1fed37b3d6
Date: 2015-07-06 18:35 +0200
http://bitbucket.org/pypy/pypy/changeset/ab1fed37b3d6/
Log: hopefully a better fix
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
@@ -466,11 +466,8 @@
assert not op.is_call_pure()
orig_op = op
op = self.replace_op_with(op, op.getopnum())
- # XXX look in C and maybe specialize on number of args
for i in range(op.numargs()):
arg = self.force_box(op.getarg(i))
- #self.ensure_imported(value)
- # newbox = value.force_box(self)
op.setarg(i, arg)
self.metainterp_sd.profiler.count(jitprof.Counters.OPT_OPS)
if op.is_guard():
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
@@ -177,6 +177,9 @@
""" % expected_value
self.optimize_loop(ops, expected)
+ #def test_cast_1(self):
+ # xxx
+
def test_reverse_of_cast_1(self):
ops = """
[i0]
@@ -3332,6 +3335,7 @@
self.optimize_loop(ops, expected)
def test_int_and_or_with_zero(self):
+ xxx
ops = """
[i0, i1]
i2 = int_and(i0, 0)
@@ -5341,6 +5345,7 @@
self.optimize_loop(ops, expected)
def test_lshift_rshift(self):
+ xxx
ops = """
[i1, i2, i2b, i1b]
i3 = int_lshift(i1, i2)
@@ -6214,6 +6219,7 @@
self.optimize_strunicode_loop(ops, expected, expected)
def test_newstr_2(self):
+ xxx
ops = """
[i0, i1]
p1 = newstr(2)
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
@@ -443,6 +443,7 @@
start_state, preamble_ops = self._do_optimize_loop(preamble_data,
call_pure_results)
preamble_data.forget_optimization_info()
+ end_label = ResOperation(rop.LABEL, start_state.end_args)
loop_data = compile.UnrolledLoopData(end_label, jump_op,
ops + [jump_op], start_state)
_, ops = self._do_optimize_loop(loop_data, call_pure_results)
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
@@ -71,14 +71,14 @@
def optimize_preamble(self, start_label, end_label, ops):
self._check_no_forwarding([[start_label, end_label], ops])
- self.optimizer.propagate_all_forward(start_label.getarglist(), ops)
+ self.optimizer.propagate_all_forward(start_label.getarglist()[:], ops)
exported_state = self.export_state(start_label, end_label)
return exported_state, self.optimizer._newoperations
def optimize_peeled_loop(self, start_label, end_jump, ops, state):
self._check_no_forwarding([[start_label, end_jump], ops])
self.import_state(start_label, state)
- self.optimizer.propagate_all_forward(start_label.getarglist(), ops)
+ self.optimizer.propagate_all_forward(start_label.getarglist()[:], ops)
return None, self.optimizer._newoperations
def random_garbage(self):
@@ -186,7 +186,7 @@
infos = {}
for arg in end_args:
infos[arg] = self.optimizer.getinfo(arg)
- return ExportedState(inparg_mapping, virtual_state, infos,
+ return ExportedState(end_args, inparg_mapping, virtual_state, infos,
sb.short_boxes)
@@ -696,8 +696,9 @@
* short boxes - a mapping op -> preamble_op
"""
- def __init__(self, inputarg_mapping, virtual_state, exported_infos,
- short_boxes):
+ def __init__(self, end_args, inputarg_mapping, virtual_state,
+ exported_infos, short_boxes):
+ self.end_args = end_args
self.inputarg_mapping = inputarg_mapping
self.virtual_state = virtual_state
self.exported_infos = exported_infos
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
@@ -92,6 +92,9 @@
def getarglist(self):
raise NotImplementedError
+ def getarglist_copy(self):
+ return self.getarglist()
+
def getarg(self, i):
raise NotImplementedError
@@ -131,7 +134,7 @@
from rpython.jit.metainterp.history import DONT_CHANGE
if args is None:
- args = self.getarglist()
+ args = self.getarglist_copy()
if descr is None:
descr = self.getdescr()
if descr is DONT_CHANGE:
@@ -591,6 +594,9 @@
def getarglist(self):
return self._args
+ def getarglist_copy(self):
+ return self._args[:]
+
def numargs(self):
return len(self._args)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit