Undo the Const < (uint)span.Length hacks in the BCL - #49450

Merged
stephentoub merged 1 commit into
dotnet:mainfrom
SingleAccretion:Undo-Unnatural-Comparisons-With-Length
Mar 11, 2021
Merged

Undo the Const < (uint)span.Length hacks in the BCL#49450
stephentoub merged 1 commit into
dotnet:mainfrom
SingleAccretion:Undo-Unnatural-Comparisons-With-Length

Conversation

@SingleAccretion

Copy link
Copy Markdown
Contributor

With #40180 having been merged for some time (many thanks to @nathan-moore!), the if (Const < (uint)span.Length) pattern and its permutations can now be get rid of in the BCL. A quick regex search found the following places:

System.Private.CoreLib\src\System\Buffers\Text\Utf8Parser\Utf8Parser.Boolean.cs:44: if (4 < (uint)source.Length)
System.Private.CoreLib\src\System\Text\Unicode\Utf8.cs:105: if (2 >= (uint)destination.Length)
System.Private.CoreLib\src\System\Text\EncoderFallback.cs:137: if (1 < (uint)chars.Length)
System.Private.CoreLib\src\System\Text\Rune.cs:319: if (1 < (uint)source.Length)
System.Private.CoreLib\src\System\Text\Rune.cs:820: if (1 >= (uint)input.Length)

I have manually verified that the codegen for them and the equivalent "natural" versions is the same on the main branch (even without the casts).

cc @GrabYourPitchforks

Do we know of any other places that may have similar things lying around?

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 10, 2021
@SingleAccretion
SingleAccretionforce-pushed the Undo-Unnatural-Comparisons-With-Length branch from 3be8d15 to b7be1d2CompareMarch 10, 2021 21:03
@benaadams

Copy link
Copy Markdown
Member

Do we know of any other places that may have similar things lying around?

https://github.com/dotnet/aspnetcore

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Huh, I'm still getting the bad codegen in sharplab (see here). Did the JIT fix miss the 5.0 RTM cutoff?

That said, the change LGTM. But we do need to be mindful that we're not going to regress performance if we change code that's being cross-compiled for many different runtimes: some of which have the fix and some of which don't. It's relevant here because just the other day I started an internal thread asking if we should make an OOB System.Text.Rune package.

@GrabYourPitchforksGrabYourPitchforks left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but see comment at #49450 (comment).

@benaadams

Copy link
Copy Markdown
Member

Huh, I'm still getting the bad codegen in sharplab (see here). Did the JIT fix miss the 5.0 RTM cutoff?

#40180 was milestoned 6.0 and the last improvement was merged 28 days ago #43568 so I assume so?

@benaadams

benaadams commented Mar 10, 2021

Copy link
Copy Markdown
Member

Using @EgorBo's Disasmo with current dotnet/runtime; it looks like the only difference between the two is jbe vs jle

image

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Argh, I completely forgot about Egor's Disasmo tool! Thank you for the timely reminder. 🚀

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Networking unit test failures are described at #48758 (comment).

@SingleAccretion
SingleAccretionforce-pushed the Undo-Unnatural-Comparisons-With-Length branch from b7be1d2 to 5a3674fCompareMarch 11, 2021 10:37
@stephentoub
stephentoub merged commit 2f2614f into dotnet:mainMar 11, 2021
@SingleAccretion
SingleAccretion deleted the Undo-Unnatural-Comparisons-With-Length branch March 12, 2021 15:20
@ghostghost locked as resolved and limited conversation to collaborators Apr 11, 2021
@JulieLeeMSFTJulieLeeMSFT added this to the 6.0.0 milestone Apr 15, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@SingleAccretion@benaadams@GrabYourPitchforks@stephentoub@jkotas@JulieLeeMSFT
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Undo the Const < (uint)span.Length hacks in the BCL - #49450

Merged
stephentoub merged 1 commit into
dotnet:mainfrom
SingleAccretion:Undo-Unnatural-Comparisons-With-Length
Mar 11, 2021
Merged

Undo the Const < (uint)span.Length hacks in the BCL#49450
stephentoub merged 1 commit into
dotnet:mainfrom
SingleAccretion:Undo-Unnatural-Comparisons-With-Length

Conversation

@SingleAccretion

Copy link
Copy Markdown
Contributor

With #40180 having been merged for some time (many thanks to @nathan-moore!), the if (Const < (uint)span.Length) pattern and its permutations can now be get rid of in the BCL. A quick regex search found the following places:

System.Private.CoreLib\src\System\Buffers\Text\Utf8Parser\Utf8Parser.Boolean.cs:44: if (4 < (uint)source.Length)
System.Private.CoreLib\src\System\Text\Unicode\Utf8.cs:105: if (2 >= (uint)destination.Length)
System.Private.CoreLib\src\System\Text\EncoderFallback.cs:137: if (1 < (uint)chars.Length)
System.Private.CoreLib\src\System\Text\Rune.cs:319: if (1 < (uint)source.Length)
System.Private.CoreLib\src\System\Text\Rune.cs:820: if (1 >= (uint)input.Length)

I have manually verified that the codegen for them and the equivalent "natural" versions is the same on the main branch (even without the casts).

cc @GrabYourPitchforks

Do we know of any other places that may have similar things lying around?

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 10, 2021
@SingleAccretion
SingleAccretionforce-pushed the Undo-Unnatural-Comparisons-With-Length branch from 3be8d15 to b7be1d2CompareMarch 10, 2021 21:03
@benaadams

Copy link
Copy Markdown
Member

Do we know of any other places that may have similar things lying around?

https://github.com/dotnet/aspnetcore

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Huh, I'm still getting the bad codegen in sharplab (see here). Did the JIT fix miss the 5.0 RTM cutoff?

That said, the change LGTM. But we do need to be mindful that we're not going to regress performance if we change code that's being cross-compiled for many different runtimes: some of which have the fix and some of which don't. It's relevant here because just the other day I started an internal thread asking if we should make an OOB System.Text.Rune package.

@GrabYourPitchforksGrabYourPitchforks left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but see comment at #49450 (comment).

@benaadams

Copy link
Copy Markdown
Member

Huh, I'm still getting the bad codegen in sharplab (see here). Did the JIT fix miss the 5.0 RTM cutoff?

#40180 was milestoned 6.0 and the last improvement was merged 28 days ago #43568 so I assume so?

@benaadams

benaadams commented Mar 10, 2021

Copy link
Copy Markdown
Member

Using @EgorBo's Disasmo with current dotnet/runtime; it looks like the only difference between the two is jbe vs jle

image

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Argh, I completely forgot about Egor's Disasmo tool! Thank you for the timely reminder. 🚀

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Networking unit test failures are described at #48758 (comment).

@SingleAccretion
SingleAccretionforce-pushed the Undo-Unnatural-Comparisons-With-Length branch from b7be1d2 to 5a3674fCompareMarch 11, 2021 10:37
@stephentoub
stephentoub merged commit 2f2614f into dotnet:mainMar 11, 2021
@SingleAccretion
SingleAccretion deleted the Undo-Unnatural-Comparisons-With-Length branch March 12, 2021 15:20
@ghostghost locked as resolved and limited conversation to collaborators Apr 11, 2021
@JulieLeeMSFTJulieLeeMSFT added this to the 6.0.0 milestone Apr 15, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@SingleAccretion@benaadams@GrabYourPitchforks@stephentoub@jkotas@JulieLeeMSFT
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Undo the Const < (uint)span.Length hacks in the BCL - #49450

Merged
stephentoub merged 1 commit into
dotnet:mainfrom
SingleAccretion:Undo-Unnatural-Comparisons-With-Length
Mar 11, 2021
Merged

Undo the Const < (uint)span.Length hacks in the BCL#49450
stephentoub merged 1 commit into
dotnet:mainfrom
SingleAccretion:Undo-Unnatural-Comparisons-With-Length

Conversation

@SingleAccretion

Copy link
Copy Markdown
Contributor

With #40180 having been merged for some time (many thanks to @nathan-moore!), the if (Const < (uint)span.Length) pattern and its permutations can now be get rid of in the BCL. A quick regex search found the following places:

System.Private.CoreLib\src\System\Buffers\Text\Utf8Parser\Utf8Parser.Boolean.cs:44: if (4 < (uint)source.Length)
System.Private.CoreLib\src\System\Text\Unicode\Utf8.cs:105: if (2 >= (uint)destination.Length)
System.Private.CoreLib\src\System\Text\EncoderFallback.cs:137: if (1 < (uint)chars.Length)
System.Private.CoreLib\src\System\Text\Rune.cs:319: if (1 < (uint)source.Length)
System.Private.CoreLib\src\System\Text\Rune.cs:820: if (1 >= (uint)input.Length)

I have manually verified that the codegen for them and the equivalent "natural" versions is the same on the main branch (even without the casts).

cc @GrabYourPitchforks

Do we know of any other places that may have similar things lying around?

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 10, 2021
@SingleAccretion
SingleAccretionforce-pushed the Undo-Unnatural-Comparisons-With-Length branch from 3be8d15 to b7be1d2CompareMarch 10, 2021 21:03
@benaadams

Copy link
Copy Markdown
Member

Do we know of any other places that may have similar things lying around?

https://github.com/dotnet/aspnetcore

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Huh, I'm still getting the bad codegen in sharplab (see here). Did the JIT fix miss the 5.0 RTM cutoff?

That said, the change LGTM. But we do need to be mindful that we're not going to regress performance if we change code that's being cross-compiled for many different runtimes: some of which have the fix and some of which don't. It's relevant here because just the other day I started an internal thread asking if we should make an OOB System.Text.Rune package.

@GrabYourPitchforksGrabYourPitchforks left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but see comment at #49450 (comment).

@benaadams

Copy link
Copy Markdown
Member

Huh, I'm still getting the bad codegen in sharplab (see here). Did the JIT fix miss the 5.0 RTM cutoff?

#40180 was milestoned 6.0 and the last improvement was merged 28 days ago #43568 so I assume so?

@benaadams

benaadams commented Mar 10, 2021

Copy link
Copy Markdown
Member

Using @EgorBo's Disasmo with current dotnet/runtime; it looks like the only difference between the two is jbe vs jle

image

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Argh, I completely forgot about Egor's Disasmo tool! Thank you for the timely reminder. 🚀

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Networking unit test failures are described at #48758 (comment).

@SingleAccretion
SingleAccretionforce-pushed the Undo-Unnatural-Comparisons-With-Length branch from b7be1d2 to 5a3674fCompareMarch 11, 2021 10:37
@stephentoub
stephentoub merged commit 2f2614f into dotnet:mainMar 11, 2021
@SingleAccretion
SingleAccretion deleted the Undo-Unnatural-Comparisons-With-Length branch March 12, 2021 15:20
@ghostghost locked as resolved and limited conversation to collaborators Apr 11, 2021
@JulieLeeMSFTJulieLeeMSFT added this to the 6.0.0 milestone Apr 15, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@SingleAccretion@benaadams@GrabYourPitchforks@stephentoub@jkotas@JulieLeeMSFT
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Undo the Const < (uint)span.Length hacks in the BCL - #49450

Merged
stephentoub merged 1 commit into
dotnet:mainfrom
SingleAccretion:Undo-Unnatural-Comparisons-With-Length
Mar 11, 2021
Merged

Undo the Const < (uint)span.Length hacks in the BCL#49450
stephentoub merged 1 commit into
dotnet:mainfrom
SingleAccretion:Undo-Unnatural-Comparisons-With-Length

Conversation

@SingleAccretion

Copy link
Copy Markdown
Contributor

With #40180 having been merged for some time (many thanks to @nathan-moore!), the if (Const < (uint)span.Length) pattern and its permutations can now be get rid of in the BCL. A quick regex search found the following places:

System.Private.CoreLib\src\System\Buffers\Text\Utf8Parser\Utf8Parser.Boolean.cs:44: if (4 < (uint)source.Length)
System.Private.CoreLib\src\System\Text\Unicode\Utf8.cs:105: if (2 >= (uint)destination.Length)
System.Private.CoreLib\src\System\Text\EncoderFallback.cs:137: if (1 < (uint)chars.Length)
System.Private.CoreLib\src\System\Text\Rune.cs:319: if (1 < (uint)source.Length)
System.Private.CoreLib\src\System\Text\Rune.cs:820: if (1 >= (uint)input.Length)

I have manually verified that the codegen for them and the equivalent "natural" versions is the same on the main branch (even without the casts).

cc @GrabYourPitchforks

Do we know of any other places that may have similar things lying around?

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 10, 2021
@SingleAccretion
SingleAccretionforce-pushed the Undo-Unnatural-Comparisons-With-Length branch from 3be8d15 to b7be1d2CompareMarch 10, 2021 21:03
@benaadams

Copy link
Copy Markdown
Member

Do we know of any other places that may have similar things lying around?

https://github.com/dotnet/aspnetcore

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Huh, I'm still getting the bad codegen in sharplab (see here). Did the JIT fix miss the 5.0 RTM cutoff?

That said, the change LGTM. But we do need to be mindful that we're not going to regress performance if we change code that's being cross-compiled for many different runtimes: some of which have the fix and some of which don't. It's relevant here because just the other day I started an internal thread asking if we should make an OOB System.Text.Rune package.

@GrabYourPitchforksGrabYourPitchforks left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but see comment at #49450 (comment).

@benaadams

Copy link
Copy Markdown
Member

Huh, I'm still getting the bad codegen in sharplab (see here). Did the JIT fix miss the 5.0 RTM cutoff?

#40180 was milestoned 6.0 and the last improvement was merged 28 days ago #43568 so I assume so?

@benaadams

benaadams commented Mar 10, 2021

Copy link
Copy Markdown
Member

Using @EgorBo's Disasmo with current dotnet/runtime; it looks like the only difference between the two is jbe vs jle

image

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Argh, I completely forgot about Egor's Disasmo tool! Thank you for the timely reminder. 🚀

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Networking unit test failures are described at #48758 (comment).

@SingleAccretion
SingleAccretionforce-pushed the Undo-Unnatural-Comparisons-With-Length branch from b7be1d2 to 5a3674fCompareMarch 11, 2021 10:37
@stephentoub
stephentoub merged commit 2f2614f into dotnet:mainMar 11, 2021
@SingleAccretion
SingleAccretion deleted the Undo-Unnatural-Comparisons-With-Length branch March 12, 2021 15:20
@ghostghost locked as resolved and limited conversation to collaborators Apr 11, 2021
@JulieLeeMSFTJulieLeeMSFT added this to the 6.0.0 milestone Apr 15, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@SingleAccretion@benaadams@GrabYourPitchforks@stephentoub@jkotas@JulieLeeMSFT
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Undo the Const < (uint)span.Length hacks in the BCL - #49450

Merged
stephentoub merged 1 commit into
dotnet:mainfrom
SingleAccretion:Undo-Unnatural-Comparisons-With-Length
Mar 11, 2021
Merged

Undo the Const < (uint)span.Length hacks in the BCL#49450
stephentoub merged 1 commit into
dotnet:mainfrom
SingleAccretion:Undo-Unnatural-Comparisons-With-Length

Conversation

@SingleAccretion

Copy link
Copy Markdown
Contributor

With #40180 having been merged for some time (many thanks to @nathan-moore!), the if (Const < (uint)span.Length) pattern and its permutations can now be get rid of in the BCL. A quick regex search found the following places:

System.Private.CoreLib\src\System\Buffers\Text\Utf8Parser\Utf8Parser.Boolean.cs:44: if (4 < (uint)source.Length)
System.Private.CoreLib\src\System\Text\Unicode\Utf8.cs:105: if (2 >= (uint)destination.Length)
System.Private.CoreLib\src\System\Text\EncoderFallback.cs:137: if (1 < (uint)chars.Length)
System.Private.CoreLib\src\System\Text\Rune.cs:319: if (1 < (uint)source.Length)
System.Private.CoreLib\src\System\Text\Rune.cs:820: if (1 >= (uint)input.Length)

I have manually verified that the codegen for them and the equivalent "natural" versions is the same on the main branch (even without the casts).

cc @GrabYourPitchforks

Do we know of any other places that may have similar things lying around?

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 10, 2021
@SingleAccretion
SingleAccretionforce-pushed the Undo-Unnatural-Comparisons-With-Length branch from 3be8d15 to b7be1d2CompareMarch 10, 2021 21:03
@benaadams

Copy link
Copy Markdown
Member

Do we know of any other places that may have similar things lying around?

https://github.com/dotnet/aspnetcore

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Huh, I'm still getting the bad codegen in sharplab (see here). Did the JIT fix miss the 5.0 RTM cutoff?

That said, the change LGTM. But we do need to be mindful that we're not going to regress performance if we change code that's being cross-compiled for many different runtimes: some of which have the fix and some of which don't. It's relevant here because just the other day I started an internal thread asking if we should make an OOB System.Text.Rune package.

@GrabYourPitchforksGrabYourPitchforks left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but see comment at #49450 (comment).

@benaadams

Copy link
Copy Markdown
Member

Huh, I'm still getting the bad codegen in sharplab (see here). Did the JIT fix miss the 5.0 RTM cutoff?

#40180 was milestoned 6.0 and the last improvement was merged 28 days ago #43568 so I assume so?

@benaadams

benaadams commented Mar 10, 2021

Copy link
Copy Markdown
Member

Using @EgorBo's Disasmo with current dotnet/runtime; it looks like the only difference between the two is jbe vs jle

image

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Argh, I completely forgot about Egor's Disasmo tool! Thank you for the timely reminder. 🚀

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Networking unit test failures are described at #48758 (comment).

@SingleAccretion
SingleAccretionforce-pushed the Undo-Unnatural-Comparisons-With-Length branch from b7be1d2 to 5a3674fCompareMarch 11, 2021 10:37
@stephentoub
stephentoub merged commit 2f2614f into dotnet:mainMar 11, 2021
@SingleAccretion
SingleAccretion deleted the Undo-Unnatural-Comparisons-With-Length branch March 12, 2021 15:20
@ghostghost locked as resolved and limited conversation to collaborators Apr 11, 2021
@JulieLeeMSFTJulieLeeMSFT added this to the 6.0.0 milestone Apr 15, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@SingleAccretion@benaadams@GrabYourPitchforks@stephentoub@jkotas@JulieLeeMSFT
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Undo the Const < (uint)span.Length hacks in the BCL - #49450

Merged
stephentoub merged 1 commit into
dotnet:mainfrom
SingleAccretion:Undo-Unnatural-Comparisons-With-Length
Mar 11, 2021
Merged

Undo the Const < (uint)span.Length hacks in the BCL#49450
stephentoub merged 1 commit into
dotnet:mainfrom
SingleAccretion:Undo-Unnatural-Comparisons-With-Length

Conversation

@SingleAccretion

Copy link
Copy Markdown
Contributor

With #40180 having been merged for some time (many thanks to @nathan-moore!), the if (Const < (uint)span.Length) pattern and its permutations can now be get rid of in the BCL. A quick regex search found the following places:

System.Private.CoreLib\src\System\Buffers\Text\Utf8Parser\Utf8Parser.Boolean.cs:44: if (4 < (uint)source.Length)
System.Private.CoreLib\src\System\Text\Unicode\Utf8.cs:105: if (2 >= (uint)destination.Length)
System.Private.CoreLib\src\System\Text\EncoderFallback.cs:137: if (1 < (uint)chars.Length)
System.Private.CoreLib\src\System\Text\Rune.cs:319: if (1 < (uint)source.Length)
System.Private.CoreLib\src\System\Text\Rune.cs:820: if (1 >= (uint)input.Length)

I have manually verified that the codegen for them and the equivalent "natural" versions is the same on the main branch (even without the casts).

cc @GrabYourPitchforks

Do we know of any other places that may have similar things lying around?

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 10, 2021
@SingleAccretion
SingleAccretionforce-pushed the Undo-Unnatural-Comparisons-With-Length branch from 3be8d15 to b7be1d2CompareMarch 10, 2021 21:03
@benaadams

Copy link
Copy Markdown
Member

Do we know of any other places that may have similar things lying around?

https://github.com/dotnet/aspnetcore

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Huh, I'm still getting the bad codegen in sharplab (see here). Did the JIT fix miss the 5.0 RTM cutoff?

That said, the change LGTM. But we do need to be mindful that we're not going to regress performance if we change code that's being cross-compiled for many different runtimes: some of which have the fix and some of which don't. It's relevant here because just the other day I started an internal thread asking if we should make an OOB System.Text.Rune package.

@GrabYourPitchforksGrabYourPitchforks left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but see comment at #49450 (comment).

@benaadams

Copy link
Copy Markdown
Member

Huh, I'm still getting the bad codegen in sharplab (see here). Did the JIT fix miss the 5.0 RTM cutoff?

#40180 was milestoned 6.0 and the last improvement was merged 28 days ago #43568 so I assume so?

@benaadams

benaadams commented Mar 10, 2021

Copy link
Copy Markdown
Member

Using @EgorBo's Disasmo with current dotnet/runtime; it looks like the only difference between the two is jbe vs jle

image

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Argh, I completely forgot about Egor's Disasmo tool! Thank you for the timely reminder. 🚀

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Networking unit test failures are described at #48758 (comment).

@SingleAccretion
SingleAccretionforce-pushed the Undo-Unnatural-Comparisons-With-Length branch from b7be1d2 to 5a3674fCompareMarch 11, 2021 10:37
@stephentoub
stephentoub merged commit 2f2614f into dotnet:mainMar 11, 2021
@SingleAccretion
SingleAccretion deleted the Undo-Unnatural-Comparisons-With-Length branch March 12, 2021 15:20
@ghostghost locked as resolved and limited conversation to collaborators Apr 11, 2021
@JulieLeeMSFTJulieLeeMSFT added this to the 6.0.0 milestone Apr 15, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@SingleAccretion@benaadams@GrabYourPitchforks@stephentoub@jkotas@JulieLeeMSFT
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Undo the Const < (uint)span.Length hacks in the BCL - #49450

Merged
stephentoub merged 1 commit into
dotnet:mainfrom
SingleAccretion:Undo-Unnatural-Comparisons-With-Length
Mar 11, 2021
Merged

Undo the Const < (uint)span.Length hacks in the BCL#49450
stephentoub merged 1 commit into
dotnet:mainfrom
SingleAccretion:Undo-Unnatural-Comparisons-With-Length

Conversation

@SingleAccretion

Copy link
Copy Markdown
Contributor

With #40180 having been merged for some time (many thanks to @nathan-moore!), the if (Const < (uint)span.Length) pattern and its permutations can now be get rid of in the BCL. A quick regex search found the following places:

System.Private.CoreLib\src\System\Buffers\Text\Utf8Parser\Utf8Parser.Boolean.cs:44: if (4 < (uint)source.Length)
System.Private.CoreLib\src\System\Text\Unicode\Utf8.cs:105: if (2 >= (uint)destination.Length)
System.Private.CoreLib\src\System\Text\EncoderFallback.cs:137: if (1 < (uint)chars.Length)
System.Private.CoreLib\src\System\Text\Rune.cs:319: if (1 < (uint)source.Length)
System.Private.CoreLib\src\System\Text\Rune.cs:820: if (1 >= (uint)input.Length)

I have manually verified that the codegen for them and the equivalent "natural" versions is the same on the main branch (even without the casts).

cc @GrabYourPitchforks

Do we know of any other places that may have similar things lying around?

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 10, 2021
@SingleAccretion
SingleAccretionforce-pushed the Undo-Unnatural-Comparisons-With-Length branch from 3be8d15 to b7be1d2CompareMarch 10, 2021 21:03
@benaadams

Copy link
Copy Markdown
Member

Do we know of any other places that may have similar things lying around?

https://github.com/dotnet/aspnetcore

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Huh, I'm still getting the bad codegen in sharplab (see here). Did the JIT fix miss the 5.0 RTM cutoff?

That said, the change LGTM. But we do need to be mindful that we're not going to regress performance if we change code that's being cross-compiled for many different runtimes: some of which have the fix and some of which don't. It's relevant here because just the other day I started an internal thread asking if we should make an OOB System.Text.Rune package.

@GrabYourPitchforksGrabYourPitchforks left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but see comment at #49450 (comment).

@benaadams

Copy link
Copy Markdown
Member

Huh, I'm still getting the bad codegen in sharplab (see here). Did the JIT fix miss the 5.0 RTM cutoff?

#40180 was milestoned 6.0 and the last improvement was merged 28 days ago #43568 so I assume so?

@benaadams

benaadams commented Mar 10, 2021

Copy link
Copy Markdown
Member

Using @EgorBo's Disasmo with current dotnet/runtime; it looks like the only difference between the two is jbe vs jle

image

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Argh, I completely forgot about Egor's Disasmo tool! Thank you for the timely reminder. 🚀

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Networking unit test failures are described at #48758 (comment).

@SingleAccretion
SingleAccretionforce-pushed the Undo-Unnatural-Comparisons-With-Length branch from b7be1d2 to 5a3674fCompareMarch 11, 2021 10:37
@stephentoub
stephentoub merged commit 2f2614f into dotnet:mainMar 11, 2021
@SingleAccretion
SingleAccretion deleted the Undo-Unnatural-Comparisons-With-Length branch March 12, 2021 15:20
@ghostghost locked as resolved and limited conversation to collaborators Apr 11, 2021
@JulieLeeMSFTJulieLeeMSFT added this to the 6.0.0 milestone Apr 15, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@SingleAccretion@benaadams@GrabYourPitchforks@stephentoub@jkotas@JulieLeeMSFT
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Undo the Const < (uint)span.Length hacks in the BCL - #49450

Merged
stephentoub merged 1 commit into
dotnet:mainfrom
SingleAccretion:Undo-Unnatural-Comparisons-With-Length
Mar 11, 2021
Merged

Undo the Const < (uint)span.Length hacks in the BCL#49450
stephentoub merged 1 commit into
dotnet:mainfrom
SingleAccretion:Undo-Unnatural-Comparisons-With-Length

Conversation

@SingleAccretion

Copy link
Copy Markdown
Contributor

With #40180 having been merged for some time (many thanks to @nathan-moore!), the if (Const < (uint)span.Length) pattern and its permutations can now be get rid of in the BCL. A quick regex search found the following places:

System.Private.CoreLib\src\System\Buffers\Text\Utf8Parser\Utf8Parser.Boolean.cs:44: if (4 < (uint)source.Length)
System.Private.CoreLib\src\System\Text\Unicode\Utf8.cs:105: if (2 >= (uint)destination.Length)
System.Private.CoreLib\src\System\Text\EncoderFallback.cs:137: if (1 < (uint)chars.Length)
System.Private.CoreLib\src\System\Text\Rune.cs:319: if (1 < (uint)source.Length)
System.Private.CoreLib\src\System\Text\Rune.cs:820: if (1 >= (uint)input.Length)

I have manually verified that the codegen for them and the equivalent "natural" versions is the same on the main branch (even without the casts).

cc @GrabYourPitchforks

Do we know of any other places that may have similar things lying around?

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 10, 2021
@SingleAccretion
SingleAccretionforce-pushed the Undo-Unnatural-Comparisons-With-Length branch from 3be8d15 to b7be1d2CompareMarch 10, 2021 21:03
@benaadams

Copy link
Copy Markdown
Member

Do we know of any other places that may have similar things lying around?

https://github.com/dotnet/aspnetcore

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Huh, I'm still getting the bad codegen in sharplab (see here). Did the JIT fix miss the 5.0 RTM cutoff?

That said, the change LGTM. But we do need to be mindful that we're not going to regress performance if we change code that's being cross-compiled for many different runtimes: some of which have the fix and some of which don't. It's relevant here because just the other day I started an internal thread asking if we should make an OOB System.Text.Rune package.

@GrabYourPitchforksGrabYourPitchforks left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but see comment at #49450 (comment).

@benaadams

Copy link
Copy Markdown
Member

Huh, I'm still getting the bad codegen in sharplab (see here). Did the JIT fix miss the 5.0 RTM cutoff?

#40180 was milestoned 6.0 and the last improvement was merged 28 days ago #43568 so I assume so?

@benaadams

benaadams commented Mar 10, 2021

Copy link
Copy Markdown
Member

Using @EgorBo's Disasmo with current dotnet/runtime; it looks like the only difference between the two is jbe vs jle

image

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Argh, I completely forgot about Egor's Disasmo tool! Thank you for the timely reminder. 🚀

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Networking unit test failures are described at #48758 (comment).

@SingleAccretion
SingleAccretionforce-pushed the Undo-Unnatural-Comparisons-With-Length branch from b7be1d2 to 5a3674fCompareMarch 11, 2021 10:37
@stephentoub
stephentoub merged commit 2f2614f into dotnet:mainMar 11, 2021
@SingleAccretion
SingleAccretion deleted the Undo-Unnatural-Comparisons-With-Length branch March 12, 2021 15:20
@ghostghost locked as resolved and limited conversation to collaborators Apr 11, 2021
@JulieLeeMSFTJulieLeeMSFT added this to the 6.0.0 milestone Apr 15, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@SingleAccretion@benaadams@GrabYourPitchforks@stephentoub@jkotas@JulieLeeMSFT