[x86] stress failure in RayTracer.GetNaturalColor with DOTNET_JitStress=2 #102590
Description
Assert failure(PID 14856 [0x00003a08], Thread: 2656 [0x0a60]): !CREATE_CHECK_STRING(pMT && pMT->Validate())
CORECLR! Object::ValidateInner + 0x14B (0x7436d48b)
CORECLR! Object::Validate + 0x98 (0x7436d308)
CORECLR! WKS::GCHeap::Promote + 0x8F (0x746c0c1f)
CORECLR! GcEnumObject + 0x57 (0x744866c7)
CORECLR! EnumGcRefsX86 + 0xC70 (0x74298a50)
CORECLR! EECodeManager::EnumGcRefs + 0x114 (0x74297d94)
CORECLR! GcStackCrawlCallBack + 0x156 (0x74486936)
CORECLR! Thread::MakeStackwalkerCallback + 0x48 (0x743ad355)
CORECLR! Thread::StackWalkFramesEx + 0x16C (0x743ae72f)
CORECLR! Thread::StackWalkFrames + 0x15D (0x743ae53f)
File: E:\dotnet004\runtime\src\coreclr\vm\object.cpp:553
Image: E:\dotnet004\runtime\artifacts\tests\coreclr\windows.x86.Checked\Tests\Core_Root\corerun.exe
To repro run
runtime\artifacts\tests\coreclr\windows.x86.Checked\JIT\Performance\JIT.performance\JIT.performance.cmd
with
DOTNET_GCStress=0xC
DOTNET_JitStress=2
DOTNET_ReadyToRun=0
DOTNET_TieredCompilation=0
removing DOTNET_JitStress=2
changes the codegen considerably and makes the failure disappear, so it looks like it might be specific to JitStress.
It may be necessary to run the test a few times (3-5 times, maybe more) before seeing the failure. I'd run it in a loop.
Perhaps some uninitialized data is involved, thus nondeterminism.
The actual failing instruction is:
G_M31285_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
mov ebp, esp
push edi
push esi
push ebx
sub esp, 160
mov gword ptr [ebp-0x9C], ecx
; GC ptr vars +{V00}
mov bword ptr [ebp-0xA0], edx
; GC ptr vars +{V01}
mov eax, gword ptr [ebp+0x08]
; gcrRegs +[eax]
vmovups xmm0, xmmword ptr [ebp+0x24]
;; size=32 bbWeight=1 PerfScore 10.50
G_M31285_IG02: ; bbWeight=1, gcVars=0000000000000900 {V00 V01}, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, gcvars, byref
vxorps xmm3, xmm3, xmm3
;; size=4 bbWeight=1 PerfScore 0.33
G_M31285_IG03: ; bbWeight=1, extend
vmovups xmmword ptr [ebp-0x50], xmm3
;; size=5 bbWeight=1 PerfScore 1.00
G_M31285_IG04: ; bbWeight=1, extend
mov gword ptr [ebp+0x08], eax
;; size=3 bbWeight=1 PerfScore 1.00
G_M31285_IG05: ; bbWeight=1, extend
mov edx, gword ptr [eax+0x08]
; gcrRegs +[edx]
;; size=3 bbWeight=1 PerfScore 2.00
G_M31285_IG06: ; bbWeight=1, extend
mov gword ptr [ebp-0xA4], edx
; GC ptr vars +{V08}
;; size=6 bbWeight=1 PerfScore 1.00
G_M31285_IG07: ; bbWeight=1, extend
xor ecx, ecx
;; size=2 bbWeight=1 PerfScore 0.25
G_M31285_IG08: ; bbWeight=1, extend
cmp dword ptr [edx+0x04], 0
;; size=4 bbWeight=1 PerfScore 3.00
G_M31285_IG09: ; bbWeight=1, extend
jle G_M31285_IG175
;; size=6 bbWeight=1 PerfScore 1.00
G_M31285_IG10: ; bbWeight=4, gcVars=0000000000000940 {V00 V01 V08}, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax]
mov dword ptr [ebp-0x10], ecx
;; size=3 bbWeight=4 PerfScore 4.00
G_M31285_IG11: ; bbWeight=4, extend
mov ebx, gword ptr [edx+4*ecx+0x08]
; gcrRegs +[ebx]
;; size=4 bbWeight=4 PerfScore 8.00
G_M31285_IG12: ; bbWeight=4, extend
vmovsd xmm4, qword ptr [ebx+0x04]
;; size=5 bbWeight=4 PerfScore 16.00
G_M31285_IG13: ; bbWeight=4, extend
vinsertps xmm4, xmm4, dword ptr [ebx+0x0C], 40
;; size=7 bbWeight=4 PerfScore 12.00
G_M31285_IG14: ; bbWeight=4, extend
vsubps xmm4, xmm4, xmm0
;; size=4 bbWeight=4 PerfScore 12.00
G_M31285_IG15: ; bbWeight=4, extend
vdpps xmm5, xmm4, xmm4, 127
;; size=6 bbWeight=4 PerfScore 48.00
G_M31285_IG16: ; bbWeight=4, extend
vcvtss2sd xmm5, xmm5, xmm5
;; size=4 bbWeight=4 PerfScore 16.00
G_M31285_IG17: ; bbWeight=4, extend
vsqrtsd xmm5, xmm5, xmm5
;; size=4 bbWeight=4 PerfScore 48.00
G_M31285_IG18: ; bbWeight=4, extend
vmovsd qword ptr [ebp-0x98], xmm5
;; size=8 bbWeight=4 PerfScore 4.00
G_M31285_IG19: ; bbWeight=4, extend
vcvtsd2ss xmm6, xmm6, xmm5
;; size=4 bbWeight=4 PerfScore 16.00
G_M31285_IG20: ; bbWeight=4, extend
vxorps xmm7, xmm7, xmm7
;; size=4 bbWeight=4 PerfScore 1.33
G_M31285_IG21: ; bbWeight=4, extend
vucomiss xmm6, xmm7
;; size=4 bbWeight=4 PerfScore 8.00
G_M31285_IG22: ; bbWeight=4, isz, extend
jp SHORT G_M31285_IG24
;; size=2 bbWeight=4 PerfScore 4.00
G_M31285_IG23: ; bbWeight=4, isz, extend
je SHORT G_M31285_IG27
;; size=2 bbWeight=4 PerfScore 4.00
G_M31285_IG24: ; bbWeight=2, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref
; gcrRegs -[edx]
vmovss xmm7, dword ptr [@RWD00]
;; size=8 bbWeight=2 PerfScore 6.00
G_M31285_IG25: ; bbWeight=2, extend
vdivss xmm6, xmm7, xmm6
;; size=4 bbWeight=2 PerfScore 20.00
G_M31285_IG26: ; bbWeight=2, isz, extend
jmp SHORT G_M31285_IG28
;; size=2 bbWeight=2 PerfScore 4.00
G_M31285_IG27: ; bbWeight=2, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref
vmovss xmm6, dword ptr [@RWD04]
;; size=8 bbWeight=2 PerfScore 6.00
G_M31285_IG28: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref
vcvtss2sd xmm6, xmm6, xmm6
;; size=4 bbWeight=4 PerfScore 16.00
G_M31285_IG29: ; bbWeight=4, extend
vcvtsd2ss xmm6, xmm6, xmm6
;; size=4 bbWeight=4 PerfScore 16.00
G_M31285_IG30: ; bbWeight=4, extend
vbroadcastss xmm6, xmm6
;; size=5 bbWeight=4 PerfScore 4.00
G_M31285_IG31: ; bbWeight=4, extend
vmulps xmm4, xmm6, xmm4
;; size=4 bbWeight=4 PerfScore 12.00
G_M31285_IG32: ; bbWeight=4, extend
vmovups xmmword ptr [ebp-0x80], xmm4
;; size=5 bbWeight=4 PerfScore 4.00
G_M31285_IG33: ; bbWeight=4, extend
xor eax, eax
;; size=2 bbWeight=4 PerfScore 1.00
G_M31285_IG34: ; bbWeight=4, extend
lea edi, bword ptr [ebp-0x28]
; byrRegs +[edi]
;; size=3 bbWeight=4 PerfScore 2.00
G_M31285_IG35: ; bbWeight=4, extend
mov dword ptr [edi], eax
;; size=2 bbWeight=4 PerfScore 4.00
G_M31285_IG36: ; bbWeight=4, extend
mov esi, 20
;; size=5 bbWeight=4 PerfScore 1.00
G_M31285_IG37: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000080 {edi}, byref
mov dword ptr [edi+esi], eax
;; size=3 bbWeight=4 PerfScore 4.00
G_M31285_IG38: ; bbWeight=4, extend
sub esi, 4
;; size=3 bbWeight=4 PerfScore 1.00
G_M31285_IG39: ; bbWeight=4, isz, extend
jne SHORT G_M31285_IG37
;; size=2 bbWeight=4 PerfScore 4.00
G_M31285_IG40: ; bbWeight=4, extend
vmovups xmmword ptr [ebp+0x24], xmm0
;; size=5 bbWeight=4 PerfScore 4.00
G_M31285_IG41: ; bbWeight=4, extend
vmovsd qword ptr [ebp-0x28], xmm0 <--- crash here on reporting untracked local to GC and seeing bad object
Since this is in the middle of SIMD instruction sequence, I wonder if this may be related to recent vectorizing optimizations for struct copying/initialization.
Build Information
Build: https://dev.azure.com/dnceng-public/public/_build/results?buildId=685688
Build error leg or test failing: JIT.performance.0.1
Pull request: #102415
Error Message
Fill the error message using step by step known issues guidance.
{
"ErrorMessage": "Item 'JIT.performance' did not finish running",
"ErrorPattern": "",
"BuildRetry": false,
"ExcludeConsoleLog": false
}
Known issue validation
Build: 🔎 https://dev.azure.com/dnceng-public/public/_build/results?buildId=685688
Error message validated: [Item 'JIT.performance' did not finish running
]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 5/26/2024 12:59:42 AM UTC
Report
Summary
24-Hour Hit Count | 7-Day Hit Count | 1-Month Count |
---|---|---|
0 | 0 | 17 |