Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
connglli opened this issue Jun 13, 2022 · 10 comments · Fixed by eclipse/omr#6576
Closed

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

connglli opened this issue Jun 13, 2022 · 10 comments · Fixed by eclipse/omr#6576
Assignees
Labels
blocker comp:jit segfault Issues that describe segfaults / JVM crashes userRaised

Comments

@connglli
Copy link

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
Copy link
Member

pshipton commented Jun 13, 2022

This is easily reproducible, on 0.32 and the latest.

@0xdaryl fyi

@pshipton
Copy link
Member

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

@pshipton pshipton added the segfault Issues that describe segfaults / JVM crashes label Jun 13, 2022
@0xdaryl
Copy link
Contributor

0xdaryl commented Jun 14, 2022

@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
Copy link
Contributor

a7ehuo commented Jun 14, 2022

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
Copy link
Contributor

a7ehuo commented Jun 15, 2022

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 added a commit to a7ehuo/omr that referenced this issue Jun 17, 2022
Blocks could have been removed when the exception edges
of an empty goto block are removed. The IN edges saved
previously in fixablePreds need to be updated.

Fixes: eclipse-openj9/openj9#15305

Signed-off-by: Annabelle Huo <Annabelle.Huo@ibm.com>
@a7ehuo
Copy link
Contributor

a7ehuo commented Jun 20, 2022

Opened eclipse/omr#6576 for a fix. Currently testing the update based on PR review comments.

@0xdaryl
Copy link
Contributor

0xdaryl commented Jun 21, 2022

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

@pshipton
Copy link
Member

pshipton commented Jun 22, 2022

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

@0xdaryl
Copy link
Contributor

0xdaryl commented Jun 23, 2022

@a7ehuo will open a 0.33 PR for this.

a7ehuo added a commit to a7ehuo/openj9-omr that referenced this issue Jun 23, 2022
…sors

Blocks could have been removed when the exception edges
of an empty goto block are removed. The removal should
take place before the IN edges are saved in `fixablePreds`.

Fixes: eclipse-openj9/openj9#15305

Signed-off-by: Annabelle Huo <Annabelle.Huo@ibm.com>
@a7ehuo
Copy link
Contributor

a7ehuo commented Jun 23, 2022

Created eclipse-openj9/openj9-omr#152 for openj9-omr v0.33 release

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
blocker comp:jit segfault Issues that describe segfaults / JVM crashes userRaised
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants