IBM Support

IJ16011: INCORRECT RESULTS AFTER METHOD IS JIT COMPILED

Subscribe to this APAR

By subscribing, you receive periodic emails alerting you to the status of the APAR, along with a link to the fix after it becomes available. You can track this item individually or track all items by product.

Notify me when this APAR changes.

Notify me when an APAR for this component changes.

 

APAR status

  • Closed as program error.

Error description

  • Error Message: After some period of operation, incorrect results
    are obtained from a method that was previously producing correct
    results.
    .
    Stack Trace: N/A
    .
    Java methods are initially run in the interpreter and after some
    period of operation the most frequently used methods get
    compiled by the JIT. An error in the JIT compiler can under rare
    conditions cause incorrect results to be produced. This specific
    problem will relate to a value used inside or following a loop
    where the definition of the value may have been defined on the
    current loop iteration or a previous loop iteration based on
    conditional control flow.
    

Local fix

  • The optimisation in the JIT compiler that causes this problem is
    global value propagation. The optimisation can be disabled for
    the failing method to avoid the errors. For example, if the
    method is
    packageA.ClassB.methodC
    then the following option will prevent global value propagation
    being used during the compilation of the method:
    -Xjit:{packageA/ClassB.methodC(*}(disableGlobalVP),dontInline={p
    ackageA/ClassB.methodC(*}
    Note that there can be at most one Xjit option on the command
    line, so if there is already one in use it must be combined with
    the above using a comma.
    

Problem summary

  • The underlying cause of the problem is highly technical, but
    full details can be found in the OpenJ9 PR for those that wish
    to explore them https://github.com/eclipse/omr/pull/3656. The
    short summary is that the optimisation tries to track the
    specific values of program intermediate results and there is a
    bug where the wrong value may be predicted when the intermediate
    value's definition is inside a loop and depends on a value that
    is conditionally from the current loop iteration or a previous
    loop iteration.
    

Problem conclusion

  • The global value propagation implementation has been
    significantly extended to handle a class of complex data flows
    that it was not able to correctly handle prior to the change.
    .
    This APAR will be fixed in the following Java Releases:
       8    SR5 FP36  (8.0.5.36)
    .
    Contact your IBM Product's Service Team for these Service
    Refreshes and Fix Packs.
    For those running stand-alone, information about the available
    Service Refreshes and Fix Packs can be found at:
               https://www.ibm.com/developerworks/java/jdk/
    

Temporary fix

Comments

APAR Information

  • APAR number

    IJ16011

  • Reported component name

    JIT

  • Reported component ID

    620700124

  • Reported release

    130

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2019-05-08

  • Closed date

    2019-05-08

  • Last modified date

    2019-05-08

  • APAR is sysrouted FROM one or more of the following:

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    JIT

  • Fixed component ID

    620700124

Applicable component levels

[{"Business Unit":{"code":"BU048","label":"IBM Software"},"Product":{"code":"SSC9HBA","label":"Just In Time (JIT) Compiler"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"130","Edition":"","Line of Business":{"code":"","label":""}}]

Document Information

Modified date:
08 May 2019