If a getarrayitem is moved into the short_preamble we also need guards on the array len as it might be out of bound at the end of some future bridge. After jit-short_from_state the jump of the loop is produced by inlining the short preamble there (that approach does not crash if the optimizers introduces new boxes). It is typically optimized out entierly. In case of an array len check the guard is optimized out while the arraylen remains. It should be killed by the backend though as it's result is never used.
On Fri, Aug 26, 2011 at 11:19 PM, cfbolz <[email protected]> wrote: > Author: Carl Friedrich Bolz <[email protected]> > Branch: faster-nested-scopes > Changeset: r46806:77b0daebad60 > Date: 2011-08-26 23:25 +0200 > http://bitbucket.org/pypy/pypy/changeset/77b0daebad60/ > > Log: fix tests. no clue where the extra arraylen comes from? > > diff --git a/pypy/module/pypyjit/test_pypy_c/test_call.py > b/pypy/module/pypyjit/test_pypy_c/test_call.py > --- a/pypy/module/pypyjit/test_pypy_c/test_call.py > +++ b/pypy/module/pypyjit/test_pypy_c/test_call.py > @@ -67,24 +67,17 @@ > assert log.opnames(ops) == ["guard_value", > "getfield_gc", "guard_value", > "getfield_gc", "guard_value", > - "getfield_gc", "guard_nonnull_class"] > - # LOAD_GLOBAL of OFFSET but in different function partially folded > + "guard_not_invalidated"] > + # LOAD_GLOBAL of OFFSET but in different function folded > # away > - # XXX could be improved > ops = entry_bridge.ops_by_id('add', opcode='LOAD_GLOBAL') > - assert log.opnames(ops) == ["guard_value", "getfield_gc", > "guard_value"] > + assert log.opnames(ops) == ["guard_not_invalidated"] > # > # two LOAD_GLOBAL of f, the second is folded away > ops = entry_bridge.ops_by_id('call', opcode='LOAD_GLOBAL') > - assert log.opnames(ops) == ["getfield_gc", "guard_nonnull_class"] > + assert log.opnames(ops) == [] > # > assert entry_bridge.match_by_id('call', """ > - p29 = getfield_gc(ConstPtr(ptr28), descr=<GcPtrFieldDescr > pypy.objspace.std.celldict.ModuleCell.inst_w_value .*>) > - guard_nonnull_class(p29, ConstClass(Function), descr=...) > - p33 = getfield_gc(p29, descr=<GcPtrFieldDescr > pypy.interpreter.function.Function.inst_code .*>) > - guard_value(p33, ConstPtr(ptr34), descr=...) > - p35 = getfield_gc(p29, descr=<GcPtrFieldDescr > pypy.interpreter.function.Function.inst_w_func_globals .*>) > - p36 = getfield_gc(p29, descr=<GcPtrFieldDescr > pypy.interpreter.function.Function.inst_closure .*>) > p38 = call(ConstClass(getexecutioncontext), > descr=<GcPtrCallDescr>) > p39 = getfield_gc(p38, descr=<GcPtrFieldDescr > pypy.interpreter.executioncontext.ExecutionContext.inst_topframeref .*>) > i40 = force_token() > @@ -100,19 +93,16 @@ > # ----------------------------- > loop, = log.loops_by_id('call') > assert loop.match(""" > - i12 = int_lt(i5, i6) > - guard_true(i12, descr=...) > + guard_not_invalidated(descr=...) > + i9 = int_lt(i5, i6) > + guard_true(i9, descr=...) > + i10 = force_token() > + i12 = int_add(i5, 1) > i13 = force_token() > - i15 = int_add(i5, 1) > - i16 = int_add_ovf(i15, i7) > - guard_no_overflow(descr=...) > - i18 = force_token() > - i20 = int_add_ovf(i16, 1) > - guard_no_overflow(descr=...) > - i21 = int_add_ovf(i20, i7) > + i15 = int_add_ovf(i12, 1) > guard_no_overflow(descr=...) > --TICK-- > - jump(p0, p1, p2, p3, p4, i21, i6, i7, p8, p9, p10, p11, > descr=<Loop0>) > + jump(p0, p1, p2, p3, p4, i15, i6, i7, p8, descr=<Loop0>) > """) > > def test_method_call(self): > diff --git a/pypy/module/pypyjit/test_pypy_c/test_globals.py > b/pypy/module/pypyjit/test_pypy_c/test_globals.py > --- a/pypy/module/pypyjit/test_pypy_c/test_globals.py > +++ b/pypy/module/pypyjit/test_pypy_c/test_globals.py > @@ -20,11 +20,9 @@ > guard_value(p10, ConstPtr(ptr11), descr=...) > p12 = getfield_gc(p10, descr=<GcPtrFieldDescr > .*W_DictMultiObject.inst_strategy .*>) > guard_value(p12, ConstPtr(ptr13), descr=...) > - p15 = getfield_gc(ConstPtr(ptr14), descr=<GcPtrFieldDescr > .*ModuleCell.inst_w_value .*>) > - guard_isnull(p15, descr=...) > guard_not_invalidated(descr=...) > p19 = getfield_gc(ConstPtr(p17), descr=<GcPtrFieldDescr > .*W_DictMultiObject.inst_strategy .*>) > guard_value(p19, ConstPtr(ptr20), descr=...) > p22 = getfield_gc(ConstPtr(ptr21), descr=<GcPtrFieldDescr > .*ModuleCell.inst_w_value .*>) > guard_nonnull(p22, descr=...) > - """) > \ No newline at end of file > + """) > diff --git a/pypy/module/pypyjit/test_pypy_c/test_instance.py > b/pypy/module/pypyjit/test_pypy_c/test_instance.py > --- a/pypy/module/pypyjit/test_pypy_c/test_instance.py > +++ b/pypy/module/pypyjit/test_pypy_c/test_instance.py > @@ -52,7 +52,7 @@ > i10 = int_add_ovf(i5, i7) > guard_no_overflow(descr=...) > --TICK-- > - jump(p0, p1, p2, p3, p4, i10, i6, p7, i7, p8, descr=<Loop0>) > + jump(p0, p1, p2, p3, p4, i10, i6, i7, p8, descr=<Loop0>) > """) > > def test_getattr_with_dynamic_attribute(self): > @@ -151,6 +151,7 @@ > assert loop.match_by_id('loadattr', > ''' > guard_not_invalidated(descr=...) > + i16 = arraylen_gc(p10, descr=<GcPtrArrayDescr>) > i19 = call(ConstClass(ll_dict_lookup), _, _, _, descr=...) > guard_no_exception(descr=...) > i21 = int_and(i19, _) > diff --git a/pypy/module/pypyjit/test_pypy_c/test_math.py > b/pypy/module/pypyjit/test_pypy_c/test_math.py > --- a/pypy/module/pypyjit/test_pypy_c/test_math.py > +++ b/pypy/module/pypyjit/test_pypy_c/test_math.py > @@ -47,6 +47,7 @@ > assert loop.match(""" > i2 = int_lt(i0, i1) > guard_true(i2, descr=...) > + guard_not_invalidated(descr=...) > f1 = cast_int_to_float(i0) > i3 = float_eq(f1, inf) > i4 = float_eq(f1, -inf) > @@ -60,4 +61,4 @@ > i7 = int_add(i0, f1) > --TICK-- > jump(..., descr=) > - """) > \ No newline at end of file > + """) > diff --git a/pypy/module/pypyjit/test_pypy_c/test_string.py > b/pypy/module/pypyjit/test_pypy_c/test_string.py > --- a/pypy/module/pypyjit/test_pypy_c/test_string.py > +++ b/pypy/module/pypyjit/test_pypy_c/test_string.py > @@ -105,5 +105,5 @@ > i58 = int_add_ovf(i6, i57) > guard_no_overflow(descr=...) > --TICK-- > - jump(p0, p1, p2, p3, p4, p5, i58, i7, i8, p9, p10, descr=<Loop4>) > + jump(p0, p1, p2, p3, p4, p5, i58, i7, descr=<Loop4>) > """) > _______________________________________________ > pypy-commit mailing list > [email protected] > http://mail.python.org/mailman/listinfo/pypy-commit > -- Håkan Ardö _______________________________________________ pypy-dev mailing list [email protected] http://mail.python.org/mailman/listinfo/pypy-dev
