[pypy-commit] pypy optresult-unroll: emit guard_no_overflow in the short preamble
fijal
noreply at buildbot.pypy.org
Tue Aug 11 16:56:50 CEST 2015
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r78911:c4b254735dd6
Date: 2015-08-11 15:14 +0200
http://bitbucket.org/pypy/pypy/changeset/c4b254735dd6/
Log: emit guard_no_overflow in the short preamble
diff --git a/rpython/jit/metainterp/optimizeopt/info.py b/rpython/jit/metainterp/optimizeopt/info.py
--- a/rpython/jit/metainterp/optimizeopt/info.py
+++ b/rpython/jit/metainterp/optimizeopt/info.py
@@ -333,6 +333,9 @@
else:
self._items = [None] * size
+ def all_items(self):
+ return self._items
+
def _force_elements(self, op, optforce, descr):
arraydescr = op.getdescr()
for i in range(self.length):
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
@@ -64,8 +64,11 @@
op = self.get_box_replacement(op)
if op.is_constant():
return
- assert op.get_forwarded() is None
- op.set_forwarded(bound)
+ cur = op.get_forwarded()
+ if cur is not None:
+ cur.intersect(bound)
+ else:
+ op.set_forwarded(bound)
def getnullness(self, op):
if op.type == 'i':
diff --git a/rpython/jit/metainterp/optimizeopt/shortpreamble.py b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
--- a/rpython/jit/metainterp/optimizeopt/shortpreamble.py
+++ b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
@@ -273,12 +273,14 @@
arg.set_forwarded(None)
#self.force_info_from(arg) <- XXX?
self.short.append(preamble_op)
+ if preamble_op.is_ovf():
+ self.short.append(ResOperation(rop.GUARD_NO_OVERFLOW, [], None))
info = preamble_op.get_forwarded()
preamble_op.set_forwarded(None)
if info is not empty_info:
info.make_guards(preamble_op, self.short)
if optimizer is not None:
- optimizer.setinfo_from_preamble(box, info)
+ optimizer.setinfo_from_preamble(box, info, None)
return preamble_op
def add_preamble_op(self, preamble_op):
More information about the pypy-commit
mailing list