eclipse-openj9 / openj9

Eclipse OpenJ9: A Java Virtual Machine for OpenJDK that's optimized for small footprint, fast start-up, and high throughput. Builds on Eclipse OMR (https://github.com/eclipse/omr) and combines with the Extensions for OpenJDK for OpenJ9 repo.
Other
3.28k stars 721 forks source link

JDK8 Segmentation error with vmState=vmState=0x000522ff #15305

Closed connglli closed 2 years ago

connglli commented 2 years ago

Java -version output

openjdk version "1.8.0_342-internal"
OpenJDK Runtime Environment (build 1.8.0_342-internal-_2022_06_10_15_18-b00)
Eclipse OpenJ9 VM (build master-3d06b2f9c, JRE 1.8.0 Linux amd64-64-Bit Compressed References 20220610_000000 (JIT enabled, AOT enabled)
OpenJ9   - 3d06b2f9c
OMR      - cf8ddbd1a
JCL      - 2bb179375a based on jdk8u342-b05)

Summary of problem

The following test case crashes OpenJ9's JIT compiler

$ cat Test.java
public class Test {
  static int N;
  static long instanceCount;
  int iFld;
  static float fFld1;

  static void vMeth1() {
    int i4, i6;
    for (i4 = 4; i4 < 115; i4 += 3)
      for (i6 = 1; i6 < 14; ++i6)
        for (int ax$3 = -4605; ax$3 < 4492; ax$3 += 1)
          try {
            double[] ax$0 = new double[1];
            ax$0[0] = 0;
          } catch (Throwable ax$2) {
          } finally {
          }
  }

  static int iMeth(long l, float f) {
    int i2, iArr2[] = new int[N];
    i2 = 1;
    while (i2 < 118) vMeth1();
    long meth_res = checkSum(iArr2);
    return (int) meth_res;
  }

  void vMeth(int i) {
    int i1;
    instanceCount = iMeth(instanceCount, fFld1);
  }

  public void mainTest(String[] strArr1) {
    vMeth(iFld);
  }

  public static void main(String[] strArr) {
    Test _instance = new Test();
    for (int i = 0; ; ) _instance.mainTest(strArr);
  }

  public static long checkSum(int[] a) {
    long sum = 0;
    for (int j = 0; j < a.length; j++) {
      sum += (a[j] / (j + 1) + a[j] % (j + 1));
    }
    return sum;
  }
}

Diagnostic files

By issuing

$ java -Xmx1G Test

the following crash log is given:

