Author: Maciej Fijalkowski <[email protected]>
Branch: optresult
Changeset: r77533:77f8307568da
Date: 2015-05-25 13:32 +0200
http://bitbucket.org/pypy/pypy/changeset/77f8307568da/
Log: fix bound issue and fix pure issue with input args or consts
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
@@ -3,7 +3,7 @@
from rpython.jit.metainterp.logger import LogOperations
from rpython.jit.metainterp.history import Const, ConstInt, REF, ConstPtr
from rpython.jit.metainterp.optimizeopt.intutils import IntBound,\
- IntUnbounded, ConstIntBound
+ IntUnbounded, 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.optimizeopt import info
@@ -281,7 +281,7 @@
return fw
assert fw is None
assert op.type == 'i'
- intbound = IntUnbounded()
+ intbound = IntBound(MININT, MAXINT)
op.set_forwarded(intbound)
return intbound
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
@@ -1,5 +1,6 @@
from rpython.jit.metainterp.optimizeopt.optimizer import Optimization, REMOVED
-from rpython.jit.metainterp.resoperation import rop, OpHelpers
+from rpython.jit.metainterp.resoperation import rop, OpHelpers, AbstractResOp,\
+ ResOperation
from rpython.jit.metainterp.optimizeopt.util import make_dispatcher_method
@@ -15,32 +16,34 @@
self.next_index = (next_index + 1) % self.REMEMBER_LIMIT
self.lst[next_index] = op
- def lookup1(self, box0, descr):
+ def lookup1(self, opt, box0, descr):
for i in range(self.REMEMBER_LIMIT):
op = self.lst[i]
if op is None:
break
if op.getarg(0).same_box(box0) and op.getdescr() is descr:
- return op
+ return opt.get_box_replacement(op)
return None
- def lookup2(self, box0, box1, descr):
+ def lookup2(self, opt, box0, box1, descr):
for i in range(self.REMEMBER_LIMIT):
op = self.lst[i]
if op is None:
break
if (op.getarg(0).same_box(box0) and op.getarg(1).same_box(box1)
and op.getdescr() is descr):
- return op
+ return opt.get_box_replacement(op)
return None
def lookup(self, optimizer, op):
numargs = op.numargs()
if numargs == 1:
- return self.lookup1(optimizer.get_box_replacement(op.getarg(0)),
+ return self.lookup1(optimizer,
+ optimizer.get_box_replacement(op.getarg(0)),
op.getdescr())
elif numargs == 2:
- return self.lookup2(optimizer.get_box_replacement(op.getarg(0)),
+ return self.lookup2(optimizer,
+ optimizer.get_box_replacement(op.getarg(0)),
optimizer.get_box_replacement(op.getarg(1)),
op.getdescr())
else:
@@ -178,6 +181,10 @@
def pure(self, opnum, args, op):
op = self.get_box_replacement(op)
+ if not isinstance(op, AbstractResOp):
+ newop = ResOperation(opnum, args)
+ newop.set_forwarded(op)
+ op = newop
recentops = self.getrecentops(opnum)
recentops.add(op)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit