RFR: 8282722: Regard mapping array in enum switches as stable for constant folding
Paul Sandoz
psandoz at openjdk.java.net
Mon Mar 7 22:30:02 UTC 2022
On Mon, 7 Mar 2022 07:13:20 GMT, Joshua Zhu <jzhu at openjdk.org> wrote:
> I came across a performance issue when using scatter store VectorAPI for Integer and Long simultaneously in the same application. The poor performance was caused by vector intrinsic inlining failure because of non-determined IntSpecies for a constant VectorShape of IndexMap in this scenario.
>
> For ScatterStore operation of LongVector.SPECIES_512/IntVector.SPECIES_512, VectorShape.S_256_BIT/S_512_BIT is the actual length of indexMap vector respectively.
>
> IntSpecies species(VectorShape s)
>
> returns the corresponding IntSpecies by Switch on Enum type "VectorShape". [1]
>
> With this change introduced, elements in the SwitchMap array (initialized in clinit) can be constant-folded so that determined IntSpecies can be acquired for a constant VectorShape.
>
> jtreg test passed without new failure.
> Please help review this change and let me know if any comments.
>
> [1] https://github.com/openjdk/jdk/blob/894ffb098c80bfeb4209038c017d01dbf53fac0f/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/IntVector.java#L4043
AFAICT the field detection is not specific to what javac generates. Although the likelihood is small, there might be other fields that start with the same prefix and that the same time?
Further, if javac changes its code generation strategy then this code may become redundant for newly generated code, but we might need to keep it around and maybe add another specific case for new code.
(Pattern matching for switch is and will like further impact javac's generation strategy, although i don't know if it will impact this particular area.)
I understand the motivation, but the approach is fragile and is difficult to maintain over time. Unfortunately we don't yet have a general mechanism for read-only arrays.
My recommendation is to instead change the code in the Vector API.
-------------
PR: https://git.openjdk.java.net/jdk/pull/7721
More information about the hotspot-dev
mailing list