RFR: 8291809: Convert compiler/c2/cr7200264/TestSSE2IntVect.java to IR verification test [v2]
Christian Hagedorn
chagedorn at openjdk.org
Thu Jan 18 13:36:22 UTC 2024
On Thu, 18 Jan 2024 11:52:59 GMT, Emanuel Peter <epeter at openjdk.org> wrote:
>> Daniel Lundén has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Refactor test to use multiple @Test
>
> 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 help with that.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/17428#discussion_r1457441230
More information about the hotspot-compiler-dev
mailing list