def f(n): while n > 0: myjitdriver.can_enter_jit(n=n) myjitdriver.jit_merge_point(n=n) xy = XY() xy.next1 = lltype.malloc(A, 0) xy.next2 = lltype.malloc(A, 0) xy.next3 = lltype.malloc(A, 0) xy.next4 = lltype.malloc(A, 0) xy.next5 = lltype.malloc(A, 0) xy.n = n exctx.topframeref = vref = virtual_ref(xy) if n % 6 == 0: xy.next1 = lltype.nullptr(A) xy.next2 = lltype.nullptr(A) xy.next3 = lltype.nullptr(A) externalfn(n) n -= 1 exctx.topframeref = vref_None xy.next1 = lltype.nullptr(A) xy.next2 = lltype.nullptr(A) xy.next3 = lltype.nullptr(A) xy.next4 = lltype.nullptr(A) xy.next5 = lltype.nullptr(A) virtual_ref_finish(vref, xy) return exctx.m
def test_direct_invalid(): x1 = X() vref = virtual_ref(x1) assert vref._state == 'non-forced' virtual_ref_finish(vref, x1) assert vref._state == 'invalid' py.test.raises(InvalidVirtualRef, "vref()")
def f(): vref = virtual_ref(X()) try: vref() return 42 except InvalidVirtualRef: return -1
def enter(self, frame): if self.framestackdepth > self.space.sys.recursionlimit: raise OperationError( self.space.w_RuntimeError, self.space.wrap("maximum recursion depth exceeded")) self.framestackdepth += 1 frame.f_backref = self.topframeref self.topframeref = jit.virtual_ref(frame)
def test_direct_forced(): x1 = X() vref = virtual_ref(x1) assert vref._state == 'non-forced' assert vref() is x1 assert vref._state == 'forced' virtual_ref_finish(vref, x1) assert vref._state == 'forced' assert vref() is x1
def f(n): res1 = -42 while n > 0: myjitdriver.jit_merge_point(n=n, res1=res1) x = X() vref = virtual_ref(x) res1 = residual(vref) virtual_ref_finish(vref, x) n -= 1 return res1
def fn(n): res = False while n > 0: myjitdriver.can_enter_jit(n=n) myjitdriver.jit_merge_point(n=n) xy = XY() xy.n = n vref = virtual_ref(xy) virtual_ref_finish(vref, xy) vref() # raises InvalidVirtualRef when jitted n -= 1 return res
def test_direct_forced(): x1 = X() vref = virtual_ref(x1) assert vref._state == 'non-forced' assert vref.virtual is True assert vref() is x1 assert vref._state == 'forced' assert vref.virtual is False virtual_ref_finish(vref, x1) assert vref._state == 'forced' assert vref.virtual is False assert vref() is x1
def f(n): while n > 0: myjitdriver.can_enter_jit(n=n) myjitdriver.jit_merge_point(n=n) xy = XY() xy.n = n exctx.topframeref = virtual_ref(xy) exctx.later = exctx.topframeref n -= 1 exctx.topframeref = vref_None virtual_ref_finish(xy) return g()
def f(n): while n > 0: myjitdriver.can_enter_jit(n=n) myjitdriver.jit_merge_point(n=n) xy = XY() xy.n = n exctx.topframeref = vref = virtual_ref(xy) xy.next1 = lltype.malloc(A, 0) n = exctx.topframeref().n - 1 xy.next1 = lltype.nullptr(A) exctx.topframeref = vref_None virtual_ref_finish(vref, xy) return 1
def fn(n): res = 0 while n > 0: myjitdriver.can_enter_jit(n=n, res=res) myjitdriver.jit_merge_point(n=n, res=res) xy = XY() xy.n = n vref = virtual_ref(xy) force_it(vref, n) virtual_ref_finish(vref, xy) res += force_it(vref, n) # doesn't raise, because it was already forced n -= 1 return res
def fn(n): res = 0 while n > 0: myjitdriver.can_enter_jit(n=n, res=res) myjitdriver.jit_merge_point(n=n, res=res) xy = XY() xy.n = n vref = virtual_ref(xy) force_it(vref, n) virtual_ref_finish(vref, xy) res += force_it( vref, n) # doesn't raise, because it was already forced n -= 1 return res
def f(frame, n, reclevel): while n > 0: myjitdriver.can_enter_jit(n=n, frame=frame, rec=reclevel) myjitdriver.jit_merge_point(n=n, frame=frame, rec=reclevel) if reclevel == 0: return n xy = XY() exctx.topframeref = vref = virtual_ref(xy) m = f(xy, n, reclevel-1) assert m == n n -= 1 exctx.topframeref = vref_None virtual_ref_finish(vref, xy) return 2
def f(frame, n, reclevel): while n > 0: myjitdriver.can_enter_jit(n=n, frame=frame, rec=reclevel) myjitdriver.jit_merge_point(n=n, frame=frame, rec=reclevel) if reclevel == 0: return n xy = XY() exctx.topframeref = vref = virtual_ref(xy) m = f(xy, n, reclevel - 1) assert m == n n -= 1 exctx.topframeref = vref_None virtual_ref_finish(vref, xy) return 2
def f(n): while n > 0: jitdriver.can_enter_jit(n=n) jitdriver.jit_merge_point(n=n) x = X() x.n = n exctx.topframeref = vref = virtual_ref(x) # here, 'x' should be virtual exctx.topframeref = vref_None virtual_ref_finish(vref, x) # 'x' and 'vref' can randomly escape after the call to # finish(). g(vref) n -= 1 return 1
def f(n): while n > 0: myjitdriver.jit_merge_point(n=n) xy = XY() xy.n = n vr = virtual_ref(xy) # force the virtualref to be allocated exctx.vr = vr # force xy to be allocated escapexy(xy) # clean up exctx.vr = vref_None virtual_ref_finish(vr, xy) n -= 1 return 1
def f(n): while n > 0: myjitdriver.can_enter_jit(n=n) myjitdriver.jit_merge_point(n=n) xy = XY() xy.next1 = lltype.malloc(A, 0) xy.next2 = lltype.malloc(A, 0) xy.next3 = lltype.malloc(A, 0) exctx.topframeref = virtual_ref(xy) n -= externalfn(n) exctx.topframeref = vref_None xy.next1 = lltype.nullptr(A) xy.next2 = lltype.nullptr(A) xy.next3 = lltype.nullptr(A) virtual_ref_finish(xy)
def f(frame, n, reclevel): while n > 0: myjitdriver.can_enter_jit(n=n, frame=frame, rec=reclevel) myjitdriver.jit_merge_point(n=n, frame=frame, rec=reclevel) frame.n += 1 xy = XY() xy.n = n exctx.topframeref = vref = virtual_ref(xy) if reclevel > 0: m = f(xy, frame.n, reclevel - 1) assert xy.n == m n -= 1 else: n -= 2 exctx.topframeref = vref_None virtual_ref_finish(vref, xy) return frame.n
def f(frame, n, reclevel): while n > 0: myjitdriver.can_enter_jit(n=n, frame=frame, rec=reclevel) myjitdriver.jit_merge_point(n=n, frame=frame, rec=reclevel) frame.n += 1 xy = XY() xy.n = n exctx.topframeref = vref = virtual_ref(xy) if reclevel > 0: m = f(xy, frame.n, reclevel-1) assert xy.n == m n -= 1 else: n -= 2 exctx.topframeref = vref_None virtual_ref_finish(vref, xy) return frame.n
def f(): x1 = X() vref = virtual_ref(x1) x2 = vref() virtual_ref_finish(vref, x1) return x2
def f(n): if n > 0: return virtual_ref(Y()) else: return non_virtual_ref(Z())
def fn(): x = X() vref = virtual_ref(x) x1 = vref() # jit_force_virtual virtual_ref_finish(vref, x)
def enter(self, frame): frame.f_backref = self.topframeref self.topframeref = jit.virtual_ref(frame)
def f(): return jit.virtual_ref(X())
def f(): vref = virtual_ref(X()) return vref.virtual
def f(): x = X() exctx.topframeref = vref = virtual_ref(x) exctx.topframeref = vref_None virtual_ref_finish(vref, x) return 1
def f(n, x, x0, x1, x2, x3, x4, x5, x6, x7, l, s): a = A() glob.v = virtual_ref(a) virtual_ref_finish(a) n -= 1 return n, x, x0, x1, x2, x3, x4, x5, x6, x7, l, s
def f(n, x, x0, x1, x2, x3, x4, x5, x6, x7, l, s): a = A() glob.v = vref = virtual_ref(a) virtual_ref_finish(vref, a) n -= 1 return n, x, x0, x1, x2, x3, x4, x5, x6, x7, l, s
def f(): vref = jit.virtual_ref(X()) return vref()
def f(n): if n > 0: return virtual_ref(X()) else: return vref_None
def enter(n): x = X(n + 10) exctx._frame = x exctx.topframeref = virtual_ref(x)
def f(): return virtual_ref(X())
def test_direct_2(): x1 = X() vref = virtual_ref(x1) virtual_ref_finish(x1) assert vref() is x1