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