#0: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x7ab6d5) [0x7ffadf3ce6d5]
#1: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x7b69c0) [0x7ffadf3d99c0]
#2: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x1125d9) [0x7ffaded355d9]
#3: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9prt29.so(+0x2911a) [0x7ffae446f11a]
#4: /lib/x86_64-linux-gnu/libpthread.so.0(+0x14420) [0x7ffae48e4420]
#5: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x67d29b) [0x7ffadf2a029b]
#6: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x67ec81) [0x7ffadf2a1c81]
#7: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x680acd) [0x7ffadf2a3acd]
#8: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x681e27) [0x7ffadf2a4e27]
#9: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x505e12) [0x7ffadf128e12]
#10: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x635447) [0x7ffadf258447]
#11: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x6359d9) [0x7ffadf2589d9]
#12: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x636d8b) [0x7ffadf259d8b]
#13: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x42ba25) [0x7ffadf04ea25]
#14: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x121e6a) [0x7ffaded44e6a]
#15: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x122c73) [0x7ffaded45c73]
#16: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9prt29.so(+0x29c53) [0x7ffae446fc53]
#17: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x120a69) [0x7ffaded43a69]
#18: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x1210d7) [0x7ffaded440d7]
#19: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x11fdab) [0x7ffaded42dab]
#20: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x12009a) [0x7ffaded4309a]
#21: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x120162) [0x7ffaded43162]
#22: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9prt29.so(+0x29c53) [0x7ffae446fc53]
#23: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so(+0x1205a2) [0x7ffaded435a2]
#24: /zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9thr29.so(+0xf2b2) [0x7ffae46322b2]
#25: /lib/x86_64-linux-gnu/libpthread.so.0(+0x8609) [0x7ffae48d8609]
#26: /lib/x86_64-linux-gnu/libc.so.6(clone+0x43) [0x7ffae4a18133]
Unhandled exception
Type=Segmentation error vmState=0x000522ff
J9Generic_Signal_Number=00000018 Signal_Number=0000000b Error_Value=00000000 Signal_Code=00000001
Handler1=00007FFAE4686020 Handler2=00007FFAE446EEF0 InaccessibleAddress=0000000000000060
RDI=00007FFADBFED3B8 RSI=0000000001000000 RAX=00007FFADC243000 RBX=000000000000000E
RCX=00000000FFFFFFF1 RDX=00007FFADC247380 R8=0000000000000000 R9=00007FFADC247350
R10=0000000000040000 R11=0000000000000000 R12=0000000000000001 R13=00007FFADBFEC6E0
R14=0000000000000027 R15=00007FFADC214F40
RIP=00007FFADF2A029B GS=0000 FS=0000 RSP=00007FFADD0D8B50
EFlags=0000000000010287 CS=0033 RBP=0000000000000000 ERR=0000000000000004
TRAPNO=000000000000000E OLDMASK=0000000000000000 CR2=0000000000000060
xmm0 0000000000000000 (f: 0.000000, d: 0.000000e+00)
xmm1 4059000000000000 (f: 0.000000, d: 1.000000e+02)
xmm2 3ff0000000000000 (f: 0.000000, d: 1.000000e+00)
xmm3 3ff0000000000000 (f: 0.000000, d: 1.000000e+00)
xmm4 4010000000000000 (f: 0.000000, d: 4.000000e+00)
xmm5 00007ffac4000080 (f: 3288334336.000000, d: 6.952245e-310)
xmm6 00007ffadc064590 (f: 3691398656.000000, d: 6.952265e-310)
xmm7 3ff0000000000000 (f: 0.000000, d: 1.000000e+00)
xmm8 252e732a2e250073 (f: 774176896.000000, d: 1.372768e-129)
xmm9 0000000000000000 (f: 0.000000, d: 0.000000e+00)
xmm10 0000000000000000 (f: 0.000000, d: 0.000000e+00)
xmm11 0000000000000000 (f: 0.000000, d: 0.000000e+00)
xmm12 0000000000000000 (f: 0.000000, d: 0.000000e+00)
xmm13 0000000000000000 (f: 0.000000, d: 0.000000e+00)
xmm14 0000000000000000 (f: 0.000000, d: 0.000000e+00)
xmm15 0000000000000000 (f: 0.000000, d: 0.000000e+00)
Module=/zdata/congli/OpenJ9/jdk8/jre/lib/amd64/default/libj9jit29.so
Module_base_address=00007FFADEC23000

Method_being_compiled=Test.vMeth1()V
Target=2_90_20220610_000000 (Linux 5.4.0-117-generic)
CPU=amd64 (128 logical CPUs) (0x3ee84d7000 RAM)
----------- Stack Backtrace -----------
_ZN20TR_RegisterCandidate29extendLiveRangesForLiveOnExitEPN2TR11CompilationEPPNS0_5BlockER8TR_ArrayIS4_E+0x38b (0x00007FFADF2A029B [libj9jit29.so+0x67d29b])
_ZN20TR_RegisterCandidate24processLiveOnEntryBlocksEPPN2TR5BlockEPiPNS0_11CompilationER8TR_ArrayIiES9_S9_P12TR_BitVectorRS7_IS2_Eb+0x1651 (0x00007FFADF2A1C81 [libj9jit29.so+0x67ec81])
_ZN20TR_RegisterCandidate9setWeightEPPN2TR5BlockEPiPNS0_11CompilationER8TR_ArrayIiES9_S9_P12TR_BitVectorRS7_IS2_ERSA_SE_+0x62d (0x00007FFADF2A3ACD [libj9jit29.so+0x680acd])
_ZN21TR_RegisterCandidates6assignEPPN2TR5BlockEiRiS4_+0xb67 (0x00007FFADF2A4E27 [libj9jit29.so+0x681e27])
_ZN26TR_GlobalRegisterAllocator7performEv+0xa22 (0x00007FFADF128E12 [libj9jit29.so+0x505e12])
_ZN3OMR9Optimizer19performOptimizationEPK20OptimizationStrategyiii+0x767 (0x00007FFADF258447 [libj9jit29.so+0x635447])
_ZN3OMR9Optimizer19performOptimizationEPK20OptimizationStrategyiii+0xcf9 (0x00007FFADF2589D9 [libj9jit29.so+0x6359d9])
_ZN3OMR9Optimizer8optimizeEv+0x1db (0x00007FFADF259D8B [libj9jit29.so+0x636d8b])
_ZN3OMR11Compilation7compileEv+0x925 (0x00007FFADF04EA25 [libj9jit29.so+0x42ba25])
_ZN2TR28CompilationInfoPerThreadBase7compileEP10J9VMThreadPNS_11CompilationEP17TR_ResolvedMethodR11TR_J9VMBaseP19TR_OptimizationPlanRKNS_16SegmentAllocatorE+0x4fa (0x00007FFADED44E6A [libj9jit29.so+0x121e6a])
_ZN2TR28CompilationInfoPerThreadBase14wrappedCompileEP13J9PortLibraryPv+0x323 (0x00007FFADED45C73 [libj9jit29.so+0x122c73])
omrsig_protect+0x1e3 (0x00007FFAE446FC53 [libj9prt29.so+0x29c53])
_ZN2TR28CompilationInfoPerThreadBase7compileEP10J9VMThreadP21TR_MethodToBeCompiledRN2J917J9SegmentProviderE+0x309 (0x00007FFADED43A69 [libj9jit29.so+0x120a69])
_ZN2TR24CompilationInfoPerThread12processEntryER21TR_MethodToBeCompiledRN2J917J9SegmentProviderE+0x207 (0x00007FFADED440D7 [libj9jit29.so+0x1210d7])
_ZN2TR24CompilationInfoPerThread14processEntriesEv+0x38b (0x00007FFADED42DAB [libj9jit29.so+0x11fdab])
_ZN2TR24CompilationInfoPerThread3runEv+0x2a (0x00007FFADED4309A [libj9jit29.so+0x12009a])
_Z30protectedCompilationThreadProcP13J9PortLibraryPN2TR24CompilationInfoPerThreadE+0x82 (0x00007FFADED43162 [libj9jit29.so+0x120162])
omrsig_protect+0x1e3 (0x00007FFAE446FC53 [libj9prt29.so+0x29c53])
_Z21compilationThreadProcPv+0x1d2 (0x00007FFADED435A2 [libj9jit29.so+0x1205a2])
thread_wrapper+0x162 (0x00007FFAE46322B2 [libj9thr29.so+0xf2b2])
start_thread+0xd9 (0x00007FFAE48D8609 [libpthread.so.0+0x8609])
clone+0x43 (0x00007FFAE4A18133 [libc.so.6+0x11f133])
---------------------------------------
JVMDUMP039I Processing dump event "gpf", detail "" at 2022/06/13 16:37:42 - please wait.
JVMDUMP032I JVM requested System dump using '/zdata/congli/ax-exp/ax-eval/2-ax-only/62.openj9/mutant/red/core.20220613.163742.3084775.0001.dmp' in response to an event
JVMDUMP010I System dump written to /zdata/congli/ax-exp/ax-eval/2-ax-only/62.openj9/mutant/red/core.20220613.163742.3084775.0001.dmp
JVMDUMP032I JVM requested Java dump using '/zdata/congli/ax-exp/ax-eval/2-ax-only/62.openj9/mutant/red/javacore.20220613.163742.3084775.0002.txt' in response to an event
JVMDUMP010I Java dump written to /zdata/congli/ax-exp/ax-eval/2-ax-only/62.openj9/mutant/red/javacore.20220613.163742.3084775.0002.txt
JVMDUMP032I JVM requested Snap dump using '/zdata/congli/ax-exp/ax-eval/2-ax-only/62.openj9/mutant/red/Snap.20220613.163742.3084775.0003.trc' in response to an event
JVMDUMP010I Snap dump written to /zdata/congli/ax-exp/ax-eval/2-ax-only/62.openj9/mutant/red/Snap.20220613.163742.3084775.0003.trc
JVMDUMP032I JVM requested JIT dump using '/zdata/congli/ax-exp/ax-eval/2-ax-only/62.openj9/mutant/red/jitdump.20220613.163742.3084775.0004.dmp' in response to an event
JVMDUMP051I JIT dump occurred in 'JIT Compilation Thread-000' thread 0x0000000000051900
JVMDUMP049I JIT dump notified all waiting threads of the current method to be compiled
JVMDUMP054I JIT dump is tracing the IL of the method on the crashed compilation thread
JVMDUMP048I JIT dump method being compiled is an ordinary method
JVMDUMP053I JIT dump is recompiling Test.vMeth1()V
JVMDUMP052I JIT dump recursive crash occurred on diagnostic thread
JVMDUMP010I JIT dump written to /zdata/congli/ax-exp/ax-eval/2-ax-only/62.openj9/mutant/red/jitdump.20220613.163742.3084775.0004.dmp
JVMDUMP013I Processed dump event "gpf", detail "".

