- Notifications
You must be signed in to change notification settings - Fork 5.3k
Closed
Labels
JitUntriagedCLR JIT issues needing additional triageCLR JIT issues needing additional triagearea-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMICLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMIbughelp wanted[up-for-grabs] Good issue for external contributors[up-for-grabs] Good issue for external contributorsmemory modelissues associated with memory modelissues associated with memory model
Milestone
Description
If the following program is compiled with optimizations enabled (e.g. the /o+ flag is provided on the csc command line), RyuJIT will drop the volatile read of a:
using System.Runtime.CompilerServices; static class C { static volatile int a; static int b; [MethodImpl(MethodImplOptions.NoInlining)] static void LightweightStoreFence() { a = 1; var dummy = a; b = 2; } static void Main() { LightweightStoreFence(); } }� The IL as reported by a JIT dump is:
IL_0000 17 ldc.i4.1 IL_0001 fe 13 volatile. IL_0003 80 01 00 00 04 stsfld 0x4000001 IL_0008 fe 13 volatile. IL_000a 7e 01 00 00 04 ldsfld 0x4000001 IL_000f 26 pop IL_0010 18 ldc.i4.2 IL_0011 80 02 00 00 04 stsfld 0x4000002 IL_0016 2a ret � The generated assembly is:
G_M23768_IG01: ; func=00, offs=000000H, size=0000H, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG G_M23768_IG02: ; offs=000000H, size=0014H, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref IN0001: 000000 mov dword ptr [reloc classVar[0xd2155a38]], 1 IN0002: 00000A mov dword ptr [reloc classVar[0xd2155a58]], 2 G_M23768_IG03: ; offs=000014H, size=0001H, epilog, nogc, emitadd IN0003: 000014 ret � From the dump, it appears that the importer drops the volatile ldsfld on the floor when it imports the pop instruction. This is not correct per the ECMA spec, which states that volatile operations may not be removed or coalesced.
Thanks to @omariom for reporting the original issue in #6257.
category:correctness
theme:volatile
skill-level:expert
cost:medium
omariom
Metadata
Metadata
Assignees
Labels
JitUntriagedCLR JIT issues needing additional triageCLR JIT issues needing additional triagearea-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMICLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMIbughelp wanted[up-for-grabs] Good issue for external contributors[up-for-grabs] Good issue for external contributorsmemory modelissues associated with memory modelissues associated with memory model