Author: Maciej Fijalkowski <fij...@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): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit