Skip to content

[RyuJIT] Always insert r2r indirection cell at the end of the args list#125670

Open
kg wants to merge 1 commit intodotnet:mainfrom
kg:wasm-callsigs-3-alternate
Open

[RyuJIT] Always insert r2r indirection cell at the end of the args list#125670
kg wants to merge 1 commit intodotnet:mainfrom
kg:wasm-callsigs-3-alternate

Conversation

@kg
Copy link
Member

@kg kg commented Mar 17, 2026

#125669 but universal. Wasm needs the indirection cell at the end of the arguments list, and on other arches it shouldn't matter where we put it. Opening draft PR to generate diffs on CI.

@kg kg added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 17, 2026
Copilot AI review requested due to automatic review settings March 17, 2026 19:25
@dotnet-policy-service
Copy link
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates CoreCLR JIT call argument construction so the ReadyToRun (R2R) indirection cell argument is always appended at the end of the call argument list. This ensures correct argument ordering for Wasm’s managed calling convention (portable entry point as the last argument) while remaining behavior-neutral on other targets where the indirection cell is passed via a dedicated register.

Changes:

  • Change R2R indirection cell insertion from InsertAfterThisOrFirst to PushBack so it becomes the last argument.
  • Clarify the FEATURE_READYTORUN preprocessor block end comment.

You can also share your feedback on Copilot code review. Take the survey.

@jakobbotsch
Copy link
Member

Diffs look good (positive even). But it seems LA64 and RISCV64 have some problem with this change. cc @dotnet/samsung @shushanhf, any idea why this would matter for RISCV64/LA64?

@shushanhf
Copy link
Contributor

Diffs look good (positive even). But it seems LA64 and RISCV64 have some problem with this change. cc @dotnet/samsung @shushanhf, any idea why this would matter for RISCV64/LA64?

OK, we will test it on LA64. Thanks!

@kg kg force-pushed the wasm-callsigs-3-alternate branch from e433f74 to 7c695e7 Compare March 19, 2026 02:50
@kg kg marked this pull request as ready for review March 19, 2026 02:50
Copilot AI review requested due to automatic review settings March 19, 2026 02:50
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates CoreCLR JIT call-arg construction so the ReadyToRun indirection cell argument is consistently appended to the end of the argument list, aligning with Wasm’s requirement that the portable entry point (PEP) be in the final argument slot while remaining behaviorally neutral on fixed-register-set targets.

Changes:

  • Always append the R2R indirection cell argument using PushBack (instead of inserting after this/first) in CallArgs::AddFinalArgsAndDetermineABIInfo.
  • Expand the comment to document the Wasm motivation and why it’s expected to be ordering-insensitive on other targets.

You can also share your feedback on Copilot code review. Take the survey.

@@ -1780,12 +1780,10 @@ void CallArgs::AddFinalArgsAndDetermineABIInfo(Compiler* comp, GenTreeCall* call
// Push the stub address onto the list of arguments.
@LuckyXu-HF
Copy link
Contributor

LuckyXu-HF commented Mar 19, 2026

Diffs look good (positive even). But it seems LA64 and RISCV64 have some problem with this change. cc @dotnet/samsung @shushanhf, any idea why this would matter for RISCV64/LA64?

OK, we will test it on LA64. Thanks!

For LA64 we currently get the clues with ./build.sh -ci -arch loongarch64 -os linux -s clr+libs+host+packs+tools.cdac -c Debug -rc Checked :

For the host pack step crossgen2 hit an assertion failed with op1->gtType = TYP_LONG , op1->gtType = TYP_INT :

/data/xuliangyu/runtime/src/coreclr/jit/morph.cpp:9152
Assertion failed 'genActualType(op1) == genActualType(op2)' in 
'System.ComponentModel.DataAnnotations.CustomValidationAttribute:IsValid(System.Object,System.ComponentModel.DataAnnotations.ValidationContext):System.ComponentModel.DataAnnotations.ValidationResult:this' during 'Clone blocks with range checks' (IL size 212; hash 0xb16e339b; FullOpts)
backtrace
(gdb) x/10i $pc-20
   0x7fbf2d712f9c <CONTEXT_CaptureContext+660>:    st.b            $t0, $a0, 1303
   0x7fbf2d712fa0 <CONTEXT_CaptureContext+664>:    movfcsr2gr      $t0, $fcsr0
   0x7fbf2d712fa4 <CONTEXT_CaptureContext+668>:    st.w            $t0, $a0, 1304
   0x7fbf2d712fa8 <CONTEXT_CaptureContext+672>:    addi.d          $sp, $sp, 32
   0x7fbf2d712fac <CONTEXT_CaptureContext+676>:    ret
=> 0x7fbf2d712fb0 <DBG_DebugBreak>:    break           0x0
   0x7fbf2d712fb4 <DBG_DebugBreak+4>:    ret
   0x7fbf2d712fb8 <DBG_DebugBreak_End>:    nop
   0x7fbf2d712fbc <ThrowExceptionFromContextInternal>:    addi.d          $sp, $sp, -16
   0x7fbf2d712fc0 <ThrowExceptionFromContextInternal+4>:    st.d            $fp, $sp, 0
(gdb) bt
#0  DBG_DebugBreak () at /data/xuliangyu/runtime/src/coreclr/pal/src/arch/loongarch64/debugbreak.S:6
#1  0x00007fbf2d6cba94 in DebugBreak () at /data/xuliangyu/runtime/src/coreclr/pal/src/debug/debug.cpp:415
#2  0x00007fbf2d3ffcc4 in assertAbort (why=0x7fbf2d2d20fa "genActualType(op1) == genActualType(op2)", file=0x7fbf2d2c4bbc "/data/xuliangyu/runtime/src/coreclr/jit/morph.cpp", line=9152)
    at /data/xuliangyu/runtime/src/coreclr/jit/error.cpp:295
#3  0x00007fbf2d59f9c4 in Compiler::fgOptimizeRelationalComparisonWithConst (this=0x7fbefc006208, cmp=0x7fbefc039a00) at /data/xuliangyu/runtime/src/coreclr/jit/morph.cpp:9152
#4  0x00007fbf2d59365c in Compiler::fgMorphSmpOp (this=<optimized out>, tree=0x7fbefc039a00, mac=<optimized out>, optAssertionPropDone=0x7fbf0f7f85bf) at /data/xuliangyu/runtime/src/coreclr/jit/morph.cpp:7823
#5  0x00007fbf2d5883ac in Compiler::fgMorphTree (this=0x7fbefc006208, tree=0x7fbefc039a00, mac=0x0) at /data/xuliangyu/runtime/src/coreclr/jit/morph.cpp:12487
#6  0x00007fbf2d59257c in Compiler::fgMorphSmpOp (this=<optimized out>, tree=<optimized out>, mac=0x3d, optAssertionPropDone=0x7fbf0f7f873f) at /data/xuliangyu/runtime/src/coreclr/jit/morph.cpp:7579
#7  0x00007fbf2d5883ac in Compiler::fgMorphTree (this=0x7fbefc006208, tree=0x7fbefc039a70, mac=0x0) at /data/xuliangyu/runtime/src/coreclr/jit/morph.cpp:12487
#8  0x00007fbf2d5a5bf4 in Compiler::fgMorphBlockStmt (this=0x7fbefc006208, block=0x7fbefc039ae0, stmt=0x7fbefc039bf8, msg=0x7fbf2d2fe896 "Morph upperBnd", allowFGChange=true, invalidateDFSTreeOnFGChange=true)
    at /data/xuliangyu/runtime/src/coreclr/jit/morph.cpp:13145
#9  0x00007fbf2d60b664 in optRangeCheckCloning_DoClone (comp=0x7fbefc006208, block=0x7fbefc0088d8, bndChkStack=0x7fbefc038fd8, lastStmt=<optimized out>)
    at /data/xuliangyu/runtime/src/coreclr/jit/rangecheckcloning.cpp:357
#10 Compiler::optRangeCheckCloning (this=0x7fbefc006208) at /data/xuliangyu/runtime/src/coreclr/jit/rangecheckcloning.cpp:664
#11 0x00007fbf2d5ebd04 in Phase::Run (this=0x7fbf0f7f8da0) at /data/xuliangyu/runtime/src/coreclr/jit/phase.cpp:61
#12 0x00007fbf2d3d7cb0 in DoPhase (_compiler=0x7fbefc006208, _phase=PHASE_RANGE_CHECK_CLONING, _action=<optimized out>) at /data/xuliangyu/runtime/src/coreclr/jit/phase.h:143
#13 Compiler::compCompile (this=0x7fbefc006208, methodCodePtr=0x7fbf0f7f9b98, methodCodeSize=0x7fbf0f7f9de8, compileFlags=<optimized out>) at /data/xuliangyu/runtime/src/coreclr/jit/compiler.cpp:4842
#14 0x00007fbf2d3dc820 in Compiler::compCompileHelper (this=0x7fbefc006208, classPtr=<optimized out>, compHnd=<optimized out>, methodInfo=<optimized out>, methodCodePtr=0x7fbf0f7f9b98, 
    methodCodeSize=0x7fbf0f7f9de8, compileFlags=0x7fbf0f7f9bc0) at /data/xuliangyu/runtime/src/coreclr/jit/compiler.cpp:7076
#15 0x00007fbf2d3da718 in Compiler::compCompileAfterInit(CORINFO_MODULE_STRUCT_*, void**, unsigned int*, JitFlags*)::$_0::operator()(Compiler::compCompileAfterInit(CORINFO_MODULE_STRUCT_*, void**, unsigned int*, JitFlags*)::__JITParam*) const (this=<optimized out>, __JITpParam=<optimized out>) at /data/xuliangyu/runtime/src/coreclr/jit/compiler.cpp:6237
#16 Compiler::compCompileAfterInit (this=0x7fbefc006208, classPtr=0x4000000000420310, methodCodePtr=0x7fbf0f7f9b98, methodCodeSize=0x7fbf0f7f9de8, compileFlags=0x7fbf0f7f9bc0)
    at /data/xuliangyu/runtime/src/coreclr/jit/compiler.cpp:6256
#17 0x00007fbf2d3ddc58 in jitNativeCode(CORINFO_METHOD_STRUCT_*, CORINFO_MODULE_STRUCT_*, ICorJitInfo*, CORINFO_METHOD_INFO*, void**, unsigned int*, JitFlags*, void*)::$_0::operator()(jitNativeCode(CORINFO_METHOD_STRUCT_*, CORINFO_MODULE_STRUCT_*, ICorJitInfo*, CORINFO_METHOD_INFO*, void**, unsigned int*, JitFlags*, void*)::__JITParam*) const::{lambda(jitNativeCode(CORINFO_METHOD_STRUCT_*, CORINFO_MODULE_STRUCT_*, ICorJitInfo*, CORINFO_METHOD_INFO*, void**, unsigned int*, JitFlags*, void*)::$_0::operator()(jitNativeCode(CORINFO_METHOD_STRUCT_*, CORINFO_MODULE_STRUCT_*, ICorJitInfo*, CORINFO_METHOD_INFO*, void**, unsigned int*, JitFlags*, void*)::__JITParam*) const::__JITParam*)#1}::operator()(jitNativeCode(CORINFO_METHOD_STRUCT_*, CORINFO_MODULE_STRUCT_*, ICorJitInfo*, CORINFO_METHOD_INFO*, void**, unsigned int*, JitFlags*, void*)::$_0::operator()(jitNativeCode(CORINFO_METHOD_STRUCT_*, CORINFO_MODULE_STRUCT_*, ICorJitInfo*, CORINFO_METHOD_INFO*, void**, unsigned int*, JitFlags*, void*)::__JITParam*) const::__JITParam*) const (
    this=<optimized out>, __JITpParam=<optimized out>) at /data/xuliangyu/runtime/src/coreclr/jit/compiler.cpp:7722
#18 jitNativeCode(CORINFO_METHOD_STRUCT_*, CORINFO_MODULE_STRUCT_*, ICorJitInfo*, CORINFO_METHOD_INFO*, void**, unsigned int*, JitFlags*, void*)::$_0::operator()(jitNativeCode(CORINFO_METHOD_STRUCT_*, CORINFO_MODULE_STRUCT_*, ICorJitInfo*, CORINFO_METHOD_INFO*, void**, unsigned int*, JitFlags*, void*)::__JITParam*) const (__JITpParam=0x7fbf0f7f9458, this=<optimized out>)
    at /data/xuliangyu/runtime/src/coreclr/jit/compiler.cpp:7746
#19 jitNativeCode (methodHnd=0x4000000000420308, classPtr=0x4000000000420310, compHnd=0x7fbf0f7f9c38, methodInfo=0x7fbf0f7f9e08, methodCodePtr=0x7fbf0f7f9b98, methodCodeSize=0x7fbf0f7f9de8, 
    compileFlags=0x7fbf0f7f9bc0, inlineInfoPtr=0x0) at /data/xuliangyu/runtime/src/coreclr/jit/compiler.cpp:7748
#20 0x00007fbf2d3ea29c in CILJit::compileMethod (this=<optimized out>, compHnd=0x7fbf0f7f9c38, methodInfo=0x7fbf0f7f9e08, flags=<optimized out>, entryAddress=0x7fbf0f7f9df0, nativeSizeOfCode=0x7fbf0f7f9de8)
--Type <RET> for more, q to quit, c to continue without paging--
    at /data/xuliangyu/runtime/src/coreclr/jit/ee_il_dll.cpp:302
#21 0x00007fbf2d7bb418 in JitCompileMethod (ppException=0x7fbf0f7f9df8, pJit=0x7fbf2d756d78 <g_CILJit>, thisHandle=0x7fbf0f7f9e00, callbacks=0x7fffe67a1050, methodInfo=0x7fbf0f7f9e08, flags=4294967295, 
    entryAddress=0x7fbf0f7f9df0, nativeSizeOfCode=0x7fbf0f7f9de8) at /data/xuliangyu/runtime/src/coreclr/tools/aot/jitinterface/jitwrapper.cpp:37
#22 0x00005554d9e70134 in ?? ()
Backtrace stopped: frame did not save the PC
(gdb) x/10i 0x00005554d9e70134 - 20
   0x5554d9e70120:    ori             $t1, $r21, 0x134
   0x5554d9e70124:    lu32i.d         $t1, 21844
   0x5554d9e70128:    st.d            $t1, $fp, -56
   0x5554d9e7012c:    st.b            $zero, $s8, 4
   0x5554d9e70130:    jirl            $ra, $t0, 0
   0x5554d9e70134:    slli.w          $s0, $a0, 0x0
   0x5554d9e70138:    li.w            $a0, 1
   0x5554d9e7013c:    st.b            $a0, $s8, 4
   0x5554d9e70140:    lu12i.w         $a0, 359489
   0x5554d9e70144:    ori             $a0, $a0, 0x6ec
op1、op2、cmp at morph.cpp:9152
Thread 1 "crossgen2" hit Breakpoint 1, Compiler::fgOptimizeRelationalComparisonWithConst (this=0x555556323508, cmp=0x555556356d00) at /data/xuliangyu/runtime/src/coreclr/jit/morph.cpp:9152
9152        assert(genActualType(op1) == genActualType(op2));
(gdb) p *op1
$1 = {
  _vptr$GenTree = 0x7fbf2df91638 <vtable for GenTreeLclVar+16>,
  static gtOperKindTable = "\000\000\001\001\001rr\001\001\001\001!\001\001!\001\001\001\001\001\002\001\002\024\"\022\002\002\0024!$\004\004\004\004\000\002t\022t\"\022\022\022\022\022\002\022\022\022\002\002\002\f\004\f\004\004\004\004\f\f\f", '\004' <repeats 13 times>, "\000\004\024\004\024\024\002\f\004\004\004$$$$!\001\004\"\000\000\000\"\"!\"!!!\"\001$\001$\001!!!\"\002\"$\002\002!!",
  static gtDebugOperKindTable = {0 <repeats 13 times>, DBK_NOTLIR, DBK_NOTLIR, 0, 0, 0, 0, 0, 0, DBK_NOCONTAIN, 0, 0, 0, 0, 0, DBK_NOCONTAIN, DBK_NOCONTAIN, 0, 0, DBK_FIRST_FLAG, 0 <repeats 13 times>, 
    DBK_NOTLIR, DBK_NOTLIR, 0, DBK_NOTLIR, DBK_NOTLIR, DBK_NOTLIR, 0 <repeats 24 times>, DBK_FIRST_FLAG, DBK_FIRST_FLAG, 0, DBK_NOTLIR, DBK_NOTLIR, DBK_NOTLIR, 0, DBK_FIRST_FLAG <repeats 13 times>, 0, 
    DBK_NOTLIR, DBK_NOCONTAIN, 0, 0, 0, 0, 0, DBK_FIRST_FLAG, DBK_FIRST_FLAG, DBK_FIRST_FLAG, 0, 0, 0, 1280, DBK_FIRST_FLAG <repeats 13 times>},
  static s_gtNodeSizes = 'p' <repeats 12 times>, "\360\360ppppppppp\360p\360pppppppppp\360pppppppp\360\360p\360", 'p' <repeats 30 times>, "\360p\360", 'p' <repeats 14 times>, "\360\360", 'p' <repeats 19 times>, "\360pppppp",
  static s_vtablesForOpers = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df91668 <vtable for GenTreeLclFld+16>, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df90300 <vtable for GenTreeIntCon+16>, 0x0, 0x0, 
    0x0, 0x0, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0 <repeats 15 times>, 0x7fbf2df90640 <vtable for GenTreeIndir+16>, 0x0 <repeats 16 times>, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0, 0x0, 
    0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 
    0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 
    0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df917d0 <vtable for GenTreeAddrMode+16>, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df918d8 <vtable for GenTreeOpCC+16>, 
    0x0, 0x0, 0x0, 0x0, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0, 0x7fbf2df916b0 <vtable for GenTreeCall+16>, 0x0, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0 <repeats 23 times>},
  static s_vtableForOp = 0x7fbf2df90318 <vtable for GenTreeOp+16>,
  gtOper = GT_LCL_VAR,
  gtType = TYP_LONG,
  gtOperSave = GT_NONE,
  gtCSEnum = 0 '\000',
  gtLIRFlags = 0 '\000',
  gtAssertionInfo = {
    m_assertionHoldsOnFalseEdge = 0,
    m_assertionIndex = 0
  },
  gtCostsInitialized = true,
  _gtCostEx = 3 '\003',
  _gtCostSz = 2 '\002',
  gtRegTag = GenTree::GT_REGTAG_NONE,
  _gtRegNum = 65 'A',
  m_operandCount = 221 '\335',
  gtFlags = GTF_REUSE_REG_VAL,
  gtDebugFlags = GTF_DEBUG_NODE_SMALL,
  gtMorphCount = 0,
  gtVNPair = {
--Type <RET> for more, q to quit, c to continue without paging--c
    m_conservative = 1344,
    m_liberal = 1344
  },
  gtNext = 0x555556356c90,
  gtPrev = 0x0,
  gtTreeID = 455,
  gtSeqNum = 1,
  gtUseNum = -1
}

(gdb) p *op2
$2 = {
  <GenTree> = {
    _vptr$GenTree = 0x7fbf2df90300 <vtable for GenTreeIntCon+16>,
    static gtOperKindTable = "\000\000\001\001\001rr\001\001\001\001!\001\001!\001\001\001\001\001\002\001\002\024\"\022\002\002\0024!$\004\004\004\004\000\002t\022t\"\022\022\022\022\022\002\022\022\022\002\002\002\f\004\f\004\004\004\004\f\f\f", '\004' <repeats 13 times>, "\000\004\024\004\024\024\002\f\004\004\004$$$$!\001\004\"\000\000\000\"\"!\"!!!\"\001$\001$\001!!!\"\002\"$\002\002!!",
    static gtDebugOperKindTable = {0 <repeats 13 times>, DBK_NOTLIR, DBK_NOTLIR, 0, 0, 0, 0, 0, 0, DBK_NOCONTAIN, 0, 0, 0, 0, 0, DBK_NOCONTAIN, DBK_NOCONTAIN, 0, 0, DBK_FIRST_FLAG, 0 <repeats 13 times>, 
      DBK_NOTLIR, DBK_NOTLIR, 0, DBK_NOTLIR, DBK_NOTLIR, DBK_NOTLIR, 0 <repeats 24 times>, DBK_FIRST_FLAG, DBK_FIRST_FLAG, 0, DBK_NOTLIR, DBK_NOTLIR, DBK_NOTLIR, 0, DBK_FIRST_FLAG <repeats 13 times>, 0, 
      DBK_NOTLIR, DBK_NOCONTAIN, 0, 0, 0, 0, 0, DBK_FIRST_FLAG, DBK_FIRST_FLAG, DBK_FIRST_FLAG, 0, 0, 0, 1280, DBK_FIRST_FLAG <repeats 13 times>},
    static s_gtNodeSizes = 'p' <repeats 12 times>, "\360\360ppppppppp\360p\360pppppppppp\360pppppppp\360\360p\360", 'p' <repeats 30 times>, "\360p\360", 'p' <repeats 14 times>, "\360\360", 'p' <repeats 19 times>, "\360pppppp",
    static s_vtablesForOpers = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df91668 <vtable for GenTreeLclFld+16>, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df90300 <vtable for GenTreeIntCon+16>, 0x0, 0x0, 
      0x0, 0x0, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0 <repeats 15 times>, 0x7fbf2df90640 <vtable for GenTreeIndir+16>, 0x0 <repeats 16 times>, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0, 0x0, 
      0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 
      0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 
      0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df917d0 <vtable for GenTreeAddrMode+16>, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df918d8 <vtable for GenTreeOpCC+16>, 
      0x0, 0x0, 0x0, 0x0, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0, 0x7fbf2df916b0 <vtable for GenTreeCall+16>, 0x0, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0 <repeats 23 times>},
    static s_vtableForOp = 0x7fbf2df90318 <vtable for GenTreeOp+16>,
    gtOper = GT_CNS_INT,
    gtType = TYP_INT,
    gtOperSave = GT_NONE,
    gtCSEnum = 0 '\000',
    gtLIRFlags = 0 '\000',
    gtAssertionInfo = {
      m_assertionHoldsOnFalseEdge = 0,
      m_assertionIndex = 0
    },
    gtCostsInitialized = true,
    _gtCostEx = 1 '\001',
    _gtCostSz = 4 '\004',
    gtRegTag = GenTree::GT_REGTAG_NONE,
    _gtRegNum = 65 'A',
    m_operandCount = 221 '\335',
    gtFlags = GTF_EMPTY,
    gtDebugFlags = GTF_DEBUG_NODE_SMALL,
    gtMorphCount = 0,
--Type <RET> for more, q to quit, c to continue without paging--
    gtVNPair = {
      m_conservative = 4294967295,
      m_liberal = 4294967295
    },
    gtNext = 0x555556356d00,
    gtPrev = 0x555556356898,
    gtTreeID = 461,
    gtSeqNum = 2,
    gtUseNum = -1
  }, <No data fields>}

(gdb) p *cmp
$3 = {
  <GenTreeUnOp> = {
    <GenTree> = {
      _vptr$GenTree = 0x7fbf2df90318 <vtable for GenTreeOp+16>,
      static gtOperKindTable = "\000\000\001\001\001rr\001\001\001\001!\001\001!\001\001\001\001\001\002\001\002\024\"\022\002\002\0024!$\004\004\004\004\000\002t\022t\"\022\022\022\022\022\002\022\022\022\002\002\002\f\004\f\004\004\004\004\f\f\f", '\004' <repeats 13 times>, "\000\004\024\004\024\024\002\f\004\004\004$$$$!\001\004\"\000\000\000\"\"!\"!!!\"\001$\001$\001!!!\"\002\"$\002\002!!",
      static gtDebugOperKindTable = {0 <repeats 13 times>, DBK_NOTLIR, DBK_NOTLIR, 0, 0, 0, 0, 0, 0, DBK_NOCONTAIN, 0, 0, 0, 0, 0, DBK_NOCONTAIN, DBK_NOCONTAIN, 0, 0, DBK_FIRST_FLAG, 0 <repeats 13 times>, 
        DBK_NOTLIR, DBK_NOTLIR, 0, DBK_NOTLIR, DBK_NOTLIR, DBK_NOTLIR, 0 <repeats 24 times>, DBK_FIRST_FLAG, DBK_FIRST_FLAG, 0, DBK_NOTLIR, DBK_NOTLIR, DBK_NOTLIR, 0, DBK_FIRST_FLAG <repeats 13 times>, 0, 
        DBK_NOTLIR, DBK_NOCONTAIN, 0, 0, 0, 0, 0, DBK_FIRST_FLAG, DBK_FIRST_FLAG, DBK_FIRST_FLAG, 0, 0, 0, 1280, DBK_FIRST_FLAG <repeats 13 times>},
      static s_gtNodeSizes = 'p' <repeats 12 times>, "\360\360ppppppppp\360p\360pppppppppp\360pppppppp\360\360p\360", 'p' <repeats 30 times>, "\360p\360", 'p' <repeats 14 times>, "\360\360", 'p' <repeats 19 times>, "\360pppppp",
      static s_vtablesForOpers = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df91668 <vtable for GenTreeLclFld+16>, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df90300 <vtable for GenTreeIntCon+16>, 0x0, 
        0x0, 0x0, 0x0, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0 <repeats 15 times>, 0x7fbf2df90640 <vtable for GenTreeIndir+16>, 0x0 <repeats 16 times>, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0, 0x0, 
        0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 
        0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 
        0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df917d0 <vtable for GenTreeAddrMode+16>, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
        0x7fbf2df918d8 <vtable for GenTreeOpCC+16>, 0x0, 0x0, 0x0, 0x0, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 0x0, 0x7fbf2df916b0 <vtable for GenTreeCall+16>, 0x0, 0x7fbf2df90318 <vtable for GenTreeOp+16>, 
        0x0 <repeats 23 times>},
      static s_vtableForOp = 0x7fbf2df90318 <vtable for GenTreeOp+16>,
      gtOper = GT_GT,
      gtType = TYP_INT,
      gtOperSave = GT_NONE,
      gtCSEnum = 0 '\000',
      gtLIRFlags = 0 '\000',
      gtAssertionInfo = {
        m_assertionHoldsOnFalseEdge = 0,
        m_assertionIndex = 0
      },
      gtCostsInitialized = true,
      _gtCostEx = 5 '\005',
      _gtCostSz = 7 '\a',
      gtRegTag = GenTree::GT_REGTAG_NONE,
      _gtRegNum = 65 'A',
      m_operandCount = 221 '\335',
      gtFlags = 1073745920,
--Type <RET> for more, q to quit, c to continue without paging--c
      gtDebugFlags = GTF_DEBUG_NODE_SMALL,
      gtMorphCount = 0,
      gtVNPair = {
        m_conservative = 4294967295,
        m_liberal = 4294967295
      },
      gtNext = 0x555556356d70,
      gtPrev = 0x555556356c90,
      gtTreeID = 462,
      gtSeqNum = 3,
      gtUseNum = -1
    }, 
    members of GenTreeUnOp:
    gtOp1 = 0x555556356898
  }, 
  members of GenTreeOp:
  gtOp2 = 0x555556356c90
}

More dump log difference between PR#125670 and PR#125669 of this methodhash(0xb16e339b):
PR125670-JitHashDump-b16e339b-dump.log
PR125669-JitHashDump-b16e339b-dump.log


cc @jakobbotsch @kg I think we can hit a same failed on linux-arm64 with: ./build.sh -ci -arch arm64 -os linux -s clr+libs+host+packs+tools.cdac -c Debug -rc Checked , the CI doesn't report this for linux-arm64 because the build CLI does not include host+packs+tools.cdac under debug mode.

same error on linux-arm64
...
...
  -- Up-to-date: /data/xly/PR125670/runtime/artifacts/bin/linux-arm64.Debug/corehost_test/libmockhostpolicy.so
  -- Up-to-date: /data/xly/PR125670/runtime/artifacts/bin/linux-arm64.Debug/corehost_test/nativehost.dbg
  -- Up-to-date: /data/xly/PR125670/runtime/artifacts/bin/linux-arm64.Debug/corehost_test/nativehost
  /data/xly/PR125670/runtime/src/native/corehost
  Microsoft.NETCore.DotNetAppHost -> /data/xly/PR125670/runtime/artifacts/packages/Debug/Shipping/runtime.linux-arm64.Microsoft.NETCore.DotNetAppHost.11.0.0-ci.nupkg
  Microsoft.NETCore.DotNetAppHost -> /data/xly/PR125670/runtime/artifacts/packages/Debug/Shipping/Microsoft.NETCore.DotNetAppHost.11.0.0-ci.nupkg
  Determining projects to restore...
  All projects are up-to-date for restore.
##vso[task.logissue type=error;sourcepath=/data/xly/PR125670/runtime/artifacts/bin/Crossgen2Tasks/Debug/Microsoft.NET.CrossGen.targets;linenumber=495;columnnumber=5;code=MSB6006;](NETCORE_ENGINEERING_TELEMETRY=Build) "/data/xly/PR125670/runtime/artifacts/bin/coreclr/linux.arm64.Checked/arm64/crossgen2/crossgen2" exited with code 134.
/data/xly/PR125670/runtime/artifacts/bin/Crossgen2Tasks/Debug/Microsoft.NET.CrossGen.targets(495,5): error MSB6006: "/data/xly/PR125670/runtime/artifacts/bin/coreclr/linux.arm64.Checked/arm64/crossgen2/crossgen2" exited with code 134. [/data/xly/PR125670/runtime/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Runtime.CoreCLR.sfxproj]
##vso[task.logissue type=error;sourcepath=/data/xly/PR125670/runtime/artifacts/bin/Crossgen2Tasks/Debug/Microsoft.NET.CrossGen.targets;linenumber=375;columnnumber=5;code=NETSDK1096;](NETCORE_ENGINEERING_TELEMETRY=Build) Optimizing assemblies for performance failed. You can either exclude the failing assemblies from being optimized, or set the PublishReadyToRun property to false.
/data/xly/PR125670/runtime/artifacts/bin/Crossgen2Tasks/Debug/Microsoft.NET.CrossGen.targets(375,5): error NETSDK1096: Optimizing assemblies for performance failed. You can either exclude the failing assemblies from being optimized, or set the PublishReadyToRun property to false. [/data/xly/PR125670/runtime/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Runtime.CoreCLR.sfxproj]
##vso[task.logissue type=error;sourcepath=/data/xly/PR125670/runtime/src/installer/pkg/sfx/bundle/Microsoft.NETCore.App.Bundle.bundleproj;linenumber=44;columnnumber=5;code=MSB4181;](NETCORE_ENGINEERING_TELEMETRY=Build) The "MSBuild" task returned false but did not log an error.
/data/xly/PR125670/runtime/src/installer/pkg/sfx/bundle/Microsoft.NETCore.App.Bundle.bundleproj(44,5): error MSB4181: The "MSBuild" task returned false but did not log an error.

Build FAILED.

/data/xly/PR125670/runtime/artifacts/bin/Crossgen2Tasks/Debug/Microsoft.NET.CrossGen.targets(495,5): error MSB6006: "/data/xly/PR125670/runtime/artifacts/bin/coreclr/linux.arm64.Checked/arm64/crossgen2/crossgen2" exited with code 134. [/data/xly/PR125670/runtime/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Runtime.CoreCLR.sfxproj]
/data/xly/PR125670/runtime/artifacts/bin/Crossgen2Tasks/Debug/Microsoft.NET.CrossGen.targets(375,5): error NETSDK1096: Optimizing assemblies for performance failed. You can either exclude the failing assemblies from being optimized, or set the PublishReadyToRun property to false. [/data/xly/PR125670/runtime/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Runtime.CoreCLR.sfxproj]
/data/xly/PR125670/runtime/src/installer/pkg/sfx/bundle/Microsoft.NETCore.App.Bundle.bundleproj(44,5): error MSB4181: The "MSBuild" task returned false but did not log an error.
    0 Warning(s)
    3 Error(s)

Time Elapsed 00:00:13.95
Build failed with exit code 1. Check errors above.

==================================================================================

### the crossgen2 for method hash 0xb16e339b on linux-arm64:

Single method repro args:--singlemethodtypename "System.ComponentModel.DataAnnotations.CustomValidationAttribute,System.ComponentModel.Annotations" --singlemethodname "IsValid" --singlemethodindex 1
/data/xly/PR125670/runtime/src/coreclr/jit/morph.cpp:9148
Assertion failed 'genActualType(op1) == genActualType(op2)' in 'System.ComponentModel.DataAnnotations.CustomValidationAttribute:IsValid(System.Object,System.ComponentModel.DataAnnotations.ValidationContext):System.ComponentModel.DataAnnotations.ValidationResult:this' during 'Clone blocks with range checks' (IL size 212; hash 0xb16e339b; FullOpts)

linux-x64 also build failed at the same step with: ./build.sh -ci -arch x64 -os linux -s clr+libs+host+packs+tools.cdac -c Debug -rc Checked

same build error on linux-x64
...
...
...
  -- Installing: /data/xuliangyu/runtime/artifacts/bin/linux-x64.Debug/corehost_test/nativehost
  /data/xuliangyu/runtime/src/native/corehost
  Microsoft.NETCore.DotNetAppHost -> /data/xuliangyu/runtime/artifacts/packages/Debug/Shipping/Microsoft.NETCore.DotNetAppHost.11.0.0-ci.nupkg
  Microsoft.NETCore.DotNetAppHost -> /data/xuliangyu/runtime/artifacts/packages/Debug/Shipping/runtime.linux-x64.Microsoft.NETCore.DotNetAppHost.11.0.0-ci.nupkg
  installer.tasks -> /data/xuliangyu/runtime/artifacts/bin/installer.tasks/Debug/installer.tasks.dll
  Determining projects to restore...
  All projects are up-to-date for restore.
##vso[task.logissue type=error;sourcepath=/data/xuliangyu/runtime/.packages/microsoft.dotnet.sharedframework.sdk/11.0.0-beta.26166.111/targets/sharedfx.targets;linenumber=303;columnnumber=5;code=;](NETCORE_ENGINEERING_TELEMETRY=Build) The following files are missing entries in the templated manifest:%0ASystem.IO.Compression.Zstandard.dll. Add these file names with extensions to the 'PlatformManifestFileEntry' item group for the runtime pack and corresponding ref pack to include them in the platform manifest.
/data/xuliangyu/runtime/.packages/microsoft.dotnet.sharedframework.sdk/11.0.0-beta.26166.111/targets/sharedfx.targets(303,5): error : The following files are missing entries in the templated manifest: [/data/xuliangyu/runtime/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Runtime.CoreCLR.sfxproj]
/data/xuliangyu/runtime/.packages/microsoft.dotnet.sharedframework.sdk/11.0.0-beta.26166.111/targets/sharedfx.targets(303,5): error : System.IO.Compression.Zstandard.dll. Add these file names with extensions to the 'PlatformManifestFileEntry' item group for the runtime pack and corresponding ref pack to include them in the platform manifest. [/data/xuliangyu/runtime/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Runtime.CoreCLR.sfxproj]
##vso[task.logissue type=error;sourcepath=/data/xuliangyu/runtime/src/installer/pkg/sfx/bundle/Microsoft.NETCore.App.Bundle.bundleproj;linenumber=44;columnnumber=5;code=MSB4181;](NETCORE_ENGINEERING_TELEMETRY=Build) The "MSBuild" task returned false but did not log an error.
/data/xuliangyu/runtime/src/installer/pkg/sfx/bundle/Microsoft.NETCore.App.Bundle.bundleproj(44,5): error MSB4181: The "MSBuild" task returned false but did not log an error.

Build FAILED.

/data/xuliangyu/runtime/.packages/microsoft.dotnet.sharedframework.sdk/11.0.0-beta.26166.111/targets/sharedfx.targets(303,5): error : The following files are missing entries in the templated manifest: [/data/xuliangyu/runtime/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Runtime.CoreCLR.sfxproj]
/data/xuliangyu/runtime/.packages/microsoft.dotnet.sharedframework.sdk/11.0.0-beta.26166.111/targets/sharedfx.targets(303,5): error : System.IO.Compression.Zstandard.dll. Add these file names with extensions to the 'PlatformManifestFileEntry' item group for the runtime pack and corresponding ref pack to include them in the platform manifest. [/data/xuliangyu/runtime/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Runtime.CoreCLR.sfxproj]
/data/xuliangyu/runtime/src/installer/pkg/sfx/bundle/Microsoft.NETCore.App.Bundle.bundleproj(44,5): error MSB4181: The "MSBuild" task returned false but did not log an error.
    0 Warning(s)
    2 Error(s)

Time Elapsed 00:21:56.31
Build failed with exit code 1. Check errors above.

All of these can build success based on PR#125669.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants