Skip to content

Fix 97272 - #99818

Merged
EgorBo merged 1 commit into
dotnet:mainfrom
EgorBo:fix-recursive-intrinsics
Jun 15, 2024
Merged

Fix 97272#99818
EgorBo merged 1 commit into
dotnet:mainfrom
EgorBo:fix-recursive-intrinsics

Conversation

@EgorBo

Copy link
Copy Markdown
Member

Fixes#97272

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 15, 2024
@EgorBo

Copy link
Copy Markdown
MemberAuthor

@MihuBot

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@EgorBo
EgorBo marked this pull request as ready for review March 15, 2024 18:11
@Sergio0694

Copy link
Copy Markdown
Contributor

MrBeanWaitingGIF

@Sergio0694

Copy link
Copy Markdown
Contributor

Me checking this PR before going to bed:

SchooldaysGIF

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp list

@azure-pipelines

Copy link
Copy Markdown
CI/CD Pipelines for this repository:

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr outerloop, runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@Sergio0694

Copy link
Copy Markdown
Contributor

WaitingSpongebobGIF

@Sergio0694

Copy link
Copy Markdown
Contributor

CatLayingGIF

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

@EgorBo

EgorBo commented May 22, 2024

Copy link
Copy Markdown
MemberAuthor

@tannergooding or anyone from @dotnet/jit-contrib could you take a look?
tl;dr: we currently detect must-expand intrinsics as "does this call invoke current root method" while it should be - "does this call invoke itself" regardless of who is the root - this led to problems with [Intrinsic] attribute on top of virtual methods in Type type. The interesting side-effect from this is that we now can inline must-expand SIMD intrsinsics which we give up due to non-constant args for IMM etc. It allows jit to fold the fallback if late phases detect a constant. Example:

Vector128<int>Foo(Vector128<int>v){bytemask=0b11110000;returnSse2.Shuffle(v,mask);}

Main:

; Method MyBench:Foomovrcx,rdxmovrdx,r8movr8d,240 tail.jmp[Sse2:Shuffle(Vector128`1[int],ubyte):Vector128`1[int]]; Total bytes of code: 18

PR:

; Method MyBench:Foo vpshufd xmm0, xmmword ptr [r8],-16vmovups xmmword ptr [rdx],xmm0movrax,rdxret; Total bytes of code: 14

Diffs

There a few regressions which are just PMI-artifacts, e.g. we inline the fallback here. but it shouldn't matter since the method is supposed to be inlined (AggressiveInlining).

  • a couple of r2r regressions - I investigated those and looks like they're "cancel inlining because BlockNonDeterministicIntrinsics said so"

@tannergooding

Copy link
Copy Markdown
Member

There's two libraries-pmi regressions that look interesting. I think in production they aren't actually hit for the cases highlighted because they are small methods that get inlined and the constant is propagated.

But, it showcases an issue where we aren't preserving it as a call for the non-constant case, so we end up expanding the jump table inline instead, this can lead to nasty code explosion in some cases and that is potentially concerning (particularly for T0 like code).

Comment threadsrc/coreclr/jit/hwintrinsic.cpp Outdated
Comment threadsrc/coreclr/jit/importercalls.cpp Outdated
Comment threadsrc/coreclr/jit/importercalls.cpp
Comment threadsrc/coreclr/jit/hwintrinsic.cpp Outdated
@Sergio0694

Copy link
Copy Markdown
Contributor

IMissYouGIF

Egor pls

@EgorBo

Copy link
Copy Markdown
MemberAuthor

@tannergooding PTAL again, your work to rewrite HWINTRINSIC as calls helped to remove the hacks I had in the previous version.

@tannergoodingtannergooding 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.

This looks a lot better now, thanks!

@Sergio0694

Copy link
Copy Markdown
Contributor

finished-elijah-wood

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 16, 2024
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.

Assertion failed '!"Unhandled must expand intrinsic, throwing PlatformNotSupportedException"' in Checked mode

3 participants

@EgorBo@Sergio0694@tannergooding
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Fix 97272 by EgorBo · Pull Request #99818 · dotnet/runtime · GitHub
Skip to content

Fix 97272 - #99818

Merged
EgorBo merged 1 commit into
dotnet:mainfrom
EgorBo:fix-recursive-intrinsics
Jun 15, 2024
Merged

Fix 97272#99818
EgorBo merged 1 commit into
dotnet:mainfrom
EgorBo:fix-recursive-intrinsics

Conversation

@EgorBo

Copy link
Copy Markdown
Member

Fixes#97272

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 15, 2024
@EgorBo

Copy link
Copy Markdown
MemberAuthor

@MihuBot

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@EgorBo
EgorBo marked this pull request as ready for review March 15, 2024 18:11
@Sergio0694

Copy link
Copy Markdown
Contributor

MrBeanWaitingGIF

@Sergio0694

Copy link
Copy Markdown
Contributor

Me checking this PR before going to bed:

SchooldaysGIF

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp list

@azure-pipelines

Copy link
Copy Markdown
CI/CD Pipelines for this repository:

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr outerloop, runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@Sergio0694

Copy link
Copy Markdown
Contributor

WaitingSpongebobGIF

@Sergio0694

Copy link
Copy Markdown
Contributor

CatLayingGIF

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

@EgorBo

EgorBo commented May 22, 2024

Copy link
Copy Markdown
MemberAuthor

@tannergooding or anyone from @dotnet/jit-contrib could you take a look?
tl;dr: we currently detect must-expand intrinsics as "does this call invoke current root method" while it should be - "does this call invoke itself" regardless of who is the root - this led to problems with [Intrinsic] attribute on top of virtual methods in Type type. The interesting side-effect from this is that we now can inline must-expand SIMD intrsinsics which we give up due to non-constant args for IMM etc. It allows jit to fold the fallback if late phases detect a constant. Example:

Vector128<int>Foo(Vector128<int>v){bytemask=0b11110000;returnSse2.Shuffle(v,mask);}

Main:

; Method MyBench:Foomovrcx,rdxmovrdx,r8movr8d,240 tail.jmp[Sse2:Shuffle(Vector128`1[int],ubyte):Vector128`1[int]]; Total bytes of code: 18

PR:

; Method MyBench:Foo vpshufd xmm0, xmmword ptr [r8],-16vmovups xmmword ptr [rdx],xmm0movrax,rdxret; Total bytes of code: 14

Diffs

There a few regressions which are just PMI-artifacts, e.g. we inline the fallback here. but it shouldn't matter since the method is supposed to be inlined (AggressiveInlining).

  • a couple of r2r regressions - I investigated those and looks like they're "cancel inlining because BlockNonDeterministicIntrinsics said so"

@tannergooding

Copy link
Copy Markdown
Member

There's two libraries-pmi regressions that look interesting. I think in production they aren't actually hit for the cases highlighted because they are small methods that get inlined and the constant is propagated.

But, it showcases an issue where we aren't preserving it as a call for the non-constant case, so we end up expanding the jump table inline instead, this can lead to nasty code explosion in some cases and that is potentially concerning (particularly for T0 like code).

Comment threadsrc/coreclr/jit/hwintrinsic.cpp Outdated
Comment threadsrc/coreclr/jit/importercalls.cpp Outdated
Comment threadsrc/coreclr/jit/importercalls.cpp
Comment threadsrc/coreclr/jit/hwintrinsic.cpp Outdated
@Sergio0694

Copy link
Copy Markdown
Contributor

IMissYouGIF

Egor pls

@EgorBo

Copy link
Copy Markdown
MemberAuthor

@tannergooding PTAL again, your work to rewrite HWINTRINSIC as calls helped to remove the hacks I had in the previous version.

@tannergoodingtannergooding 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.

This looks a lot better now, thanks!

@Sergio0694

Copy link
Copy Markdown
Contributor

finished-elijah-wood

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 16, 2024
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.

Assertion failed '!"Unhandled must expand intrinsic, throwing PlatformNotSupportedException"' in Checked mode

3 participants

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

Fix 97272 - #99818

Merged
EgorBo merged 1 commit into
dotnet:mainfrom
EgorBo:fix-recursive-intrinsics
Jun 15, 2024
Merged

Fix 97272#99818
EgorBo merged 1 commit into
dotnet:mainfrom
EgorBo:fix-recursive-intrinsics

Conversation

@EgorBo

Copy link
Copy Markdown
Member

Fixes#97272

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 15, 2024
@EgorBo

Copy link
Copy Markdown
MemberAuthor

@MihuBot

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@EgorBo
EgorBo marked this pull request as ready for review March 15, 2024 18:11
@Sergio0694

Copy link
Copy Markdown
Contributor

MrBeanWaitingGIF

@Sergio0694

Copy link
Copy Markdown
Contributor

Me checking this PR before going to bed:

SchooldaysGIF

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp list

@azure-pipelines

Copy link
Copy Markdown
CI/CD Pipelines for this repository:

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr outerloop, runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@Sergio0694

Copy link
Copy Markdown
Contributor

WaitingSpongebobGIF

@Sergio0694

Copy link
Copy Markdown
Contributor

CatLayingGIF

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

@EgorBo

EgorBo commented May 22, 2024

Copy link
Copy Markdown
MemberAuthor

@tannergooding or anyone from @dotnet/jit-contrib could you take a look?
tl;dr: we currently detect must-expand intrinsics as "does this call invoke current root method" while it should be - "does this call invoke itself" regardless of who is the root - this led to problems with [Intrinsic] attribute on top of virtual methods in Type type. The interesting side-effect from this is that we now can inline must-expand SIMD intrsinsics which we give up due to non-constant args for IMM etc. It allows jit to fold the fallback if late phases detect a constant. Example:

Vector128<int>Foo(Vector128<int>v){bytemask=0b11110000;returnSse2.Shuffle(v,mask);}

Main:

; Method MyBench:Foomovrcx,rdxmovrdx,r8movr8d,240 tail.jmp[Sse2:Shuffle(Vector128`1[int],ubyte):Vector128`1[int]]; Total bytes of code: 18

PR:

; Method MyBench:Foo vpshufd xmm0, xmmword ptr [r8],-16vmovups xmmword ptr [rdx],xmm0movrax,rdxret; Total bytes of code: 14

Diffs

There a few regressions which are just PMI-artifacts, e.g. we inline the fallback here. but it shouldn't matter since the method is supposed to be inlined (AggressiveInlining).

  • a couple of r2r regressions - I investigated those and looks like they're "cancel inlining because BlockNonDeterministicIntrinsics said so"

@tannergooding

Copy link
Copy Markdown
Member

There's two libraries-pmi regressions that look interesting. I think in production they aren't actually hit for the cases highlighted because they are small methods that get inlined and the constant is propagated.

But, it showcases an issue where we aren't preserving it as a call for the non-constant case, so we end up expanding the jump table inline instead, this can lead to nasty code explosion in some cases and that is potentially concerning (particularly for T0 like code).

Comment threadsrc/coreclr/jit/hwintrinsic.cpp Outdated
Comment threadsrc/coreclr/jit/importercalls.cpp Outdated
Comment threadsrc/coreclr/jit/importercalls.cpp
Comment threadsrc/coreclr/jit/hwintrinsic.cpp Outdated
@Sergio0694

Copy link
Copy Markdown
Contributor

IMissYouGIF

Egor pls

@EgorBo

Copy link
Copy Markdown
MemberAuthor

@tannergooding PTAL again, your work to rewrite HWINTRINSIC as calls helped to remove the hacks I had in the previous version.

@tannergoodingtannergooding 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.

This looks a lot better now, thanks!

@Sergio0694

Copy link
Copy Markdown
Contributor

finished-elijah-wood

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 16, 2024
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.

Assertion failed '!"Unhandled must expand intrinsic, throwing PlatformNotSupportedException"' in Checked mode

3 participants

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

Fix 97272 - #99818

Merged
EgorBo merged 1 commit into
dotnet:mainfrom
EgorBo:fix-recursive-intrinsics
Jun 15, 2024
Merged

Fix 97272#99818
EgorBo merged 1 commit into
dotnet:mainfrom
EgorBo:fix-recursive-intrinsics

Conversation

@EgorBo

Copy link
Copy Markdown
Member

Fixes#97272

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 15, 2024
@EgorBo

Copy link
Copy Markdown
MemberAuthor

@MihuBot

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@EgorBo
EgorBo marked this pull request as ready for review March 15, 2024 18:11
@Sergio0694

Copy link
Copy Markdown
Contributor

MrBeanWaitingGIF

@Sergio0694

Copy link
Copy Markdown
Contributor

Me checking this PR before going to bed:

SchooldaysGIF

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp list

@azure-pipelines

Copy link
Copy Markdown
CI/CD Pipelines for this repository:

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr outerloop, runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@Sergio0694

Copy link
Copy Markdown
Contributor

WaitingSpongebobGIF

@Sergio0694

Copy link
Copy Markdown
Contributor

CatLayingGIF

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

@EgorBo

EgorBo commented May 22, 2024

Copy link
Copy Markdown
MemberAuthor

@tannergooding or anyone from @dotnet/jit-contrib could you take a look?
tl;dr: we currently detect must-expand intrinsics as "does this call invoke current root method" while it should be - "does this call invoke itself" regardless of who is the root - this led to problems with [Intrinsic] attribute on top of virtual methods in Type type. The interesting side-effect from this is that we now can inline must-expand SIMD intrsinsics which we give up due to non-constant args for IMM etc. It allows jit to fold the fallback if late phases detect a constant. Example:

Vector128<int>Foo(Vector128<int>v){bytemask=0b11110000;returnSse2.Shuffle(v,mask);}

Main:

; Method MyBench:Foomovrcx,rdxmovrdx,r8movr8d,240 tail.jmp[Sse2:Shuffle(Vector128`1[int],ubyte):Vector128`1[int]]; Total bytes of code: 18

PR:

; Method MyBench:Foo vpshufd xmm0, xmmword ptr [r8],-16vmovups xmmword ptr [rdx],xmm0movrax,rdxret; Total bytes of code: 14

Diffs

There a few regressions which are just PMI-artifacts, e.g. we inline the fallback here. but it shouldn't matter since the method is supposed to be inlined (AggressiveInlining).

  • a couple of r2r regressions - I investigated those and looks like they're "cancel inlining because BlockNonDeterministicIntrinsics said so"

@tannergooding

Copy link
Copy Markdown
Member

There's two libraries-pmi regressions that look interesting. I think in production they aren't actually hit for the cases highlighted because they are small methods that get inlined and the constant is propagated.

But, it showcases an issue where we aren't preserving it as a call for the non-constant case, so we end up expanding the jump table inline instead, this can lead to nasty code explosion in some cases and that is potentially concerning (particularly for T0 like code).

Comment threadsrc/coreclr/jit/hwintrinsic.cpp Outdated
Comment threadsrc/coreclr/jit/importercalls.cpp Outdated
Comment threadsrc/coreclr/jit/importercalls.cpp
Comment threadsrc/coreclr/jit/hwintrinsic.cpp Outdated
@Sergio0694

Copy link
Copy Markdown
Contributor

IMissYouGIF

Egor pls

@EgorBo

Copy link
Copy Markdown
MemberAuthor

@tannergooding PTAL again, your work to rewrite HWINTRINSIC as calls helped to remove the hacks I had in the previous version.

@tannergoodingtannergooding 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.

This looks a lot better now, thanks!

@Sergio0694

Copy link
Copy Markdown
Contributor

finished-elijah-wood

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 16, 2024
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.

Assertion failed '!"Unhandled must expand intrinsic, throwing PlatformNotSupportedException"' in Checked mode

3 participants

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

Fix 97272 - #99818

Merged
EgorBo merged 1 commit into
dotnet:mainfrom
EgorBo:fix-recursive-intrinsics
Jun 15, 2024
Merged

Fix 97272#99818
EgorBo merged 1 commit into
dotnet:mainfrom
EgorBo:fix-recursive-intrinsics

Conversation

@EgorBo

Copy link
Copy Markdown
Member

Fixes#97272

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 15, 2024
@EgorBo

Copy link
Copy Markdown
MemberAuthor

@MihuBot

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@EgorBo
EgorBo marked this pull request as ready for review March 15, 2024 18:11
@Sergio0694

Copy link
Copy Markdown
Contributor

MrBeanWaitingGIF

@Sergio0694

Copy link
Copy Markdown
Contributor

Me checking this PR before going to bed:

SchooldaysGIF

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp list

@azure-pipelines

Copy link
Copy Markdown
CI/CD Pipelines for this repository:

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr outerloop, runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@Sergio0694

Copy link
Copy Markdown
Contributor

WaitingSpongebobGIF

@Sergio0694

Copy link
Copy Markdown
Contributor

CatLayingGIF

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

@EgorBo

EgorBo commented May 22, 2024

Copy link
Copy Markdown
MemberAuthor

@tannergooding or anyone from @dotnet/jit-contrib could you take a look?
tl;dr: we currently detect must-expand intrinsics as "does this call invoke current root method" while it should be - "does this call invoke itself" regardless of who is the root - this led to problems with [Intrinsic] attribute on top of virtual methods in Type type. The interesting side-effect from this is that we now can inline must-expand SIMD intrsinsics which we give up due to non-constant args for IMM etc. It allows jit to fold the fallback if late phases detect a constant. Example:

Vector128<int>Foo(Vector128<int>v){bytemask=0b11110000;returnSse2.Shuffle(v,mask);}

Main:

; Method MyBench:Foomovrcx,rdxmovrdx,r8movr8d,240 tail.jmp[Sse2:Shuffle(Vector128`1[int],ubyte):Vector128`1[int]]; Total bytes of code: 18

PR:

; Method MyBench:Foo vpshufd xmm0, xmmword ptr [r8],-16vmovups xmmword ptr [rdx],xmm0movrax,rdxret; Total bytes of code: 14

Diffs

There a few regressions which are just PMI-artifacts, e.g. we inline the fallback here. but it shouldn't matter since the method is supposed to be inlined (AggressiveInlining).

  • a couple of r2r regressions - I investigated those and looks like they're "cancel inlining because BlockNonDeterministicIntrinsics said so"

@tannergooding

Copy link
Copy Markdown
Member

There's two libraries-pmi regressions that look interesting. I think in production they aren't actually hit for the cases highlighted because they are small methods that get inlined and the constant is propagated.

But, it showcases an issue where we aren't preserving it as a call for the non-constant case, so we end up expanding the jump table inline instead, this can lead to nasty code explosion in some cases and that is potentially concerning (particularly for T0 like code).

Comment threadsrc/coreclr/jit/hwintrinsic.cpp Outdated
Comment threadsrc/coreclr/jit/importercalls.cpp Outdated
Comment threadsrc/coreclr/jit/importercalls.cpp
Comment threadsrc/coreclr/jit/hwintrinsic.cpp Outdated
@Sergio0694

Copy link
Copy Markdown
Contributor

IMissYouGIF

Egor pls

@EgorBo

Copy link
Copy Markdown
MemberAuthor

@tannergooding PTAL again, your work to rewrite HWINTRINSIC as calls helped to remove the hacks I had in the previous version.

@tannergoodingtannergooding 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.

This looks a lot better now, thanks!

@Sergio0694

Copy link
Copy Markdown
Contributor

finished-elijah-wood

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 16, 2024
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.

Assertion failed '!"Unhandled must expand intrinsic, throwing PlatformNotSupportedException"' in Checked mode

3 participants

@EgorBo@Sergio0694@tannergooding
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix 97272 by EgorBo · Pull Request #99818 · dotnet/runtime · GitHub
Skip to content

Fix 97272 - #99818

Merged
EgorBo merged 1 commit into
dotnet:mainfrom
EgorBo:fix-recursive-intrinsics
Jun 15, 2024
Merged

Fix 97272#99818
EgorBo merged 1 commit into
dotnet:mainfrom
EgorBo:fix-recursive-intrinsics

Conversation

@EgorBo

Copy link
Copy Markdown
Member

Fixes#97272

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 15, 2024
@EgorBo

Copy link
Copy Markdown
MemberAuthor

@MihuBot

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@EgorBo
EgorBo marked this pull request as ready for review March 15, 2024 18:11
@Sergio0694

Copy link
Copy Markdown
Contributor

MrBeanWaitingGIF

@Sergio0694

Copy link
Copy Markdown
Contributor

Me checking this PR before going to bed:

SchooldaysGIF

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp list

@azure-pipelines

Copy link
Copy Markdown
CI/CD Pipelines for this repository:

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr outerloop, runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@Sergio0694

Copy link
Copy Markdown
Contributor

WaitingSpongebobGIF

@Sergio0694

Copy link
Copy Markdown
Contributor

CatLayingGIF

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

@EgorBo

EgorBo commented May 22, 2024

Copy link
Copy Markdown
MemberAuthor

@tannergooding or anyone from @dotnet/jit-contrib could you take a look?
tl;dr: we currently detect must-expand intrinsics as "does this call invoke current root method" while it should be - "does this call invoke itself" regardless of who is the root - this led to problems with [Intrinsic] attribute on top of virtual methods in Type type. The interesting side-effect from this is that we now can inline must-expand SIMD intrsinsics which we give up due to non-constant args for IMM etc. It allows jit to fold the fallback if late phases detect a constant. Example:

Vector128<int>Foo(Vector128<int>v){bytemask=0b11110000;returnSse2.Shuffle(v,mask);}

Main:

; Method MyBench:Foomovrcx,rdxmovrdx,r8movr8d,240 tail.jmp[Sse2:Shuffle(Vector128`1[int],ubyte):Vector128`1[int]]; Total bytes of code: 18

PR:

; Method MyBench:Foo vpshufd xmm0, xmmword ptr [r8],-16vmovups xmmword ptr [rdx],xmm0movrax,rdxret; Total bytes of code: 14

Diffs

There a few regressions which are just PMI-artifacts, e.g. we inline the fallback here. but it shouldn't matter since the method is supposed to be inlined (AggressiveInlining).

  • a couple of r2r regressions - I investigated those and looks like they're "cancel inlining because BlockNonDeterministicIntrinsics said so"

@tannergooding

Copy link
Copy Markdown
Member

There's two libraries-pmi regressions that look interesting. I think in production they aren't actually hit for the cases highlighted because they are small methods that get inlined and the constant is propagated.

But, it showcases an issue where we aren't preserving it as a call for the non-constant case, so we end up expanding the jump table inline instead, this can lead to nasty code explosion in some cases and that is potentially concerning (particularly for T0 like code).

Comment threadsrc/coreclr/jit/hwintrinsic.cpp Outdated
Comment threadsrc/coreclr/jit/importercalls.cpp Outdated
Comment threadsrc/coreclr/jit/importercalls.cpp
Comment threadsrc/coreclr/jit/hwintrinsic.cpp Outdated
@Sergio0694

Copy link
Copy Markdown
Contributor

IMissYouGIF

Egor pls

@EgorBo

Copy link
Copy Markdown
MemberAuthor

@tannergooding PTAL again, your work to rewrite HWINTRINSIC as calls helped to remove the hacks I had in the previous version.

@tannergoodingtannergooding 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.

This looks a lot better now, thanks!

@Sergio0694

Copy link
Copy Markdown
Contributor

finished-elijah-wood

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 16, 2024
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.

Assertion failed '!"Unhandled must expand intrinsic, throwing PlatformNotSupportedException"' in Checked mode

3 participants

@EgorBo@Sergio0694@tannergooding
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix 97272 by EgorBo · Pull Request #99818 · dotnet/runtime · GitHub
Skip to content

Fix 97272 - #99818

Merged
EgorBo merged 1 commit into
dotnet:mainfrom
EgorBo:fix-recursive-intrinsics
Jun 15, 2024
Merged

Fix 97272#99818
EgorBo merged 1 commit into
dotnet:mainfrom
EgorBo:fix-recursive-intrinsics

Conversation

@EgorBo

Copy link
Copy Markdown
Member

Fixes#97272

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 15, 2024
@EgorBo

Copy link
Copy Markdown
MemberAuthor

@MihuBot

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@EgorBo
EgorBo marked this pull request as ready for review March 15, 2024 18:11
@Sergio0694

Copy link
Copy Markdown
Contributor

MrBeanWaitingGIF

@Sergio0694

Copy link
Copy Markdown
Contributor

Me checking this PR before going to bed:

SchooldaysGIF

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp list

@azure-pipelines

Copy link
Copy Markdown
CI/CD Pipelines for this repository:

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr outerloop, runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@Sergio0694

Copy link
Copy Markdown
Contributor

WaitingSpongebobGIF

@Sergio0694

Copy link
Copy Markdown
Contributor

CatLayingGIF

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

@EgorBo

EgorBo commented May 22, 2024

Copy link
Copy Markdown
MemberAuthor

@tannergooding or anyone from @dotnet/jit-contrib could you take a look?
tl;dr: we currently detect must-expand intrinsics as "does this call invoke current root method" while it should be - "does this call invoke itself" regardless of who is the root - this led to problems with [Intrinsic] attribute on top of virtual methods in Type type. The interesting side-effect from this is that we now can inline must-expand SIMD intrsinsics which we give up due to non-constant args for IMM etc. It allows jit to fold the fallback if late phases detect a constant. Example:

Vector128<int>Foo(Vector128<int>v){bytemask=0b11110000;returnSse2.Shuffle(v,mask);}

Main:

; Method MyBench:Foomovrcx,rdxmovrdx,r8movr8d,240 tail.jmp[Sse2:Shuffle(Vector128`1[int],ubyte):Vector128`1[int]]; Total bytes of code: 18

PR:

; Method MyBench:Foo vpshufd xmm0, xmmword ptr [r8],-16vmovups xmmword ptr [rdx],xmm0movrax,rdxret; Total bytes of code: 14

Diffs

There a few regressions which are just PMI-artifacts, e.g. we inline the fallback here. but it shouldn't matter since the method is supposed to be inlined (AggressiveInlining).

  • a couple of r2r regressions - I investigated those and looks like they're "cancel inlining because BlockNonDeterministicIntrinsics said so"

@tannergooding

Copy link
Copy Markdown
Member

There's two libraries-pmi regressions that look interesting. I think in production they aren't actually hit for the cases highlighted because they are small methods that get inlined and the constant is propagated.

But, it showcases an issue where we aren't preserving it as a call for the non-constant case, so we end up expanding the jump table inline instead, this can lead to nasty code explosion in some cases and that is potentially concerning (particularly for T0 like code).

Comment threadsrc/coreclr/jit/hwintrinsic.cpp Outdated
Comment threadsrc/coreclr/jit/importercalls.cpp Outdated
Comment threadsrc/coreclr/jit/importercalls.cpp
Comment threadsrc/coreclr/jit/hwintrinsic.cpp Outdated
@Sergio0694

Copy link
Copy Markdown
Contributor

IMissYouGIF

Egor pls

@EgorBo

Copy link
Copy Markdown
MemberAuthor

@tannergooding PTAL again, your work to rewrite HWINTRINSIC as calls helped to remove the hacks I had in the previous version.

@tannergoodingtannergooding 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.

This looks a lot better now, thanks!

@Sergio0694

Copy link
Copy Markdown
Contributor

finished-elijah-wood

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 16, 2024
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.

Assertion failed '!"Unhandled must expand intrinsic, throwing PlatformNotSupportedException"' in Checked mode

3 participants

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

Fix 97272 - #99818

Merged
EgorBo merged 1 commit into
dotnet:mainfrom
EgorBo:fix-recursive-intrinsics
Jun 15, 2024
Merged

Fix 97272#99818
EgorBo merged 1 commit into
dotnet:mainfrom
EgorBo:fix-recursive-intrinsics

Conversation

@EgorBo

Copy link
Copy Markdown
Member

Fixes#97272

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Mar 15, 2024
@EgorBo

Copy link
Copy Markdown
MemberAuthor

@MihuBot

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@EgorBo
EgorBo marked this pull request as ready for review March 15, 2024 18:11
@Sergio0694

Copy link
Copy Markdown
Contributor

MrBeanWaitingGIF

@Sergio0694

Copy link
Copy Markdown
Contributor

Me checking this PR before going to bed:

SchooldaysGIF

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp list

@azure-pipelines

Copy link
Copy Markdown
CI/CD Pipelines for this repository:

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr outerloop, runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@Sergio0694

Copy link
Copy Markdown
Contributor

WaitingSpongebobGIF

@Sergio0694

Copy link
Copy Markdown
Contributor

CatLayingGIF

@EgorBo

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

@EgorBo

EgorBo commented May 22, 2024

Copy link
Copy Markdown
MemberAuthor

@tannergooding or anyone from @dotnet/jit-contrib could you take a look?
tl;dr: we currently detect must-expand intrinsics as "does this call invoke current root method" while it should be - "does this call invoke itself" regardless of who is the root - this led to problems with [Intrinsic] attribute on top of virtual methods in Type type. The interesting side-effect from this is that we now can inline must-expand SIMD intrsinsics which we give up due to non-constant args for IMM etc. It allows jit to fold the fallback if late phases detect a constant. Example:

Vector128<int>Foo(Vector128<int>v){bytemask=0b11110000;returnSse2.Shuffle(v,mask);}

Main:

; Method MyBench:Foomovrcx,rdxmovrdx,r8movr8d,240 tail.jmp[Sse2:Shuffle(Vector128`1[int],ubyte):Vector128`1[int]]; Total bytes of code: 18

PR:

; Method MyBench:Foo vpshufd xmm0, xmmword ptr [r8],-16vmovups xmmword ptr [rdx],xmm0movrax,rdxret; Total bytes of code: 14

Diffs

There a few regressions which are just PMI-artifacts, e.g. we inline the fallback here. but it shouldn't matter since the method is supposed to be inlined (AggressiveInlining).

  • a couple of r2r regressions - I investigated those and looks like they're "cancel inlining because BlockNonDeterministicIntrinsics said so"

@tannergooding

Copy link
Copy Markdown
Member

There's two libraries-pmi regressions that look interesting. I think in production they aren't actually hit for the cases highlighted because they are small methods that get inlined and the constant is propagated.

But, it showcases an issue where we aren't preserving it as a call for the non-constant case, so we end up expanding the jump table inline instead, this can lead to nasty code explosion in some cases and that is potentially concerning (particularly for T0 like code).

Comment threadsrc/coreclr/jit/hwintrinsic.cpp Outdated
Comment threadsrc/coreclr/jit/importercalls.cpp Outdated
Comment threadsrc/coreclr/jit/importercalls.cpp
Comment threadsrc/coreclr/jit/hwintrinsic.cpp Outdated
@Sergio0694

Copy link
Copy Markdown
Contributor

IMissYouGIF

Egor pls

@EgorBo

Copy link
Copy Markdown
MemberAuthor

@tannergooding PTAL again, your work to rewrite HWINTRINSIC as calls helped to remove the hacks I had in the previous version.

@tannergoodingtannergooding 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.

This looks a lot better now, thanks!

@Sergio0694

Copy link
Copy Markdown
Contributor

finished-elijah-wood

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 16, 2024
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.

Assertion failed '!"Unhandled must expand intrinsic, throwing PlatformNotSupportedException"' in Checked mode

3 participants

@EgorBo@Sergio0694@tannergooding