Author: Maciej Fijalkowski <[email protected]>
Branch: rewrite-unrolling
Changeset: r75306:62e5eb68ec00
Date: 2015-01-12 15:44 +0200
http://bitbucket.org/pypy/pypy/changeset/62e5eb68ec00/
Log: fix the merge enough to pass tests
diff --git a/rpython/jit/metainterp/optimizeopt/pure.py
b/rpython/jit/metainterp/optimizeopt/pure.py
--- a/rpython/jit/metainterp/optimizeopt/pure.py
+++ b/rpython/jit/metainterp/optimizeopt/pure.py
@@ -95,11 +95,13 @@
def setup(self):
self.optimizer.optpure = self
- def pure(self, opnum, args, result):
+ def pure(self, opnum, args, result, value=None):
op = ResOperation(opnum, args, result)
key = self.optimizer.make_args_key(op)
if key not in self.pure_operations:
- self.pure_operations[key] = self.getvalue(result)
+ if value is None:
+ value = self.getvalue(result)
+ self.pure_operations[key] = value
def has_pure_result(self, opnum, args, descr):
op = ResOperation(opnum, args, None, descr)
@@ -109,19 +111,5 @@
def get_pure_result(self, key):
return self.pure_operations.get(key, None)
- def produce_potential_short_preamble_ops(self, sb):
- xxx
- ops = sb.optimizer._newoperations
- for i, op in enumerate(ops):
- if op.is_always_pure():
- sb.add_potential(op)
- if op.is_ovf() and ops[i + 1].getopnum() == rop.GUARD_NO_OVERFLOW:
- sb.add_potential(op)
- for i in self.call_pure_positions:
- op = ops[i]
- assert op.getopnum() == rop.CALL
- op = op.copy_and_change(rop.CALL_PURE)
- sb.add_potential(op)
-
dispatch_opt = make_dispatcher_method(OptPure, 'optimize_',
default=OptPure.optimize_default)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
@@ -6,7 +6,7 @@
from rpython.jit.metainterp.optimizeopt.test.test_util import BaseTest,\
FakeMetaInterpStaticData
from rpython.jit.metainterp.optimizeopt.pure import OptPure
-from rpython.jit.metainterp.resoperation import rop
+from rpython.jit.metainterp.resoperation import rop, ResOperation
from rpython.jit.metainterp.history import ConstInt, BoxInt
from rpython.jit.backend.llgraph import runner
@@ -54,8 +54,10 @@
i1 = BoxInt()
unroller = Unroller()
unroller.optimizer = Optimizer(self.metainterp_sd, None, None, [pure])
+ unroller.optimizer._newoperations = [
+ ResOperation(rop.INT_ADD, [i0, ConstInt(1)], i1)
+ ]
pure.optimizer = unroller.optimizer
- pure.pure(rop.INT_ADD, [i0, ConstInt(1)], i1)
expected = """
[i0, i1]
label(i0, i1)
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
@@ -44,7 +44,26 @@
if old_optpure:
# import all pure operations from the old optimizer
new_optpure = self.optimizer.optpure
- for opargs, value in old_optpure.pure_operations.items():
- if not value.is_virtual():
- pure_value = OptPureValue(self, value.box)
- new_optpure.pure_operations[opargs] = pure_value
+ old_ops = old_optimizer._newoperations
+ for op in old_ops:
+ if op.is_always_pure():
+ pure_value = OptPureValue(self, op.result)
+ new_optpure.pure(op.getopnum(), op.getarglist(),
+ op.result, pure_value)
+ # for opargs, value in old_optpure.pure_operations.items():
+ # if not value.is_virtual():
+ # pure_value = OptPureValue(self, value.box)
+ # new_optpure.pure_operations[opargs] = pure_value
+
+ # def produce_potential_short_preamble_ops(self, sb):
+ # ops = sb.optimizer._newoperations
+ # for i, op in enumerate(ops):
+ # if op.is_always_pure():
+ # sb.add_potential(op)
+ # if op.is_ovf() and ops[i + 1].getopnum() ==
rop.GUARD_NO_OVERFLOW:
+ # sb.add_potential(op)
+ # for i in self.call_pure_positions:
+ # op = ops[i]
+ # assert op.getopnum() == rop.CALL
+ # op = op.copy_and_change(rop.CALL_PURE)
+ # sb.add_potential(op)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit