-
Notifications
You must be signed in to change notification settings - Fork 4.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve constant folding for some frozen objects #86318
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -236,8 +236,14 @@ public static bool Parse(string value) | |
return Parse(value.AsSpan()); | ||
} | ||
|
||
public static bool Parse(ReadOnlySpan<char> value) => | ||
TryParse(value, out bool result) ? result : throw new FormatException(SR.Format(SR.Format_BadBoolean, new string(value))); | ||
public static bool Parse(ReadOnlySpan<char> value) | ||
{ | ||
if (!TryParse(value, out bool result)) | ||
{ | ||
ThrowHelper.ThrowFormatException_BadBoolean(value); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Replaced throw with a throw helper to make it inlineable (at least for constant input) |
||
} | ||
return result; | ||
} | ||
|
||
// Determines whether a String represents true or false. | ||
// | ||
|
@@ -267,6 +273,7 @@ public static bool TryParse(ReadOnlySpan<char> value, out bool result) | |
|
||
return TryParseUncommon(value, out result); | ||
|
||
[MethodImpl(MethodImplOptions.NoInlining)] | ||
static bool TryParseUncommon(ReadOnlySpan<char> value, out bool result) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
{ | ||
// With "true" being 4 characters, even if we trim something from <= 4 chars, | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm surprised we haven't hit this assert with this previous code:
runtime/src/coreclr/jit/valuenum.h
Lines 1080 to 1099 in bda1f6c
I would expect it to hit for 64-bit to 32-bit crossgen2 compilations. It seems to indicate that this code is never hit for crossgen2 32-bit compilations? Is that expected?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's correct - it will be hit if you replay a 32 bit collection with a cross-targeting Jit today. Evidently, we just don't have people (or machines) doing that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
crossgen doesn't have frozen objects so this path indeed has never been executed, but we could see it on NativeAOT, but I'm not sure we cover the cross compilation case on CI for it