RFR: 8291809: Convert compiler/c2/cr7200264/TestSSE2IntVect.java to IR verification test [v2]
Christian Hagedorn
chagedorn at openjdk.org
Wed Jan 24 13:53:31 UTC 2024
On Thu, 18 Jan 2024 13:28:17 GMT, Christian Hagedorn <chagedorn at openjdk.org> wrote:
>> test/hotspot/jtreg/compiler/c2/cr7200264/TestIntVect.java line 510:
>>
>>> 508: }
>>> 509:
>>> 510: void test_divc(int[] a0, int[] a1) {
>>
>> Suggestion:
>>
>> // Not vectorized: no vector div. Might vectorize after JDK-8282365 (transform div to mul/add/shift).
>> void test_divc(int[] a0, int[] a1) {
>
> I was curious about that and it actually does:
>
> TraceNewVectors [SuperWord]: 744 LoadVector === 380 693 677 [[ 675 671 669 664 660 658 558 554 552 145 150 154 ]] @int[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=5; mismatched #vectorx[4]:{int} !orig=[676],[559],[134] !jvms: Test::test_divc @ bci:12 (line 36)
> TraceNewVectors [SuperWord]: 746 RShiftVI === _ 744 745 [[ 668 657 551 155 ]] #vectorx[4]:{int} !orig=[669],[552],[154] !jvms: Test::test_divc @ bci:15 (line 36)
> TraceNewVectors [SuperWord]: 747 VectorCastI2X === _ 744 [[ 674 663 557 146 ]] #vectory[4]:{long} !orig=[675],[558],[145] !jvms: Test::test_divc @ bci:15 (line 36)
> TraceNewVectors [SuperWord]: 748 Replicate === _ 144 [[ ]] #vectory[4]:{long}
> TraceNewVectors [SuperWord]: 749 MulVL === _ 747 748 [[ 673 662 556 148 ]] #vectory[4]:{long} !orig=[674],[557],[146] !jvms: Test::test_divc @ bci:15 (line 36)
> TraceNewVectors [SuperWord]: 751 RShiftVL === _ 749 750 [[ 672 661 555 149 ]] #vectory[4]:{long} !orig=[673],[556],[148] !jvms: Test::test_divc @ bci:15 (line 36)
> TraceNewVectors [SuperWord]: 752 VectorCastL2X === _ 751 [[ 671 660 554 150 ]] #vectorx[4]:{int} !orig=[672],[555],[149] !jvms: Test::test_divc @ bci:15 (line 36)
> TraceNewVectors [SuperWord]: 753 AddVI === _ 752 744 [[ 670 659 553 152 ]] #vectorx[4]:{int} !orig=[671],[554],[150] !jvms: Test::test_divc @ bci:15 (line 36)
> TraceNewVectors [SuperWord]: 755 RShiftVI === _ 753 754 [[ 668 657 551 155 ]] #vectorx[4]:{int} !orig=[670],[553],[152] !jvms: Test::test_divc @ bci:15 (line 36)
> TraceNewVectors [SuperWord]: 756 SubVI === _ 755 746 [[ 666 656 549 176 ]] #vectorx[4]:{int} !orig=[668],[551],[155] !jvms: Test::test_divc @ bci:15 (line 36)
> TraceNewVectors [SuperWord]: 757 StoreVector === 687 693 667 756 [[ 374 693 372 179 ]] @int[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=5; mismatched Memory: @int[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=5; !orig=[666],[549],[176],575 !jvms: Test::test_divc @ bci:16 (line 36)
>
> I have not checked any other methods but it might indeed be possible to vectorize some them. I think it's a good idea to check all methods and add a comment with a short explanation why it's not possible or if there are plans to support vectorization in the future. All these tests look like a good collection of (seemingly good) vectorization opportunities. Thanks @eme64 for your hel...
Should we also add checks for these vectors (same for `test_divc_n()`)?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/17428#discussion_r1464943591
More information about the hotspot-compiler-dev
mailing list