[pypy-commit] pypy result-in-resops: make yet another test pass
fijal
noreply at buildbot.pypy.org
Sat Oct 27 11:28:22 CEST 2012
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: result-in-resops
Changeset: r58492:3945cce69723
Date: 2012-10-27 11:20 +0200
http://bitbucket.org/pypy/pypy/changeset/3945cce69723/
Log: make yet another test pass
diff --git a/pypy/jit/metainterp/optimizeopt/intbounds.py b/pypy/jit/metainterp/optimizeopt/intbounds.py
--- a/pypy/jit/metainterp/optimizeopt/intbounds.py
+++ b/pypy/jit/metainterp/optimizeopt/intbounds.py
@@ -228,14 +228,14 @@
r.getintbound().intersect(resbound)
def optimize_INT_LT(self, op):
- v1 = self.getvalue(op.getarg(0))
- v2 = self.getvalue(op.getarg(1))
+ v1 = self.getforwarded(op.getarg(0))
+ v2 = self.getforwarded(op.getarg(1))
if v1.getintbound().known_lt(v2.getintbound()):
self.make_constant_int(op, 1)
elif v1.getintbound().known_ge(v2.getintbound()) or v1 is v2:
self.make_constant_int(op, 0)
else:
- self.emit_operation(op)
+ return op
def optimize_INT_GT(self, op):
v1 = self.getvalue(op.getarg(0))
@@ -255,17 +255,17 @@
elif v1.getintbound().known_gt(v2.getintbound()):
self.make_constant_int(op, 0)
else:
- self.emit_operation(op)
+ return op
def optimize_INT_GE(self, op):
- v1 = self.getvalue(op.getarg(0))
- v2 = self.getvalue(op.getarg(1))
+ v1 = self.getforwarded(op.getarg(0))
+ v2 = self.getforwarded(op.getarg(1))
if v1.getintbound().known_ge(v2.getintbound()) or v1 is v2:
self.make_constant_int(op, 1)
elif v1.getintbound().known_lt(v2.getintbound()):
self.make_constant_int(op, 0)
else:
- self.emit_operation(op)
+ return op
def optimize_INT_EQ(self, op):
v1 = self.getvalue(op.getarg(0))
@@ -326,13 +326,13 @@
v1 = self.getvalue(op)
v1.getintbound().make_ge(IntLowerBound(0))
- def make_int_lt(self, box1, box2):
- v1 = self.getvalue(box1)
- v2 = self.getvalue(box2)
+ def make_int_lt(self, op1, op2):
+ v1 = self.getforwarded(op1)
+ v2 = self.getforwarded(op2)
if v1.getintbound().make_lt(v2.getintbound()):
- self.propagate_bounds_backward(box1)
+ self.propagate_bounds_backward(op1)
if v2.getintbound().make_gt(v1.getintbound()):
- self.propagate_bounds_backward(box2)
+ self.propagate_bounds_backward(op2)
def make_int_le(self, box1, box2):
v1 = self.getvalue(box1)
@@ -349,17 +349,17 @@
self.make_int_le(box2, box1)
def propagate_bounds_INT_LT(self, op):
- r = self.getvalue(op)
+ r = self.getforwarded(op)
if r.is_constant():
- if r.op.same_constant(CONST_1):
+ if r.same_constant(CONST_1):
self.make_int_lt(op.getarg(0), op.getarg(1))
else:
self.make_int_ge(op.getarg(0), op.getarg(1))
def propagate_bounds_INT_GT(self, op):
- r = self.getvalue(op)
+ r = self.getforwarded(op)
if r.is_constant():
- if r.op.same_constant(CONST_1):
+ if r.same_constant(CONST_1):
self.make_int_gt(op.getarg(0), op.getarg(1))
else:
self.make_int_le(op.getarg(0), op.getarg(1))
@@ -373,9 +373,9 @@
self.make_int_gt(op.getarg(0), op.getarg(1))
def propagate_bounds_INT_GE(self, op):
- r = self.getvalue(op)
+ r = self.getforwarded(op)
if r.is_constant():
- if r.op.same_constant(CONST_1):
+ if r.same_constant(CONST_1):
self.make_int_ge(op.getarg(0), op.getarg(1))
else:
self.make_int_lt(op.getarg(0), op.getarg(1))
diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py b/pypy/jit/metainterp/optimizeopt/optimizer.py
--- a/pypy/jit/metainterp/optimizeopt/optimizer.py
+++ b/pypy/jit/metainterp/optimizeopt/optimizer.py
@@ -460,11 +460,14 @@
self._newoperations = []
def make_constant(self, op, constbox):
+ op = self.getforwarded(op)
if not op.is_constant():
- self.getforwarded(op)._forwarded = constbox
+ op._forwarded = constbox
- def make_constant_int(self, box, intvalue):
- self.getvalue(box).make_constant(ConstInt(intvalue))
+ def make_constant_int(self, op, intvalue):
+ op = self.getforwarded(op)
+ if not op.is_constant():
+ op._forwarded = ConstInt(intvalue)
def new_ptr_box(self):
return self.cpu.ts.BoxRef()
@@ -536,13 +539,6 @@
dispatch_opt(self, op)
def emit_operation(self, op):
- if op.returns_bool_result():
- xxxx
- self.getvalue(op).is_bool_box = True
- self._emit_operation(op)
-
- @specialize.argtype(0)
- def _emit_operation(self, op):
assert op.getopnum() not in opgroups.CALL_PURE
assert not op._forwarded
if isinstance(op, Const):
diff --git a/pypy/jit/metainterp/optimizeopt/pure.py b/pypy/jit/metainterp/optimizeopt/pure.py
--- a/pypy/jit/metainterp/optimizeopt/pure.py
+++ b/pypy/jit/metainterp/optimizeopt/pure.py
@@ -12,6 +12,7 @@
self.emitted_pure_operations = []
def optimize_default(self, op):
+ op = self.getforwarded(op)
canfold = op.is_always_pure()
if op.is_ovf():
self.posponedop = op
@@ -24,7 +25,6 @@
else:
nextop = None
- newop = self.getforwarded(op)
if canfold:
for i in range(op.numargs()):
if self.get_constant_op(op.getarg(i)) is None:
@@ -38,20 +38,18 @@
return
# did we do the exact same operation already?
- oldop = self.pure_operations.get(newop)
+ oldop = self.pure_operations.get(op)
if oldop is not None:
self.replace(op, oldop)
return
else:
- self.pure_operations.set(newop, op)
+ self.pure_operations.set(op, op)
self.remember_emitting_pure(op)
# otherwise, the operation remains
- if newop.returns_bool_result():
- newop.setboolbox(True)
if nextop:
- self.emit_operation(nextop)
- return newop
+ return nextop
+ return op
def _new_optimize_call_pure(opnum):
def optimize_CALL_PURE(self, op):
diff --git a/pypy/jit/metainterp/optimizeopt/rewrite.py b/pypy/jit/metainterp/optimizeopt/rewrite.py
--- a/pypy/jit/metainterp/optimizeopt/rewrite.py
+++ b/pypy/jit/metainterp/optimizeopt/rewrite.py
@@ -280,10 +280,10 @@
return self.optimize_guard(op, constbox, emit_operation=emit_operation)
def optimize_GUARD_TRUE(self, op):
- self.optimize_guard(op, CONST_1)
+ return self.optimize_guard(op, CONST_1)
def optimize_GUARD_FALSE(self, op):
- self.optimize_guard(op, CONST_0)
+ return self.optimize_guard(op, CONST_0)
def optimize_RECORD_KNOWN_CLASS(self, op):
value = self.getvalue(op.getarg(0))
@@ -380,8 +380,7 @@
self.emit_operation(op)
def optimize_INT_IS_TRUE(self, op):
- value = self.getforwarded(op.getarg(0))
- if value.getboolbox():
+ if op.getarg(0).returns_bool_result():
self.replace(op, op.getarg(0))
return
return self._optimize_nullness(op, op.getarg(0), True)
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -268,15 +268,15 @@
ops = """
[i0]
i1 = int_lt(i0, 0)
- guard_true(i1) []
+ guard_true(i1)
i2 = int_ge(i0, 0)
- guard_false(i2) []
+ guard_false(i2)
jump(i0)
"""
expected = """
[i0]
i1 = int_lt(i0, 0)
- guard_true(i1) []
+ guard_true(i1)
jump(i0)
"""
self.optimize_loop(ops, expected)
diff --git a/pypy/jit/metainterp/optmodel.py b/pypy/jit/metainterp/optmodel.py
--- a/pypy/jit/metainterp/optmodel.py
+++ b/pypy/jit/metainterp/optmodel.py
@@ -12,7 +12,7 @@
def getintbound(self):
return ConstantIntBound(self.getint())
- def getboolbox(self):
+ def getboolres(self):
return False # for optimization
class __extend__(Const):
@@ -63,7 +63,7 @@
if cls.type == INT:
# all the integers have bounds
addattr(Mutable, 'intbound', imm_int_unbound)
- addattr(Mutable, 'boolbox', False)
+ addattr(Mutable, 'boolres', False)
elif cls.type == REF:
addattr(Mutable, 'knownclass', None)
# for tracking last guard and merging GUARD_VALUE with
diff --git a/pypy/jit/metainterp/resoperation.py b/pypy/jit/metainterp/resoperation.py
--- a/pypy/jit/metainterp/resoperation.py
+++ b/pypy/jit/metainterp/resoperation.py
@@ -650,8 +650,6 @@
opnum = cls.getopnum()
if we_are_translated():
assert opnum >= 0
- elif opnum < 0:
- return False # for tests
return opboolresult[opnum]
def _copy_extra_attrs(self, new):
More information about the pypy-commit
mailing list