RFR: 8282722: Regard mapping array in enum switches as stable for constant folding

Paul Sandoz psandoz at openjdk.java.net
Mon Mar 7 20:48:58 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

This solution is potentially very fragile as it embeds knowledge of names into HotSpot and it lacks context. Although the chance is very small it could result in false positives, that would quite hard to track down.

Instead we should consider modifying the java compiler to annotate the field with `@Stable`, although i think the problem there will be we don't apply to packages outside of those from java.base.

-------------

PR: https://git.openjdk.java.net/jdk/pull/7721


More information about the hotspot-dev mailing list