Please also check openj9-bug-62.tar.gz for all the logs (jitdump, snap, etc.) and the testcase (Test.java, Test.class).

pshipton commented 2 years ago

This is easily reproducible, on 0.32 and the latest.

@0xdaryl fyi

pshipton commented 2 years ago

vmState [0x522ff]: {J9VMSTATE_JIT} {tacticalGlobalRegisterAllocator}

0xdaryl commented 2 years ago

@a7ehuo : could you investigate this reproducible crash please? Note that it has been labeled a blocker for the 0.33 release so please give it higher priority.

a7ehuo commented 2 years ago

The crash happened when the method Test.vMeth1()V is compiled at scorching. The crash is reproducible with JDK11 and other JDKs. The crash reason is that it access a removed/invalid block when traversing predecessor blocks in TR_RegisterCandidate::extendLiveRangesForLiveOnExit [1].

In my reproduced case, when it extends live ranges due to live on exits for block_39, one of the predecessor blocks is block_14 [2]. However block_14 has already been removed in redundantGotoElimination [3]. Setting disableRedundantGotoElimination also makes the crash to go away (the test app runs for a long time to complete). I'm continuing my investigation in redundantGotoElimination on how blocks are removed.

[1]


Thread 4 "JIT Compilation" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffd4cb8700 (LWP 12408)]
TR_RegisterCandidate::extendLiveRangesForLiveOnExit (this=this@entry=0x7fffcdb8b780, comp=comp@entry=0x7fffcdb82000, 
    blocks=blocks@entry=0x7fffd4cae4b0, startOfExtendedBBForBB=...)
    at /root/home/ahuo/src/openj9-openjdk-jdk11/omr/compiler/optimizer/RegisterCandidate.cpp:1680
1680                   blocksVisited.set(currBlock->getNumber());
(gdb) bt
#0  TR_RegisterCandidate::extendLiveRangesForLiveOnExit (this=this@entry=0x7fffcdb8b780, comp=comp@entry=0x7fffcdb82000, 
    blocks=blocks@entry=0x7fffd4cae4b0, startOfExtendedBBForBB=...)
    at /root/home/ahuo/src/openj9-openjdk-jdk11/omr/compiler/optimizer/RegisterCandidate.cpp:1680
#1  0x00007fffef93e8c2 in TR_RegisterCandidate::processLiveOnEntryBlocks (this=this@entry=0x7fffcdb8b780, 
    blocks=<optimized out>, blockStructureWeight=<optimized out>, comp=<optimized out>, blockGPRCount=..., 
    blockFPRCount=..., blockVRFCount=..., referencedBlocks=<optimized out>, startOfExtendedBBForBB=..., 
    callToRemoveUnusedLoops=<optimized out>)
    at /root/home/ahuo/src/openj9-openjdk-jdk11/omr/compiler/optimizer/RegisterCandidate.cpp:1383
#2  0x00007fffef9406cd in TR_RegisterCandidate::setWeight (this=0x7fffcdb8b780, blocks=<optimized out>, 
    blockStructureWeight=<optimized out>, comp=<optimized out>, blockGPRCount=..., blockFPRCount=..., blockVRFCount=..., 
    referencedBlocks=<optimized out>, startOfExtendedBBForBB=..., firstBlocks=..., isExtensionOfPreviousBlock=...)
    at /root/home/ahuo/src/openj9-openjdk-jdk11/omr/compiler/optimizer/RegisterCandidate.cpp:632
#3  0x00007fffef941ad7 in TR_RegisterCandidates::assign (this=0x7fffcdb8b3e0, cfgBlocks=cfgBlocks@entry=0x7fffd4cae4b0, 
    numberOfBlocks=numberOfBlocks@entry=48, lowestNumber=@0x7fffcdc9214c: 2147483647, highestNumber=@0x7fffcdc92150: -1)
    at /root/home/ahuo/src/openj9-openjdk-jdk11/omr/compiler/optimizer/RegisterCandidate.cpp:2333
#4  0x00007fffef7c58b2 in TR_GlobalRegisterAllocator::perform (this=0x7fffcdc92120)
    at /root/home/ahuo/src/openj9-openjdk-jdk11/omr/compiler/optimizer/GlobalRegisterAllocator.cpp:475
#5  0x00007fffef8f4d37 in OMR::Optimizer::performOptimization (this=this@entry=0x7fffcdc2d8b0, 
    optimization=optimization@entry=0x7fffefc33b28 <tacticalGlobalRegisterAllocatorOpts+40>, 
    firstOptIndex=firstOptIndex@entry=0, lastOptIndex=lastOptIndex@entry=2147483647, doTiming=doTiming@entry=0)
    at /root/home/ahuo/src/openj9-openjdk-jdk11/omr/compiler/optimizer/OMROptimizer.cpp:2053
#6  0x00007fffef8f52c9 in OMR::Optimizer::performOptimization (this=this@entry=0x7fffcdc2d8b0, 
    optimization=optimization@entry=0x7fffefbc5b38 <scorchingStrategyOpts+408>, firstOptIndex=firstOptIndex@entry=0, 
    lastOptIndex=lastOptIndex@entry=2147483647, doTiming=doTiming@entry=0)
    at /root/home/ahuo/src/openj9-openjdk-jdk11/omr/compiler/optimizer/OMROptimizer.cpp:1600
#7  0x00007fffef8f667b in OMR::Optimizer::optimize (this=0x7fffcdc2d8b0)
    at /root/home/ahuo/src/openj9-openjdk-jdk11/omr/compiler/optimizer/OMROptimizer.cpp:1128
#8  0x00007fffef6e5a97 in OMR::Compilation::performOptimizations (this=this@entry=0x7fffcdb82000)
    at /root/home/ahuo/src/openj9-openjdk-jdk11/omr/compiler/compile/OMRCompilation.cpp:1267
...

[2]

Extending live ranges due to live on exits
extendLiveRangesForLiveOnExit: block_39

extendLiveRangesForLiveOnExit: e 00007FFFD4CAD6E8 *e 00007FFFCDBA3CC0 CFGNode 00007FFFCDBD2C20 pred block_14 (0x00007FFFCDBD2C20) isValid 0

extendLiveRangesForLiveOnExit: pred block_14 (0x00007FFFCDBD2C20) isValid 0. extPred block_-1 (0x0000000000000000) isValid -1

extendLiveRangesForLiveOnExit: currBlock block_-1 (0x0000000000000000) isValid -1

[3] before redundantGotoElimination

         8 [0x7fffcdc239c0] BBStart at 0x7fffcdbd7c00, frequency = 10000
                 in        = [45(6) 39(10000) 14(6) ]
                 out       = [39(10000) ]
                 exception in  = []
                 exception out = [15(6) 14(6) ]
        12 [0x7fffcdc232a0] BBStart at 0x7fffcdbd7840, frequency = 6
                 in        = [40(6) ]
                 out       = [4(6) 13(6) ]
                 exception in  = []
                 exception out = []
        13 [0x7fffcdc23170] BBStart at 0x7fffcdbd77a0, frequency = 6
                 in        = [12(6) ]
                 out       = [1(6) ]
                 exception in  = []
                 exception out = []
        14 [0x7fffcdc23c20] BBStart at 0x7fffcdbd7d40, frequency = 6
                 in        = []
                 out       = [8(6) 41(6) ]
                 exception in  = [8(6) ]
                 exception out = []
        15 [0x7fffcdc23d50] BBStart at 0x7fffcdbd7de0, frequency = 6
                 in        = []
                 out       = [1(6) ]
                 exception in  = [8(6) ]
                 exception out = []
        36 [0x7fffcdd62cf0] BBStart at 0x7fffcdc56520, frequency = 6
                 in        = [6(6) ]
                 out       = [44(6) ]
                 exception in  = []
                 exception out = []
...
        39 [0x7fffcde842d0] BBStart at 0x7fffcdc571f0, frequency = 10000
                 in        = [8(10000) ]
                 out       = [40(6) 8(10000) ]
                 exception in  = []
                 exception out = []

after redundantGotoElimination

        12 [0x7fffcdc232a0] BBStart at 0x7fffcdbd7840, frequency = 6
                 in        = [40(6) ]
                 out       = [4(6) 13(6) ]
                 exception in  = []
                 exception out = []
        13 [0x7fffcdc23170] BBStart at 0x7fffcdbd77a0, frequency = 6
                 in        = [12(6) ]
                 out       = [1(6) ]
                 exception in  = []
                 exception out = []
        36 [0x7fffcdd62cf0] BBStart at 0x7fffcdc56520, frequency = 6
                 in        = [6(6) ]
                 out       = [44(6) ]
                 exception in  = []
                 exception out = []
...
        39 [0x7fffcde842d0] BBStart at 0x7fffcdc571f0, frequency = 10000
                 in        = [45(6) 39(10000) 14(6) ] <---- block_14 is removed already
                 out       = [39(10000) 40(6) ]
                 exception in  = []
                 exception out = []
a7ehuo commented 2 years ago

I think I found the root cause why the removed block (block_14) has an edge to block_39 after redundantGotoElimination.

In TR_EliminateRedundantGotos::process, it fist pushes all IN edges of the block being removed (block_8) into fixablePreds [1]. In this case, the edges are: block_45 -> block_8, block_39 -> block_8, block_14 -> block_8 are stored into fixablePreds.

Then it removes exception edges for block_8 [2] which are block_8 -> block_15, block_8 -> block_14. During this process, block_14 becomes unreachable and removed.

Next, redirectPredecessors is called to fix up all the CFGEdges that goes into destBlock (block_39) [3]. Because fixablePreds contains an edge block_14 -> block_8. It ends up adding an edge from block_14--> block_39. It looks to me fixablePreds needs to be updated to remove the edges that contain removed nodes after the exception edges are removed. I'm looking at a fix next.

[1] https://github.com/eclipse/omr/blob/0aa4535f4ecf8c588b6ba0e09c0913fe9f2e9246/compiler/optimizer/LocalOpts.cpp#L3489 [2] https://github.com/eclipse/omr/blob/0aa4535f4ecf8c588b6ba0e09c0913fe9f2e9246/compiler/optimizer/LocalOpts.cpp#L3539-3540 [3] https://github.com/eclipse/omr/blob/0aa4535f4ecf8c588b6ba0e09c0913fe9f2e9246/compiler/optimizer/LocalOpts.cpp#L3602

a7ehuo commented 2 years ago

Opened https://github.com/eclipse/omr/pull/6576 for a fix. Currently testing the update based on PR review comments.

0xdaryl commented 2 years ago

This is not a 0.33 regression. It fails at least as far back as 0.24 with JDK 11.

pshipton commented 2 years ago

Reopen until omr promotes and we consider if we want the fix in 0.33

0xdaryl commented 2 years ago

@a7ehuo will open a 0.33 PR for this.

a7ehuo commented 2 years ago

Created https://github.com/eclipse-openj9/openj9-omr/pull/152 for openj9-omr v0.33 release