RFR(S) 8189064: Crash with compiler/codegen/*Vect.java on Solaris-sparc
vladimir.kozlov at oracle.com
Fri Oct 27 02:02:15 UTC 2017
New code from JDK-8187601 triggers an other round of loopopts to try to unroll more loops which were not vectorized. But that also trigger second round of vectorization. To avoid vectorization of
already vectorized loops there is cl->is_vectorized_loop() check in SuperWord::transform_loop().
Unfortunately cl->mark_loop_vectorized() is called in SuperWord::output() under several conditions and one of them (compare vector length with unroll count) is not true on SPARC because it has very
small vectors (8 bytes) as result cl->mark_loop_vectorized() is not called.
The fix is unconditionally call cl->mark_loop_vectorized() when vectors are generated.
I also modified JDK-8187601 changes to trigger an other round of loopopts only when main loop is not vectorized.
Failed vector tests from bug report passed. I submitted pre-integration testing.
More information about the hotspot-compiler-dev