RFR: 8367333: C2: Vector math operation intrinsification failure
    Vladimir Ivanov 
    vlivanov at openjdk.org
       
    Fri Sep 12 20:53:30 UTC 2025
    
    
  
As part of [JDK-8353786](https://bugs.openjdk.org/browse/JDK-8353786), C2 support for operations backed by the vector math library was completely removed. On JDK side, there is a special dispatching logic added to avoid intrinsic calls in `jdk.internal.vm.vector.VectorSupport`. But it's still possible to observe such paradoxical situations (intrinsic calls with obsolete operation IDs) when processing effectively dead code.
Consider `FloatVector::lanewiseTemplate`:
    FloatVector lanewiseTemplate(VectorOperators.Unary op) {
        if (opKind(op, VO_SPECIAL)) {
            ...                             
            else if (opKind(op, VO_MATHLIB)) {
                return unaryMathOp(op);
            }
        }
        int opc = opCode(op);
        return VectorSupport.unaryOp(opc, ...);
    }
At runtime, `unaryMathOp` is unconditionally invoked, but during compilation it's possible to end up with an intrinsification attempt of `VectorSupport.unaryOp()` before `opKind(op, VO_SPECIAL)` is inlined. 
It can be reliably reproduced `-XX:+StressIncrementalInlining` flag.
The fix is to fail-fast intrinsification rather than crashing the VM.
Testing: tier1 - tier4
-------------
Commit messages:
 - fix
Changes: https://git.openjdk.org/jdk/pull/27263/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=27263&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8367333
  Stats: 168 lines in 3 files changed: 168 ins; 0 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/27263.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/27263/head:pull/27263
PR: https://git.openjdk.org/jdk/pull/27263
    
    
More information about the hotspot-compiler-dev
mailing list