Author: Maciej Fijalkowski <[email protected]>
Branch: optresult
Changeset: r76183:a9318d7e2e4d
Date: 2015-02-27 18:51 +0200
http://bitbucket.org/pypy/pypy/changeset/a9318d7e2e4d/
Log: (fijal, arigo) whack whack type type
diff --git a/rpython/jit/metainterp/optimizeopt/intbounds.py
b/rpython/jit/metainterp/optimizeopt/intbounds.py
--- a/rpython/jit/metainterp/optimizeopt/intbounds.py
+++ b/rpython/jit/metainterp/optimizeopt/intbounds.py
@@ -272,11 +272,13 @@
r.getintbound().intersect(resbound)
def optimize_INT_LT(self, op):
- v1 = self.getvalue(op.getarg(0))
- v2 = self.getvalue(op.getarg(1))
- if v1.getintbound().known_lt(v2.getintbound()):
+ arg1 = self.get_box_replacement(op.getarg(0))
+ arg2 = self.get_box_replacement(op.getarg(1))
+ b1 = self.getintbound(arg1)
+ b2 = self.getintbound(arg2)
+ if b1.known_lt(b2):
self.make_constant_int(op, 1)
- elif v1.getintbound().known_ge(v2.getintbound()) or v1.box is v2.box:
+ elif b1.known_ge(b2) or arg1 is arg2:
self.make_constant_int(op, 0)
else:
self.emit_operation(op)
@@ -302,11 +304,13 @@
self.emit_operation(op)
def optimize_INT_GE(self, op):
- v1 = self.getvalue(op.getarg(0))
- v2 = self.getvalue(op.getarg(1))
- if v1.getintbound().known_ge(v2.getintbound()) or v1.box is v2.box:
+ arg1 = self.get_box_replacement(op.getarg(0))
+ arg2 = self.get_box_replacement(op.getarg(1))
+ b1 = self.getintbound(arg1)
+ b2 = self.getintbound(arg2)
+ if b1.known_ge(b2) or arg1 is arg2:
self.make_constant_int(op, 1)
- elif v1.getintbound().known_lt(v2.getintbound()):
+ elif b1.known_lt(b2):
self.make_constant_int(op, 0)
else:
self.emit_operation(op)
@@ -424,12 +428,12 @@
v1.getintbound().make_ge(IntLowerBound(0))
def make_int_lt(self, box1, box2):
- v1 = self.getvalue(box1)
- v2 = self.getvalue(box2)
- if v1.getintbound().make_lt(v2.getintbound()):
- self.propagate_bounds_backward(box1, v1)
- if v2.getintbound().make_gt(v1.getintbound()):
- self.propagate_bounds_backward(box2, v2)
+ b1 = self.getintbound(box1)
+ b2 = self.getintbound(box2)
+ if b1.make_lt(b2):
+ self.propagate_bounds_backward(box1)
+ if b2.make_gt(b1):
+ self.propagate_bounds_backward(box2)
def make_int_le(self, box1, box2):
v1 = self.getvalue(box1)
@@ -446,11 +450,12 @@
self.make_int_le(box2, box1)
def propagate_bounds_INT_LT(self, op):
- r = self.getvalue(op)
+ r = self.get_box_replacement(op)
if r.is_constant():
- if r.box.same_constant(CONST_1):
+ if r.getint() == 1:
self.make_int_lt(op.getarg(0), op.getarg(1))
else:
+ assert r.getint() == 0
self.make_int_ge(op.getarg(0), op.getarg(1))
def propagate_bounds_INT_GT(self, op):
@@ -470,11 +475,12 @@
self.make_int_gt(op.getarg(0), op.getarg(1))
def propagate_bounds_INT_GE(self, op):
- r = self.getvalue(op)
+ r = self.get_box_replacement(op)
if r.is_constant():
- if r.box.same_constant(CONST_1):
+ if r.getint() == 1:
self.make_int_ge(op.getarg(0), op.getarg(1))
else:
+ assert r.getint() == 0
self.make_int_lt(op.getarg(0), op.getarg(1))
def propagate_bounds_INT_EQ(self, op):
diff --git a/rpython/jit/metainterp/optimizeopt/intutils.py
b/rpython/jit/metainterp/optimizeopt/intutils.py
--- a/rpython/jit/metainterp/optimizeopt/intutils.py
+++ b/rpython/jit/metainterp/optimizeopt/intutils.py
@@ -257,6 +257,9 @@
return (self.bounded() and self.known_ge(ConstIntBound(0)) and
self.known_le(ConstIntBound(1)))
+ def make_bool(self):
+ self.intersect(IntBound(0, 1))
+
def getnullness(self):
from rpython.jit.metainterp.optimizeopt import optimizer
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
@@ -535,7 +535,10 @@
def replace_op_with(self, op, newopnum, args=None, descr=None):
newop = op.copy_and_change(newopnum, args, descr)
if newop.type != 'v':
- assert op.get_forwarded() is None #XXX
+ op = self.get_box_replacement(op)
+ opinfo = op.get_forwarded()
+ if opinfo is not None:
+ newop.set_forwarded(opinfo)
op.set_forwarded(newop)
return newop
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
@@ -50,7 +50,7 @@
# otherwise, the operation remains
self.emit_operation(op)
if op.returns_bool_result():
- self.optimizer.bool_boxes[self.getvalue(op)] = None
+ self.getintbound(op).make_bool()
if nextop:
self.emit_operation(nextop)
#if args is not None:
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit