Home - Summaries: (main) : (py3.11) : Everything - Nightly builds - Benchmarks - RPython - Builders - About

jit/metainterp/test/test_warmspot.py::TestLLWarmspot::()::test_loop_header

self = <rpython.jit.metainterp.test.test_warmspot.TestLLWarmspot instance at 0xf539d8ac>

    def test_loop_header(self):
        # artificial test: we enter into the JIT only when can_enter_jit()
        # is seen, but we close a loop in the JIT much more quickly
        # because of loop_header().
        mydriver = JitDriver(reds = ['n', 'm'], greens = [])
    
        def f(m):
            n = 0
            while True:
                mydriver.jit_merge_point(n=n, m=m)
                if n > m:
                    m -= 1
                    if m < 0:
                        return n
                    n = 0
                    mydriver.can_enter_jit(n=n, m=m)
                else:
                    n += 1
                    mydriver.loop_header()
        assert f(15) == 1
        res = self.meta_interp(f, [15], backendopt=True)
        assert res == 1
>       self.check_resops(int_add=2)   # I get 13 without the loop_header()

jit/metainterp/test/test_warmspot.py:189: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
jit/metainterp/test/support.py:199: in check_resops
    get_stats().check_resops(expected=expected, **check)
jit/metainterp/history.py:969: in check_resops
    return self._check_insns(insns, expected, check)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <rpython.jit.metainterp.history.Stats object at 0xf53b3bec>
insns = {'debug_merge_point': 5, 'guard_false': 3, 'guard_true': 1, 'int_add': 3, ...}
expected = None, check = {'int_add': 2}

    def _check_insns(self, insns, expected, check):
        if expected is not None:
            insns.pop('debug_merge_point', None)
            insns.pop('enter_portal_frame', None)
            insns.pop('leave_portal_frame', None)
            insns.pop('label', None)
            assert insns == expected
        for insn, expected_count in check.items():
            getattr(rop, insn.upper())  # fails if 'rop.INSN' does not exist
            found = insns.get(insn, 0)
            assert found == expected_count, (
>               "found %d %r, expected %d" % (found, insn, expected_count))
E           AssertionError: found 3 'int_add', expected 2

jit/metainterp/history.py:982: AssertionError
---------- Captured stdout call ----------
	bh: goto_if_not_int_gt [13, 12, 43, 21] -> 21
	bh: int_sub [12, 1] -> 11
	bh: live [26] -> 28
	bh: goto_if_not_int_lt [11, 0, 35, 33] -> 35
	bh: loop_header [0] 
	bh: int_copy [0] -> 0
	bh: goto [0] -> 0
	bh: live [1] -> 3
	bh: jit_merge_point [<BHInterp <JitCode 'f'>>, 0, [], [], [], [0, 11], [], []] -> ContinueRunningNormally!
	bh: goto_if_not_int_gt [1, 0, 43, 21] -> 21
	bh: int_sub [0, 1] -> -1
	bh: live [26] -> 28
	bh: goto_if_not_int_lt [-1, 0, 35, 33] -> 33
	bh: int_return [<BHInterp <JitCode 'f'>>, 1] -> LeaveFrame!
~~~ return value: 1
---------- Captured stderr call ----------
[rtyper] -=- specialized 8 blocks -=-
[rtyper] -=- specialized 4 more blocks -=-
[rtyper] -=- specialized 2 more blocks -=-
[rtyper] -=- specialized 7 more blocks -=-
[rtyper] -=- specialized 6 more blocks -=-
[rtyper] -=- specialized 17 more blocks -=-
[rtyper] -=- specialized 2 more blocks -=-
[backendopt:inlining] phase with threshold factor: 32.4
[backendopt:inlining] heuristic: rpython.translator.backendopt.inline.inlining_heuristic
[backendopt:inlining] inlined 1 callsites.
[backendopt:malloc] starting malloc removal
[backendopt:malloc] removed 0 simple mallocs in total
[backendopt:mergeifblocks] starting to merge if blocks
[rtyper] -=- specialized 3 more blocks -=-
[jitcodewriter:info] making JitCodes...
[jitcodewriter:info] There are 1 JitCode instances.
[jitcodewriter:info] There are 3 -live- ops. Size of liveness is 4 bytes
[jitcodewriter] compute_bitstrings:
[jitcodewriter]   0 effectinfos:
[jitcodewriter]     0 descrs for arrays
[jitcodewriter]     0 descrs for fields
[jitcodewriter]     0 descrs for interiorfields
[c5fd60494ca2b00] {jit-tracing
JIT starting (llgraph) 
(jitdriver: no get_printable_location) 
(jitdriver: no get_printable_location) 
[c5fd60494ddf900] {jit-trace-done
trace length: 38 
 number operations: 8 
 total snapshots: 2 
 snapshot data: 24 
 snapshot array data: 14 
 bigint consts:  0 0 
 float consts:  0 0 
 ref consts:  0 0 1 
 descrs: 1 
[c5fd60494e0eb00] jit-trace-done}
[c5fd60494e46380] {jit-log-noopt
# Traced loop or bridge with 7 ops 
[i0, i1] 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
i2 = int_gt(i0, i1) 
guard_false(i2) 
i4 = int_add(i0, 1) 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
guard_future_condition() 
jump(i4, i1, descr=<Loop-1>) 
[c5fd60494eaed80] jit-log-noopt}
[c5fd60494ebfb00] {jit-optimize
[c5fd60494ee3900] {jit-log-intbounds
[i0, i1] 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
i2 = int_gt(i0, i1) 
guard_false(i2, descr=<rpython.jit.metainterp.compile.ResumeGuardDescr object at 0xf53692ec>) [i0, i1] 
i4 = int_add(i0, 1) 
# i4 -> (?)   IntBound.unbounded() 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
[c5fd6049527ae80] jit-log-intbounds}
[c5fd604952f6300] {jit-log-exported-state
[i5, i6] 
  INP(i5 = int_add(i7, 1/ci)) 
  INP(i6) 
[c5fd60495324300] jit-log-exported-state}
[c5fd60495335480] jit-optimize}
[c5fd6049534f500] {jit-optimize
[c5fd6049545ea80] {jit-log-intbounds
[i0, i1] 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
i4 = int_gt(i2, i3) 
guard_false(i4, descr=<rpython.jit.metainterp.compile.ResumeGuardDescr object at 0xf5369bcc>) [i2, i3] 
i6 = int_add(i2, 1) 
# i6 -> (?)   IntBound.unbounded() 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
[c5fd6049594f700] jit-log-intbounds}
jump(i6, i3, descr=TargetToken(-180948596)) 
[c5fd60495b1df00] jit-optimize}
[c5fd60495b35280] {jit-log-short-preamble
[] 
label(i8, i9) 
jump() 
[c5fd60495b5cb00] jit-log-short-preamble}
[c5fd60495bab880] {jit-backend
[c5fd60495bcc680] {jit-log-compiling-loop
[i7, i6] 
label(i7, i6, descr=TargetToken(-180972596)) 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
i10 = int_gt(i7, i6) 
guard_false(i10, descr=<Guard0xf53692ec>) [i7, i6] 
i5 = int_add(i7, 1) 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
label(i5, i6, descr=TargetToken(-180948596)) 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
i12 = int_gt(i5, i6) 
guard_false(i12, descr=<Guard0xf5369bcc>) [i5, i6] 
i14 = int_add(i5, 1) 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
jump(i14, i6, descr=TargetToken(-180948596)) 
[c5fd60495c5bb80] jit-log-compiling-loop}
[c5fd60495c76500] {jit-mem-looptoken-alloc
allocating Loop # 1 
[c5fd60495c89980] jit-mem-looptoken-alloc}
[c5fd60495cd2780] jit-backend}
compiled new loop 
[c5fd60495ce6d80] {jit-log-opt-loop
# Loop 1 ((jitdriver: no get_printable_location)) : loop with 13 ops 
[i0, i1] 
label(i0, i1, descr=TargetToken(-180972596)) 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
i2 = int_gt(i0, i1) 
guard_false(i2, descr=<Guard0xf53692ec>) [i0, i1] 
i4 = int_add(i0, 1) 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
label(i4, i1, descr=TargetToken(-180948596)) 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
i5 = int_gt(i4, i1) 
guard_false(i5, descr=<Guard0xf5369bcc>) [i4, i1] 
i7 = int_add(i4, 1) 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
jump(i7, i1, descr=TargetToken(-180948596)) 
[c5fd60495d88f80] jit-log-opt-loop}
ContinueRunningNormally 
[c5fd604960c1500] jit-tracing}
[c5fd60496375700] {jit-tracing
(jitdriver: no get_printable_location) 
[c5fd6049654d200] {jit-trace-done
trace length: 51 
 number operations: 11 
 total snapshots: 3 
 snapshot data: 36 
 snapshot array data: 20 
 bigint consts:  0 0 
 float consts:  0 0 
 ref consts:  0 0 1 
 descrs: 2 
[c5fd6049657a680] jit-trace-done}
[c5fd60496591600] {jit-log-noopt
# Traced loop or bridge with 9 ops 
[i0, i1] 
i2 = int_gt(i0, i1) 
guard_true(i2) 
i4 = int_sub(i1, 1) 
i6 = int_lt(i4, 0) 
guard_false(i6) 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
i8 = same_as_i(0) 
guard_future_condition() 
jump(i8, i4, descr=<Loop1>) 
[c5fd60496601e80] jit-log-noopt}
[c5fd60496612280] {jit-optimize
[c5fd604966a8280] {jit-log-intbounds
[i0, i1] 
i2 = int_gt(i0, i1) 
guard_true(i2, descr=<rpython.jit.metainterp.compile.ResumeGuardDescr object at 0xf537394c>) [i0, i1] 
# i1: (? <= MAXINT - 1)   IntBound(MININT, MAXINT - 1) 
i4 = int_add(i1, -1) 
i6 = int_lt(i4, 0) 
guard_false(i6, descr=<rpython.jit.metainterp.compile.ResumeGuardCopiedDescr object at 0xf5373cec>) [i0, i1] 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
[c5fd60496c00180] jit-log-intbounds}
# i4: (0 <= 0b0?...?)   IntBound.nonnegative() 
jump(0, i4, descr=TargetToken(-180948596)) 
[c5fd60496d2da00] jit-optimize}
[c5fd60496d47b80] {jit-backend
[c5fd60496d52f80] {jit-log-compiling-bridge
[i9, i10] 
i11 = int_gt(i9, i10) 
guard_true(i11, descr=<Guard0xf537394c>) [i9, i10] 
i13 = int_add(i10, -1) 
i15 = int_lt(i13, 0) 
guard_false(i15, descr=<Guard0xf5373cec>) [i9, i10] 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
jump(0, i13, descr=TargetToken(-180948596)) 
[c5fd60496d8c180] jit-log-compiling-bridge}
[c5fd60496d9ea80] {jit-mem-looptoken-alloc
allocating Bridge # 1 of Loop # 1 
[c5fd60496dadb00] jit-mem-looptoken-alloc}
[c5fd60496de8980] jit-backend}
compiled new bridge 
[c5fd60496df9580] {jit-log-opt-bridge
# bridge out of Guard 0xf5369bcc with 7 ops 
[i9, i10] 
i11 = int_gt(i9, i10) 
guard_true(i11, descr=<Guard0xf537394c>) [i9, i10] 
i13 = int_add(i10, -1) 
i15 = int_lt(i13, 0) 
guard_false(i15, descr=<Guard0xf5373cec>) [i9, i10] 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
jump(0, i13, descr=TargetToken(-180948596)) 
[c5fd60496e38380] jit-log-opt-bridge}
[c5fd60496e43100] {jit-log-opt-bridge
# bridge out of Guard 0xf5369bcc with 7 ops 
[i9, i10] 
i11 = int_gt(i9, i10) 
guard_true(i11, descr=<Guard0xf537394c>) [i9, i10] 
i13 = int_add(i10, -1) 
i15 = int_lt(i13, 0) 
guard_false(i15, descr=<Guard0xf5373cec>) [i9, i10] 
debug_merge_point(0, 0, '(jitdriver: no get_printable_location)') 
jump(0, i13, descr=TargetToken(-180948596)) 
[c5fd60496e7ec00] jit-log-opt-bridge}
DoneWithThisFrameInt 
[c5fd60497553f00] jit-tracing}
builder: rpython-linux-x86-32 build #857+
test: jit/metainterp/test/test_warmspot.py::TestLLWarmspot::()::test_loop_header