On Thu, 24 Jul 2025 10:29:15 GMT, Galder Zamarreño <gal...@openjdk.org> wrote:
> I've added support to vectorize `MoveD2L`, `MoveL2D`, `MoveF2I` and `MoveI2F` > nodes. The implementation follows a similar pattern to what is done with > conversion (`Conv*`) nodes. The tests in `TestCompatibleUseDefTypeSize` have > been updated with the new expectations. > > Also added a JMH benchmark which measures throughput (the higher the number > the better) for methods that exercise these nodes. On darwin/aarch64 it shows: > > > Benchmark (seed) (size) Mode Cnt Base > Patch Units Diff > VectorBitConversion.doubleToLongBits 0 2048 thrpt 8 1168.782 > 1157.717 ops/ms -1% > VectorBitConversion.doubleToRawLongBits 0 2048 thrpt 8 3999.387 > 7353.936 ops/ms +83% > VectorBitConversion.floatToIntBits 0 2048 thrpt 8 1200.338 > 1188.206 ops/ms -1% > VectorBitConversion.floatToRawIntBits 0 2048 thrpt 8 4058.248 > 14792.474 ops/ms +264% > VectorBitConversion.intBitsToFloat 0 2048 thrpt 8 3050.313 > 14984.246 ops/ms +391% > VectorBitConversion.longBitsToDouble 0 2048 thrpt 8 3022.691 > 7379.360 ops/ms +144% > > > The improvements observed are a result of vectorization. The lack of > vectorization in `doubleToLongBits` and `floatToIntBits` demonstrates that > these changes do not affect their performance. These methods do not vectorize > because of flow control. > > I've run the tier1-3 tests on linux/aarch64 and didn't observe any > regressions. src/hotspot/share/opto/vectornode.cpp line 1831: > 1829: > 1830: bool VectorReinterpretNode::implemented(int opc, uint vlen, BasicType > src_type, BasicType dst_type) { > 1831: if ((src_type == T_FLOAT && dst_type == T_INT) || Just a suggestion, do you feel a `switch-case` could be more readable/clear in this case? Something like this - bool VectorReinterpretNode::implemented(uint vlen, BasicType src_type, BasicType dst_type) { switch (src_type) { case T_FLOAT: if (dst_type != T_INT) return false; break; case T_INT: if (dst_type != T_FLOAT) return false; break; case T_DOUBLE: if (dst_type != T_LONG) return false; break; case T_LONG: if (dst_type != T_DOUBLE) return false; break; default: return false; } return Matcher::match_rule_supported_auto_vectorization(Op_VectorReinterpret, vlen, dst_type); } ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/26457#discussion_r2247906630