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