RFR: 8261671: X86 I2L conversion can be skipped for certain masked positive values

Marcus G K Williams github.com+168222+mgkwill at openjdk.java.net
Tue Feb 16 16:19:01 UTC 2021


8261671: X86 I2L conversion can be skipped for certain masked positive values

For the following expression:
 (long)(value & mask)
Where value is of int type and mask is constant (power of two – 1), we can directly generate bzhi instruction to zero the upper bits instead of doing an andl, followed by movslq

Before:
Benchmark Mode Cnt Score Error Units
SkipIntToLongCast.skipMaskedSmallPositiveCast avgt 15 10.679 ± 1.496 ns/op


After:
Benchmark Mode Cnt Score Error Units
SkipIntToLongCast.skipMaskedSmallPositiveCast avgt 15 7.870 ± 0.067 ns/op

Signed-off-by: Marcus G K Williams <marcus.williams at intel.com>

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

Commit messages:
 - 8261671: Skip unnecessary Int2L conversions

Changes: https://git.openjdk.java.net/jdk/pull/2590/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=2590&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8261671
  Stats: 37 lines in 3 files changed: 37 ins; 0 del; 0 mod
  Patch: https://git.openjdk.java.net/jdk/pull/2590.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/2590/head:pull/2590

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


More information about the hotspot-compiler-dev mailing list