-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Closed
Labels
area-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 SuperPMIquestionAnswer questions and provide assistance, not an issue with source code or documentation.Answer questions and provide assistance, not an issue with source code or documentation.tenet-performancePerformance related issuePerformance related issue
Milestone
Description
Description
The JIT is not able to inline this method because of the throw new FormatException("Bad variable size int"); statement with the following error:
generic !!0 (value class System.ReadOnlySpan`1<unsigned int8>,int32,int32&)
Fail Reason: has ldstr VM restriction
A cleanup version of the offending code:
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
public static T ReadVariableSizeInt<T>(ReadOnlySpan<byte> buffer, int pos, out int offset) where T : unmanaged
{
if (typeof(T) == typeof(int) || typeof(T) == typeof(uint))
{
int ui = 0;
offset = 0;
byte b = buffer[pos + 0];
ui |= (b & 0x7F);
offset++;
if ((b & 0x80) == 0)
goto End;
b = buffer[pos + 1];
ui |= (b & 0x7F) << 7;
offset++;
if ((b & 0x80) == 0)
goto End;
b = buffer[pos + 2];
ui |= (b & 0x7F) << 14;
offset++;
if ((b & 0x80) == 0)
goto End;
b = buffer[pos + 3];
ui |= (b & 0x7F) << 21;
offset++;
if ((b & 0x80) == 0)
goto End;
b = buffer[pos + 4];
ui |= (b & 0x7F) << 28;
offset++;
if ((b & 0x80) != 0)
throw new FormatException("Bad variable size int");
End: return (T)(object)ui;
}
throw new NotSupportedException($"The type {nameof(T)} is not supported to be written.");
}
Configuration
.Net 5.0
Analysis
It sounds to me that because the offending line is a throw statement and is to be marked as cold, that restriction should not apply.
Metadata
Metadata
Assignees
Labels
area-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 SuperPMIquestionAnswer questions and provide assistance, not an issue with source code or documentation.Answer questions and provide assistance, not an issue with source code or documentation.tenet-performancePerformance related issuePerformance related issue