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

Assertion failed at runtime/compiler/codegen/J9TreeEvaluator.cpp:1343: isInstanceOf #15449

Closed Spencer-Comin closed 2 years ago

Spencer-Comin commented 2 years ago

Internal JDK11 debug build on z/Linux failed on assert at runtime/compiler/codegen/J9TreeEvaluator.cpp:1343: isInstanceOf

openjdk version "11.0.16-internal" 2022-07-19
OpenJDK Runtime Environment (build 11.0.16-internal+0-adhoc.spencer.reference)
Eclipse OpenJ9 VM (build master-f2960b6ee, JRE 11 Linux s390x-64-Bit Compressed References 20220628_000000 (JIT enabled, AOT enabled)
OpenJ9   - f2960b6ee
OMR      - c0c825470
JCL      - 2cc1edf4c8 based on jdk-11.0.16+7)
Updating support/demos/image/jfc/CodePointIM/src.zip
Compiling 3 files for BUILD_DEMO_FileChooserDemo
Updating support/demos/image/jfc/FileChooserDemo/src.zip
Assertion failed at /jit/team/spencer/11/reference/openj9/runtime/compiler/codegen/J9TreeEvaluator.cpp:1343: isInstanceOf
VMState: 0x0005ff04
    Expecting instanceof when cast class is a runtime variable
compiling java/lang/invoke/MethodHandles.insertArguments(Ljava/lang/invoke/MethodHandle;I[Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; at level: cold
#0: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x96e98a) [0x3ffb346e98a]
#1: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x97695c) [0x3ffb347695c]
#2: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x6e0baa) [0x3ffb31e0baa]
#3: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x6e0ce2) [0x3ffb31e0ce2]
#4: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x6e0eaa) [0x3ffb31e0eaa]
#5: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x13cd74) [0x3ffb2c3cd74]
#6: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x5c896c) [0x3ffb30c896c]
#7: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x62ca58) [0x3ffb312ca58]
#8: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x12a2dc) [0x3ffb2c2a2dc]
#9: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x63a4ae) [0x3ffb313a4ae]
#10: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x63ab64) [0x3ffb313ab64]
#11: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x6361b6) [0x3ffb31361b6]
#12: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x65e3da) [0x3ffb315e3da]
#13: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x17666a) [0x3ffb2c7666a]
#14: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x177738) [0x3ffb2c77738]
#15: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9prt29.so(+0x331fe) [0x3ffb3f331fe]
#16: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x174ad6) [0x3ffb2c74ad6]
#17: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x17511c) [0x3ffb2c7511c]
#18: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x1735ba) [0x3ffb2c735ba]
#19: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x173db8) [0x3ffb2c73db8]
#20: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x173ef0) [0x3ffb2c73ef0]
#21: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9prt29.so(+0x331fe) [0x3ffb3f331fe]
#22: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x17436a) [0x3ffb2c7436a]
#23: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9thr29.so(+0x5494) [0x3ffb8285494]
#24: /lib/s390x-linux-gnu/libpthread.so.0(+0x7aa8) [0x3ffb8687aa8]
#25: /lib/s390x-linux-gnu/libc.so.6(+0xfa896) [0x3ffb88fa896]
#26: [(nil)]

JIT: crashed while compiling java/lang/invoke/MethodHandles.insertArguments(Ljava/lang/invoke/MethodHandle;I[Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; (recoverable 0)
#0: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x96e98a) [0x3ffb346e98a]
#1: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x97695c) [0x3ffb347695c]
#2: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x15e9e0) [0x3ffb2c5e9e0]
#3: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9prt29.so(+0x32314) [0x3ffb3f32314]
#4: [0x3ffa08f7670]
#5: /lib/s390x-linux-gnu/libc.so.6(gsignal+0x8c) [0x3ffb883deec]
#6: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x6e0a38) [0x3ffb31e0a38]
#7: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x6e0ce8) [0x3ffb31e0ce8]
#8: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x6e0eaa) [0x3ffb31e0eaa]
#9: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x13cd74) [0x3ffb2c3cd74]
#10: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x5c896c) [0x3ffb30c896c]
#11: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x62ca58) [0x3ffb312ca58]
#12: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x12a2dc) [0x3ffb2c2a2dc]
#13: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x63a4ae) [0x3ffb313a4ae]
#14: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x63ab64) [0x3ffb313ab64]
#15: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x6361b6) [0x3ffb31361b6]
#16: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x65e3da) [0x3ffb315e3da]
#17: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x17666a) [0x3ffb2c7666a]
#18: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x177738) [0x3ffb2c77738]
#19: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9prt29.so(+0x331fe) [0x3ffb3f331fe]
#20: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x174ad6) [0x3ffb2c74ad6]
#21: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x17511c) [0x3ffb2c7511c]
#22: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x1735ba) [0x3ffb2c735ba]
#23: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x173db8) [0x3ffb2c73db8]
#24: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x173ef0) [0x3ffb2c73ef0]
#25: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9prt29.so(+0x331fe) [0x3ffb3f331fe]
#26: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9jit29.so(+0x17436a) [0x3ffb2c7436a]
#27: /jit/team/spencer/11/reference/build/linux-s390x-normal-server-release/jdk/lib/default/libj9thr29.so(+0x5494) [0x3ffb8285494]
#28: /lib/s390x-linux-gnu/libpthread.so.0(+0x7aa8) [0x3ffb8687aa8]
#29: /lib/s390x-linux-gnu/libc.so.6(+0xfa896) [0x3ffb88fa896]
Unhandled exception
Type=Unhandled trap vmState=0x0005ff04
J9Generic_Signal_Number=00000108 Signal_Number=00000005 Error_Value=00000000 Signal_Code=fffffffa
Handler1=000003FFB83474B8 Handler2=000003FFB3F32090
gpr0=000003FFA08F7B98 gpr1=FFFFFFFF00000000 gpr2=0000000000000000 gpr3=000003FFA08F7B98
gpr4=0000000000000000 gpr5=0000000000000008 gpr6=000003FFA08F7E80 gpr7=000003FFB35CC366
gpr8=000003FFB35CC3A2 gpr9=000000000000053F gpr10=000003FFB35CBDEE gpr11=000003FF82400000
gpr12=000003FFB3A12000 gpr13=000003FFB89542B8 gpr14=000003FFB31E0A38 gpr15=000003FFA08F7AF8
psw=000003FFB883DEEC mask=0705000180000000 fpc=00080000 bea=000003FFB893F7EA
fpr0 0000000000000005 (f: 5.000000, d: 2.470328e-323)
fpr1 0000000000000001 (f: 1.000000, d: 4.940656e-324)
fpr2 000003ffb899d000 (f: 3097088000.000000, d: 2.172332e-311)
fpr3 0000000000000000 (f: 0.000000, d: 0.000000e+00)
fpr4 000003ffa08f4878 (f: 2693744640.000000, d: 2.172133e-311)
fpr5 3fcc720a74b7854b (f: 1958184320.000000, d: 2.222303e-01)
fpr6 000003ffa08f4f68 (f: 2693746432.000000, d: 2.172133e-311)
fpr7 3f7e17d2dc43b59b (f: 3695425024.000000, d: 7.346939e-03)
fpr8 0000000000101000 (f: 1052672.000000, d: 5.200891e-318)
fpr9 000003ffe537e910 (f: 3845646592.000000, d: 2.172702e-311)
fpr10 000003ffa07fd000 (f: 2692730880.000000, d: 2.172132e-311)
fpr11 0000000000000000 (f: 0.000000, d: 0.000000e+00)
fpr12 0000000010dc6438 (f: 282879040.000000, d: 1.397608e-315)
fpr13 0000000000000000 (f: 0.000000, d: 0.000000e+00)
fpr14 000003fff3ffa508 (f: 4093617408.000000, d: 2.172824e-311)
fpr15 0000000000000000 (f: 0.000000, d: 0.000000e+00)
Module=/lib/s390x-linux-gnu/libc.so.6
Module_base_address=000003FFB8800000 Symbol=gsignal
Symbol_address=000003FFB883DE60

Method_being_compiled=java/lang/invoke/MethodHandles.insertArguments(Ljava/lang/invoke/MethodHandle;I[Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle;
Target=2_90_20220628_000000 (Linux 4.15.0-34-generic)
CPU=s390x (8 logical CPUs) (0xfb26bf000 RAM)
----------- Stack Backtrace -----------
gsignal+0x8c (0x000003FFB883DEEC [libc.so.6+0x3deec])
_ZN2TR4trapEv+0x68 (0x000003FFB31E0A38 [libj9jit29.so+0x6e0a38])
_ZN2TR15fatal_assertionEPKciS1_S1_z+0x0 (0x000003FFB31E0CE8 [libj9jit29.so+0x6e0ce8])
_ZN2TR9assertionEPKciS1_S1_z+0xaa (0x000003FFB31E0EAA [libj9jit29.so+0x6e0eaa])
_ZN2J913TreeEvaluator39calculateInstanceOfOrCheckCastSequencesEPN2TR4NodeEPNS0_30InstanceOfOrCheckCastSequencesEPP19TR_OpaqueClassBlockPNS1_13CodeGeneratorEPNS0_36InstanceOfOrCheckCastProfiledClassesEPjjPfPb+0x43c (0x000003FFB2C3CD74 [libj9jit29.so+0x13cd74])
_ZN2J91Z13TreeEvaluator18checkcastEvaluatorEPN2TR4NodeEPNS2_13CodeGeneratorE+0x11c (0x000003FFB30C896C [libj9jit29.so+0x5c896c])
_ZN3OMR13CodeGenerator8evaluateEPN2TR4NodeE+0xd8 (0x000003FFB312CA58 [libj9jit29.so+0x62ca58])
_ZN2J913CodeGenerator22doInstructionSelectionEv+0x28cc (0x000003FFB2C2A2DC [libj9jit29.so+0x12a2dc])
_ZN3OMR12CodeGenPhase32performInstructionSelectionPhaseEPN2TR13CodeGeneratorEPNS1_12CodeGenPhaseE+0xbe (0x000003FFB313A4AE [libj9jit29.so+0x63a4ae])
_ZN3OMR12CodeGenPhase10performAllEv+0xa4 (0x000003FFB313AB64 [libj9jit29.so+0x63ab64])
_ZN3OMR13CodeGenerator12generateCodeEv+0x8e (0x000003FFB31361B6 [libj9jit29.so+0x6361b6])
_ZN3OMR11Compilation7compileEv+0xb12 (0x000003FFB315E3DA [libj9jit29.so+0x65e3da])
_ZN2TR28CompilationInfoPerThreadBase7compileEP10J9VMThreadPNS_11CompilationEP17TR_ResolvedMethodR11TR_J9VMBaseP19TR_OptimizationPlanRKNS_16SegmentAllocatorE+0xa1a (0x000003FFB2C7666A [libj9jit29.so+0x17666a])
_ZN2TR28CompilationInfoPerThreadBase14wrappedCompileEP13J9PortLibraryPv+0x960 (0x000003FFB2C77738 [libj9jit29.so+0x177738])
omrsig_protect+0x366 (0x000003FFB3F331FE [libj9prt29.so+0x331fe])
_ZN2TR28CompilationInfoPerThreadBase7compileEP10J9VMThreadP21TR_MethodToBeCompiledRN2J917J9SegmentProviderE+0x57e (0x000003FFB2C74AD6 [libj9jit29.so+0x174ad6])
_ZN2TR24CompilationInfoPerThread12processEntryER21TR_MethodToBeCompiledRN2J917J9SegmentProviderE+0x2d4 (0x000003FFB2C7511C [libj9jit29.so+0x17511c])
_ZN2TR24CompilationInfoPerThread14processEntriesEv+0x15a (0x000003FFB2C735BA [libj9jit29.so+0x1735ba])
_ZN2TR24CompilationInfoPerThread3runEv+0x58 (0x000003FFB2C73DB8 [libj9jit29.so+0x173db8])
_Z30protectedCompilationThreadProcP13J9PortLibraryPN2TR24CompilationInfoPerThreadE+0xb0 (0x000003FFB2C73EF0 [libj9jit29.so+0x173ef0])
omrsig_protect+0x366 (0x000003FFB3F331FE [libj9prt29.so+0x331fe])
_Z21compilationThreadProcPv+0x1fa (0x000003FFB2C7436A [libj9jit29.so+0x17436a])
thread_wrapper+0x114 (0x000003FFB8285494 [libj9thr29.so+0x5494])
start_thread+0xd0 (0x000003FFB8687AA8 [libpthread.so.0+0x7aa8])
 (0x000003FFB88FA896 [libc.so.6+0xfa896])
 (0x0000000000000000 [<unknown>+0x0])
---------------------------------------

Steps to reproduce:

pshipton commented 2 years ago

@0xdaryl

r30shah commented 2 years ago

@Spencer-Comin Do you have a jitdump from the failure? Which we can inspect? Code in which assert is thrown is only used by Z and Power to generate list of tests for type testing (Instanceof/checkCast).

Spencer-Comin commented 2 years ago

I just tried another debug build with most recent OMR and OpenJ9 and it built successfully. However, looking at the original failure message, I came up with a unit test to trigger similar compilation of the failing method (MethodHandles.insertArguments()):

import java.lang.invoke.*;

class InsertArgumentsTest {
    static int counter = 0;

    static class Dummy {
        static void increment(int i) {
            counter += i;
        }   
    }   

    public static void main(String[] args) throws IllegalAccessException, NoSuchMethodException, Throwable {
        MethodHandle master = MethodHandles.lookup().findStatic(
            Dummy.class,
            "increment",
            MethodType.methodType(void.class, int.class)
        );  
        MethodHandle mh; 
        for (int i = 0; i < 100000; i++) {
            mh = MethodHandles.insertArguments(master, 0, i); 
            mh.invoke();
        }   
        System.out.println(counter);
    }   
}

This unit test still fails with the debug java when run with java -Xjit:"disableAsyncCompilation,dontInline={*methodHandles.insertArguments*},{*MethodHandles.insertArguments*}(disableInlining,traceFull,log=reference.log),verbose,vlog=vlog" InsertArgumentsTest

Here's the end of the jitdump:

------------------------------
 n347n    (  0)  checkcast [#86]                                                                      [     0x3feff075c30] bci=[-1,155,3166] rc=0 vc=891 vn=- li=19 udi=- nc=2
 n632n    (  1)    ==>aRegLoad (in &GPR_1187) (SeenRealReference sharedMemory )
 n346n    (  1)    aloadi  <classFromJavaLangClass>[#301  Shadow +8] [flags 0x10607 0x0 ] (X!=0 sharedMemory )  [     0x3feff075be0] bci=[-1,151,3166] rc=1 vc=891 vn=- li=19 udi=- nc=1 flg=0x4
 n631n    (  1)      ==>aRegLoad (in &GPR_1186) (X!=0 X>=0 SeenRealReference sharedMemory )
------------------------------
checkcast:Maximum Profiled Classes = 3
Cast Class runtimeVariable
Assertion failed at /jit/team/spencer/11/reference/openj9/runtime/compiler/codegen/J9TreeEvaluator.cpp:1343:isInstanceOf:
Expecting instanceof when cast class is a runtime variable

Full log and dump files: vlog.txt reference.log.txt javacore.20220705.085412.38779.0002.txt jitdump.20220705.085412.38779.0004.dmp.txt

r30shah commented 2 years ago

@Spencer-Comin Thanks a lot for the unit test, I believe the change that lowers the Class.cast calls to checkCast (https://github.com/eclipse-openj9/openj9/commit/f68fcd5d63840563c7f5a93607049308078f391e) introduced a checkCast node where the Cast Class is runtime variable. Looking at the code that contains the ASSERT [1], I think it should be OK to remove that soft ASSERT. Only thing that requires some investigations is the need to generate SuperClassTest [2] which on Z we generate even for Dynamic Cast Class and the test at runtime checks if it is normal class or array class before checking out the super class array. Also currently checkCast evaluator on Z do not generate instructions for DynamicCache for Dynamic Cast class for CheckCast, which would be in the list of suggested tests to be generated [3], so we probably should check if we can extend use of dynamic cache to checkCast and there is a benefit from doing so.

@Spencer-Comin as you have unit test handy, can I request you to checkout what kind of sequence we generate when Cast.class is reduced to checkCast and verify functionality on Z?

[1]. https://github.com/eclipse-openj9/openj9/blob/a9bdd6d1aee01a07acc975d410ce57a85bbde571/runtime/compiler/codegen/J9TreeEvaluator.cpp#L1343 [2]. https://github.com/eclipse-openj9/openj9/blob/a9bdd6d1aee01a07acc975d410ce57a85bbde571/runtime/compiler/codegen/J9TreeEvaluator.cpp#L1349-L1352 [3]. https://github.com/eclipse-openj9/openj9/blob/a9bdd6d1aee01a07acc975d410ce57a85bbde571/runtime/compiler/codegen/J9TreeEvaluator.cpp#L1353-L1354

Spencer-Comin commented 2 years ago

Here's the instruction generation with the assert removed:

------------------------------
 n369n    (  0)  checkcast [#86]                                                                      [     0x3ff5e175310] bci=[-1,155,3166] rc=0 vc=856 vn=- li=19 udi=- nc=2
 n539n    (  1)    ==>aRegLoad (in &GPR_0371) (SeenRealReference sharedMemory )
 n192n    (  1)    ==>aloadi (in GPR_0375) (X!=0 X>=0 sharedMemory )
------------------------------
checkcast:Maximum Profiled Classes = 3
Cast Class runtimeVariable
Outline Super Class Test: 0
checkcast: Class Not Evaluated. Evaluating it
checkcast: Emitting NullTest
checkcast: Loading Object Class 
checkcast: Emitting Class Equality Test
checkcast: Emitting CastClassCacheTest
checkcast: Emitting helper call
checkcast: Internal Control Flow in OOL : false 
ReturnType = Address
------------------------------
 n369n    (  0)  checkcast [#86]                                                                      [     0x3ff5e175310] bci=[-1,155,3166] rc=0 vc=856 vn=- li=19 udi=- nc=2
 n539n    (  0)    ==>aRegLoad (in &GPR_0371) (SeenRealReference sharedMemory )
 n192n    (  0)    ==>aloadi (in GPR_0375) (X!=0 X>=0 sharedMemory )
------------------------------

 [     0x3ff5e4665d0]                          LTGR    &GPR_0371,&GPR_0371      
 [     0x3ff5e4666b0]                          BRC     BH(0x8), Label L0080     
 [     0x3ff5e4668c0]                          LLZRGF  GPR_0384,#471 0(&GPR_0371)
 [     0x3ff5e466990]                          CGRJ    GPR_0375,GPR_0384,Label L0080,BH(mask=0x8),      
 [     0x3ff5e466bd0]                          LG      GPR_0385,#472 200(GPR_0384)
 [     0x3ff5e466ca0]                          CGRJ    GPR_0385,GPR_0375,Label L0080,BH(mask=0x8),      
 [     0x3ff5e466f70]                          BRC     NOP(0xf), Outlined Label L0081   
 [     0x3ff5e46a880]                          assocreg
 [     0x3ff5e46a2c0]                          Label L0080:     
 POST: 
 {AssignAny:&GPR_0371:R} {AssignAny:GPR_0384:R} {AssignAny:GPR_0385:R} {AssignAny:GPR_0375:R}

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

The unit test runs as expected without failures

Full logs: reference.log.txt vlog.txt

r30shah commented 2 years ago

@Spencer-Comin Thanks a lot for trying this out quickly. I suggest you can remove the ASSERT from that code and create a PR referencing https://github.com/eclipse-openj9/openj9/commit/f68fcd5d63840563c7f5a93607049308078f391e.

Even though the transformation is better than call to Class.cast, we should be able to improve the performance of such checkcast node further (Some of the easy ones are noted in https://github.com/eclipse-openj9/openj9/issues/15449#issuecomment-1175354884). Can you open up an issue for that?