Author: Carl Friedrich Bolz <[email protected]>
Branch: small-unroll-improvements
Changeset: r70490:3c6bd65ee1b3
Date: 2014-04-08 18:00 +0200
http://bitbucket.org/pypy/pypy/changeset/3c6bd65ee1b3/
Log: intbound support
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
@@ -35,7 +35,7 @@
return (other is not None and
self.mode == other.mode and
self.descr == other.descr and
- self.lenbound.bound.contains_bound(other.lenbound.bound))
+ self.bound.contains_bound(other.bound))
class OptValue(object):
__metaclass__ = extendabletype
diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py
b/rpython/jit/metainterp/optimizeopt/virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py
@@ -297,9 +297,11 @@
if self.lenbound and not
self.lenbound.generalization_of(other.lenbound):
raise InvalidLoop()
-
if self.level == LEVEL_UNKNOWN:
- return
+ if other.level == LEVEL_UNKNOWN:
+ return self._generate_guards_intbounds(other, value,
extra_guards)
+ else:
+ return # matches everything
# the following conditions often peek into the runtime value that the
# box had when tracing. This value is only used as an educated guess.
@@ -369,14 +371,13 @@
raise InvalidLoop()
raise InvalidLoop("XXX")
- if self.lenbound or other.lenbound:
- raise InvalidLoop('The array length bounds does not match.')
-
- if (self.level == LEVEL_UNKNOWN and
- other.level == LEVEL_UNKNOWN and
- isinstance(box, BoxInt) and
- self.intbound.contains(box.getint())):
+ def _generate_guards_intbounds(self, other, value, extra_guards):
+ if self.intbound.contains_bound(other.intbound):
+ return
+ box = value.box
+ if (isinstance(box, BoxInt) and
+ self.intbound.contains(box.getint())):
if self.intbound.has_lower:
bound = self.intbound.lower
if not (other.intbound.has_lower and
@@ -396,6 +397,7 @@
op = ResOperation(rop.GUARD_TRUE, [res], None)
extra_guards.append(op)
return
+ raise InvalidLoop("intbounds don't match")
def enum_forced_boxes(self, boxes, value, optimizer):
if self.level == LEVEL_CONSTANT:
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit