Description
I see several of these in the SPMI replay job (https://dev.azure.com/dnceng/public/_build?definitionId=1055&_a=summary):
ISSUE: <ASSERT> #48953 C:\gh\runtime6\src\coreclr\jit\lclvars.cpp (5360) - Assertion failed 'codeGen->isFramePointerUsed() || varDsc->GetStackOffset() >= 0' in '<>c:<EmitMatchCharacterClass>b__130_1(Span
1,ValueTuple2):this' during 'Generate code' (IL size 88; hash 0x34b0649e; Tier1-OSR)
Specifically, for JitStressRegs=1/2/3/8, in the aspnet collection.
Note that this is a Tier1-OSR
compilation.
If I attempt to repro just the one compilation:
C:\gh\runtime6\artifacts\tests\coreclr\windows.x64.Checked\Tests\Core_Root\superpmi.exe -c 48953 -jitoption JitStressRegs=1 -jitoption TieredCompilation=0 C:\gh\runtime6\artifacts\tests\coreclr\windows.x64.Checked\Tests\Core_Root\clrjit.dll c:\spmi\mch\b2d3c86f-87fd-4724-9e5d-4c44905eba91.windows.x64\aspnet.run.windows.x64.checked.mch
The failure doesn't repro.
If I run a set of compilations, -c 48900-48953
, then it repros. That indicates that either SPMI replay or the JIT is storing data between SPMI replays, which is bad. Possibly environment settings or compilation flags?
One thing to note: superpmi_replay.py is forcing passing -jitoption TieredCompilation=0
. This doesn't make sense, as it's overriding the SPMI collection, which will affect OSR playback (and probably lead to "MISSING" data). We should remove this. It was probably done because the replay job mostly invokes JitStressRegs, which wouldn't do anything in MinOpts compilations. But it seems likely forcing TieredCompilation=0
won't work for replays anyway.
In fact, removing -jitoption TieredCompilation=0
, -c 48900-48953
succeeds. However, a full run still leads to this assert.
@AndyAyersMS
cc @dotnet/jit-contrib