Hi all,

I am looking into the last failing case:
"TestMicroNumPy::()::test_reduce_logical_and" but I don't quite understand
what this test means.

The test case fails with:

```
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Loops don't match
=================
loop id = None
('operation mismatch',)
<could not determine information>

Ignore ops: []
Got:

        ===== HERE =====
    guard_not_invalidated(descr=<Guard0x4005356a88>)
    i39 = int_and(i35, 7)
    i40 = int_is_zero(i39)
    guard_true(i40, descr=<Guard0x40053a0e30>)
    f41 = raw_load_f(i9, i35, descr=<ArrayF 8>)
    i43 = float_ne(f41, 0.000000)
    guard_true(i43, descr=<Guard0x40053a0e60>)
    i45 = int_add(i28, 1)
    i47 = int_add(i35, 8)
    i48 = int_ge(i45, i36)
    guard_false(i48, descr=<Guard0x40053a0e90>)
    jump(p29, i45, p2, i47, p4, p6, i9, i36,
descr=TargetToken(274965300512))

Expected:


    i10096 = int_and(i29, 7)
    i10097 = int_is_zero(i10096)
    guard_true(i10097, descr=...)

        guard_not_invalidated(descr=...)
        f31 = raw_load_f(i9, i29, descr=<ArrayF 8>)
        i32 = float_ne(f31, 0.000000)
        guard_true(i32, descr=...)
        i36 = int_add(i24, 1)
        i37 = int_add(i29, 8)
        i38 = int_ge(i36, i30)
        guard_false(i38, descr=...)
        jump(..., descr=...)
```

IIUC, the difference is that guard_not_invalidated is at a different
location.

But I don't understand why the backend can affect the logs in the
'jit-log-opt-' tag.

Also, I found that reduce_logical_and (failed) and reduce_logical_xor
(passed) are very different.

Is there more information on the details of this test?  Any ideas to debug
this test case are very welcomed!  Thanks.

Regards,
Logan

p.s. I almost covered all the test cases.  Except the one described above,
other test cases are either Passing, classified as XFAIL (not supportable),
or related to environment (e.g. schroot/qemu).  I will try to run it on the
real board this weekend.


On Wed, Feb 21, 2024 at 9:57 PM Logan Chien <tzuhsiang.ch...@gmail.com>
wrote:

> Hi Armin,
>
> Thank you for the reply.
>
> Luckily, I found the bug.  It was a bug in my write barrier card marking
> implementation.  I misunderstood what AArch64 MVN instruction meant when I
> was porting the code.  After fixing it, I can pass these two test cases
> (test_zipfile64 and test_tokenize).
>
> Now, I am looking into test_json.  Earlier, I thought it was an XFAIL
> because the -O2 build was failing too.  But after adding
> `@settings(suppress_health_check=[HealthCheck.too_slow])` to
> `test_json.test_roundtrip`, I could run it in reasonable time.
>
> However, it was extremely slow when I ran the same test with the `-Ojit`
> build.  According to `PYPYLOG=jit:log.txt`, the JIT compiler kept building
> the same (or similar) bridge.  Statistics showed that the RISC-V JIT
> compiled more than 3000 bridges (when Ctrl-C interrupted) whereas the X86
> JIT build compiled only 900 bridges (when completed).  I will try to figure
> out the failing guard op first.
>
> Regards,
> Logan
>
> On Mon, Feb 19, 2024 at 10:05 PM Armin Rigo <armin.r...@gmail.com> wrote:
>
>> Hi Logan,
>>
>> On Tue, 20 Feb 2024 at 05:08, Logan Chien <tzuhsiang.ch...@gmail.com>
>> wrote:
>> > > This should just be #defined to do nothing with Boehm, maybe in
>> rpython/translator/c/src/mem.h
>> >
>> > With this change and a few RISC-V backend fixes (related to
>> self.cpu.vtable_offset), I can build and run a JIT+BoehmGC PyPy.
>>
>> Cool!  I also got a pull request merged into the main branch with this
>> change, and it does indeed fix boehm builds.
>>
>> > This configuration (JIT+BoehmGC) can pass test_tokenize and
>> test_zipfile64 (from lib_python_tests.py).
>> >
>> > Thus, my next step will focus on the differences between JIT+BoehmGC
>> and JIT+IncminimarkGC.
>>
>> A problem that came up a lot in other backends is a specific input
>> instruction that the backend emits with specific registers.  When you
>> run into the bad case, the emitted code reuses a register *before*
>> reading the same register assuming that it still contains its old
>> value.  It's entirely dependent on register allocation, and if you run
>> it with boehm then the sequence of instruction is slightly different
>> and that might be the reason that the bug doesn't show up then.  If
>> you get two failures with incminimark and none with boehm, then it
>> sounds more likely that the case involves one of the incminimark-only
>> constructions---but it's also possible the bug is somewhere unrelated
>> and it's purely bad luck...
>>
>>
>> Armin
>>
>
_______________________________________________
pypy-dev mailing list -- pypy-dev@python.org
To unsubscribe send an email to pypy-dev-le...@python.org
https://mail.python.org/mailman3/lists/pypy-dev.python.org/
Member address: arch...@mail-archive.com

Reply via email to