Move dead code removal in lower after last updategraph - #69421

Merged
kunalspathak merged 2 commits into
dotnet:mainfrom
kunalspathak:removeblocks_lower
May 21, 2022
Merged

Move dead code removal in lower after last updategraph#69421
kunalspathak merged 2 commits into
dotnet:mainfrom
kunalspathak:removeblocks_lower

Conversation

@kunalspathak

Copy link
Copy Markdown
Contributor

We perform "dead code removal" pass just before "gc poll insertion", but we should do it just after the last updateFlowGraph() happens which is inside lower. This PR moves the phase into lower eliminating some other dead blocks that were left behind because of which LSRA adds resolution moves in them.

image

See #69041 (comment) and #69041 (comment) for details.

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label May 17, 2022
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @JulieLeeMSFT
See info in area-owners.md if you want to be subscribed.

Issue Details

We perform "dead code removal" pass just before "gc poll insertion", but we should do it just after the last updateFlowGraph() happens which is inside lower. This PR moves the phase into lower eliminating some other dead blocks that were left behind because of which LSRA adds resolution moves in them.

image

See #69041 (comment) and #69041 (comment) for details.

Author:kunalspathak
Assignees:kunalspathak
Labels:

area-CodeGen-coreclr

Milestone:-

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

There are few regressions in minopts because earlier we would always do dead code removal, but with this change, we would do it only if optimizing.

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib , @AndyAyersMS - any thoughts?

@kunalspathak
kunalspathak marked this pull request as ready for review May 17, 2022 17:41
@Wraith2

Copy link
Copy Markdown
Contributor

There are few regressions in minopts because earlier we would always do dead code removal, but with this change, we would do it only if optimizing.

Is there any reason it shouldn't done be in minopts as well?

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

Is there any reason it shouldn't done be in minopts as well?

Not really. I think I should do it regardless, just like we do today.

@Wraith2

Copy link
Copy Markdown
Contributor

I agree. I don't see removing dead code as an optimization.

{
comp->optLoopsMarked = false;
bool modified = comp->fgUpdateFlowGraph();
modified |= comp->fgRemoveDeadBlocks();

@jakobbotschjakobbotschMay 17, 2022

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.

If fgUpdateFlowGraph returned false, do we need to run this?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yes. This should be run regardless (as we do today). I want to do it after update flow graph because it might make more blocks eligible for removing.

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.

Makes sense.

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib - can someone sign off so we can unblock the verification of #69041 (comment)?

@kunalspathak
kunalspathak merged commit c190f6b into dotnet:mainMay 21, 2022
@kunalspathak
kunalspathak deleted the removeblocks_lower branch May 21, 2022 15:14
@AndyAyersMS

AndyAyersMS commented May 27, 2022

Copy link
Copy Markdown
Member

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.

4 participants

@kunalspathak@Wraith2@AndyAyersMS@jakobbotsch
, '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" + '
Skip to content

Move dead code removal in lower after last updategraph - #69421

Merged
kunalspathak merged 2 commits into
dotnet:mainfrom
kunalspathak:removeblocks_lower
May 21, 2022
Merged

Move dead code removal in lower after last updategraph#69421
kunalspathak merged 2 commits into
dotnet:mainfrom
kunalspathak:removeblocks_lower

Conversation

@kunalspathak

Copy link
Copy Markdown
Contributor

We perform "dead code removal" pass just before "gc poll insertion", but we should do it just after the last updateFlowGraph() happens which is inside lower. This PR moves the phase into lower eliminating some other dead blocks that were left behind because of which LSRA adds resolution moves in them.

image

See #69041 (comment) and #69041 (comment) for details.

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label May 17, 2022
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @JulieLeeMSFT
See info in area-owners.md if you want to be subscribed.

Issue Details

We perform "dead code removal" pass just before "gc poll insertion", but we should do it just after the last updateFlowGraph() happens which is inside lower. This PR moves the phase into lower eliminating some other dead blocks that were left behind because of which LSRA adds resolution moves in them.

image

See #69041 (comment) and #69041 (comment) for details.

Author:kunalspathak
Assignees:kunalspathak
Labels:

area-CodeGen-coreclr

Milestone:-

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

There are few regressions in minopts because earlier we would always do dead code removal, but with this change, we would do it only if optimizing.

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib , @AndyAyersMS - any thoughts?

@kunalspathak
kunalspathak marked this pull request as ready for review May 17, 2022 17:41
@Wraith2

Copy link
Copy Markdown
Contributor

There are few regressions in minopts because earlier we would always do dead code removal, but with this change, we would do it only if optimizing.

Is there any reason it shouldn't done be in minopts as well?

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

Is there any reason it shouldn't done be in minopts as well?

Not really. I think I should do it regardless, just like we do today.

@Wraith2

Copy link
Copy Markdown
Contributor

I agree. I don't see removing dead code as an optimization.

{
comp->optLoopsMarked = false;
bool modified = comp->fgUpdateFlowGraph();
modified |= comp->fgRemoveDeadBlocks();

@jakobbotschjakobbotschMay 17, 2022

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.

If fgUpdateFlowGraph returned false, do we need to run this?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yes. This should be run regardless (as we do today). I want to do it after update flow graph because it might make more blocks eligible for removing.

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.

Makes sense.

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib - can someone sign off so we can unblock the verification of #69041 (comment)?

@kunalspathak
kunalspathak merged commit c190f6b into dotnet:mainMay 21, 2022
@kunalspathak
kunalspathak deleted the removeblocks_lower branch May 21, 2022 15:14
@AndyAyersMS

AndyAyersMS commented May 27, 2022

Copy link
Copy Markdown
Member

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.

4 participants

@kunalspathak@Wraith2@AndyAyersMS@jakobbotsch
, '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('^' + ".*" + '
Skip to content

Move dead code removal in lower after last updategraph - #69421

Merged
kunalspathak merged 2 commits into
dotnet:mainfrom
kunalspathak:removeblocks_lower
May 21, 2022
Merged

Move dead code removal in lower after last updategraph#69421
kunalspathak merged 2 commits into
dotnet:mainfrom
kunalspathak:removeblocks_lower

Conversation

@kunalspathak

Copy link
Copy Markdown
Contributor

We perform "dead code removal" pass just before "gc poll insertion", but we should do it just after the last updateFlowGraph() happens which is inside lower. This PR moves the phase into lower eliminating some other dead blocks that were left behind because of which LSRA adds resolution moves in them.

image

See #69041 (comment) and #69041 (comment) for details.

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label May 17, 2022
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @JulieLeeMSFT
See info in area-owners.md if you want to be subscribed.

Issue Details

We perform "dead code removal" pass just before "gc poll insertion", but we should do it just after the last updateFlowGraph() happens which is inside lower. This PR moves the phase into lower eliminating some other dead blocks that were left behind because of which LSRA adds resolution moves in them.

image

See #69041 (comment) and #69041 (comment) for details.

Author:kunalspathak
Assignees:kunalspathak
Labels:

area-CodeGen-coreclr

Milestone:-

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

There are few regressions in minopts because earlier we would always do dead code removal, but with this change, we would do it only if optimizing.

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib , @AndyAyersMS - any thoughts?

@kunalspathak
kunalspathak marked this pull request as ready for review May 17, 2022 17:41
@Wraith2

Copy link
Copy Markdown
Contributor

There are few regressions in minopts because earlier we would always do dead code removal, but with this change, we would do it only if optimizing.

Is there any reason it shouldn't done be in minopts as well?

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

Is there any reason it shouldn't done be in minopts as well?

Not really. I think I should do it regardless, just like we do today.

@Wraith2

Copy link
Copy Markdown
Contributor

I agree. I don't see removing dead code as an optimization.

{
comp->optLoopsMarked = false;
bool modified = comp->fgUpdateFlowGraph();
modified |= comp->fgRemoveDeadBlocks();

@jakobbotschjakobbotschMay 17, 2022

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.

If fgUpdateFlowGraph returned false, do we need to run this?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yes. This should be run regardless (as we do today). I want to do it after update flow graph because it might make more blocks eligible for removing.

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.

Makes sense.

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib - can someone sign off so we can unblock the verification of #69041 (comment)?

@kunalspathak
kunalspathak merged commit c190f6b into dotnet:mainMay 21, 2022
@kunalspathak
kunalspathak deleted the removeblocks_lower branch May 21, 2022 15:14
@AndyAyersMS

AndyAyersMS commented May 27, 2022

Copy link
Copy Markdown
Member

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.

4 participants

@kunalspathak@Wraith2@AndyAyersMS@jakobbotsch
, '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('^' + ".*" + '
Skip to content

Move dead code removal in lower after last updategraph - #69421

Merged
kunalspathak merged 2 commits into
dotnet:mainfrom
kunalspathak:removeblocks_lower
May 21, 2022
Merged

Move dead code removal in lower after last updategraph#69421
kunalspathak merged 2 commits into
dotnet:mainfrom
kunalspathak:removeblocks_lower

Conversation

@kunalspathak

Copy link
Copy Markdown
Contributor

We perform "dead code removal" pass just before "gc poll insertion", but we should do it just after the last updateFlowGraph() happens which is inside lower. This PR moves the phase into lower eliminating some other dead blocks that were left behind because of which LSRA adds resolution moves in them.

image

See #69041 (comment) and #69041 (comment) for details.

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label May 17, 2022
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @JulieLeeMSFT
See info in area-owners.md if you want to be subscribed.

Issue Details

We perform "dead code removal" pass just before "gc poll insertion", but we should do it just after the last updateFlowGraph() happens which is inside lower. This PR moves the phase into lower eliminating some other dead blocks that were left behind because of which LSRA adds resolution moves in them.

image

See #69041 (comment) and #69041 (comment) for details.

Author:kunalspathak
Assignees:kunalspathak
Labels:

area-CodeGen-coreclr

Milestone:-

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

There are few regressions in minopts because earlier we would always do dead code removal, but with this change, we would do it only if optimizing.

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib , @AndyAyersMS - any thoughts?

@kunalspathak
kunalspathak marked this pull request as ready for review May 17, 2022 17:41
@Wraith2

Copy link
Copy Markdown
Contributor

There are few regressions in minopts because earlier we would always do dead code removal, but with this change, we would do it only if optimizing.

Is there any reason it shouldn't done be in minopts as well?

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

Is there any reason it shouldn't done be in minopts as well?

Not really. I think I should do it regardless, just like we do today.

@Wraith2

Copy link
Copy Markdown
Contributor

I agree. I don't see removing dead code as an optimization.

{
comp->optLoopsMarked = false;
bool modified = comp->fgUpdateFlowGraph();
modified |= comp->fgRemoveDeadBlocks();

@jakobbotschjakobbotschMay 17, 2022

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.

If fgUpdateFlowGraph returned false, do we need to run this?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yes. This should be run regardless (as we do today). I want to do it after update flow graph because it might make more blocks eligible for removing.

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.

Makes sense.

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib - can someone sign off so we can unblock the verification of #69041 (comment)?

@kunalspathak
kunalspathak merged commit c190f6b into dotnet:mainMay 21, 2022
@kunalspathak
kunalspathak deleted the removeblocks_lower branch May 21, 2022 15:14
@AndyAyersMS

AndyAyersMS commented May 27, 2022

Copy link
Copy Markdown
Member

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.

4 participants

@kunalspathak@Wraith2@AndyAyersMS@jakobbotsch
, '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" + '
Skip to content

Move dead code removal in lower after last updategraph - #69421

Merged
kunalspathak merged 2 commits into
dotnet:mainfrom
kunalspathak:removeblocks_lower
May 21, 2022
Merged

Move dead code removal in lower after last updategraph#69421
kunalspathak merged 2 commits into
dotnet:mainfrom
kunalspathak:removeblocks_lower

Conversation

@kunalspathak

Copy link
Copy Markdown
Contributor

We perform "dead code removal" pass just before "gc poll insertion", but we should do it just after the last updateFlowGraph() happens which is inside lower. This PR moves the phase into lower eliminating some other dead blocks that were left behind because of which LSRA adds resolution moves in them.

image

See #69041 (comment) and #69041 (comment) for details.

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label May 17, 2022
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @JulieLeeMSFT
See info in area-owners.md if you want to be subscribed.

Issue Details

We perform "dead code removal" pass just before "gc poll insertion", but we should do it just after the last updateFlowGraph() happens which is inside lower. This PR moves the phase into lower eliminating some other dead blocks that were left behind because of which LSRA adds resolution moves in them.

image

See #69041 (comment) and #69041 (comment) for details.

Author:kunalspathak
Assignees:kunalspathak
Labels:

area-CodeGen-coreclr

Milestone:-

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

There are few regressions in minopts because earlier we would always do dead code removal, but with this change, we would do it only if optimizing.

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib , @AndyAyersMS - any thoughts?

@kunalspathak
kunalspathak marked this pull request as ready for review May 17, 2022 17:41
@Wraith2

Copy link
Copy Markdown
Contributor

There are few regressions in minopts because earlier we would always do dead code removal, but with this change, we would do it only if optimizing.

Is there any reason it shouldn't done be in minopts as well?

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

Is there any reason it shouldn't done be in minopts as well?

Not really. I think I should do it regardless, just like we do today.

@Wraith2

Copy link
Copy Markdown
Contributor

I agree. I don't see removing dead code as an optimization.

{
comp->optLoopsMarked = false;
bool modified = comp->fgUpdateFlowGraph();
modified |= comp->fgRemoveDeadBlocks();

@jakobbotschjakobbotschMay 17, 2022

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.

If fgUpdateFlowGraph returned false, do we need to run this?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yes. This should be run regardless (as we do today). I want to do it after update flow graph because it might make more blocks eligible for removing.

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.

Makes sense.

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib - can someone sign off so we can unblock the verification of #69041 (comment)?

@kunalspathak
kunalspathak merged commit c190f6b into dotnet:mainMay 21, 2022
@kunalspathak
kunalspathak deleted the removeblocks_lower branch May 21, 2022 15:14
@AndyAyersMS

AndyAyersMS commented May 27, 2022

Copy link
Copy Markdown
Member

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.

4 participants

@kunalspathak@Wraith2@AndyAyersMS@jakobbotsch
, '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('^' + ".*" + '
Skip to content

Move dead code removal in lower after last updategraph - #69421

Merged
kunalspathak merged 2 commits into
dotnet:mainfrom
kunalspathak:removeblocks_lower
May 21, 2022
Merged

Move dead code removal in lower after last updategraph#69421
kunalspathak merged 2 commits into
dotnet:mainfrom
kunalspathak:removeblocks_lower

Conversation

@kunalspathak

Copy link
Copy Markdown
Contributor

We perform "dead code removal" pass just before "gc poll insertion", but we should do it just after the last updateFlowGraph() happens which is inside lower. This PR moves the phase into lower eliminating some other dead blocks that were left behind because of which LSRA adds resolution moves in them.

image

See #69041 (comment) and #69041 (comment) for details.

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label May 17, 2022
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @JulieLeeMSFT
See info in area-owners.md if you want to be subscribed.

Issue Details

We perform "dead code removal" pass just before "gc poll insertion", but we should do it just after the last updateFlowGraph() happens which is inside lower. This PR moves the phase into lower eliminating some other dead blocks that were left behind because of which LSRA adds resolution moves in them.

image

See #69041 (comment) and #69041 (comment) for details.

Author:kunalspathak
Assignees:kunalspathak
Labels:

area-CodeGen-coreclr

Milestone:-

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

There are few regressions in minopts because earlier we would always do dead code removal, but with this change, we would do it only if optimizing.

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib , @AndyAyersMS - any thoughts?

@kunalspathak
kunalspathak marked this pull request as ready for review May 17, 2022 17:41
@Wraith2

Copy link
Copy Markdown
Contributor

There are few regressions in minopts because earlier we would always do dead code removal, but with this change, we would do it only if optimizing.

Is there any reason it shouldn't done be in minopts as well?

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

Is there any reason it shouldn't done be in minopts as well?

Not really. I think I should do it regardless, just like we do today.

@Wraith2

Copy link
Copy Markdown
Contributor

I agree. I don't see removing dead code as an optimization.

{
comp->optLoopsMarked = false;
bool modified = comp->fgUpdateFlowGraph();
modified |= comp->fgRemoveDeadBlocks();

@jakobbotschjakobbotschMay 17, 2022

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.

If fgUpdateFlowGraph returned false, do we need to run this?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yes. This should be run regardless (as we do today). I want to do it after update flow graph because it might make more blocks eligible for removing.

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.

Makes sense.

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib - can someone sign off so we can unblock the verification of #69041 (comment)?

@kunalspathak
kunalspathak merged commit c190f6b into dotnet:mainMay 21, 2022
@kunalspathak
kunalspathak deleted the removeblocks_lower branch May 21, 2022 15:14
@AndyAyersMS

AndyAyersMS commented May 27, 2022

Copy link
Copy Markdown
Member

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.

4 participants

@kunalspathak@Wraith2@AndyAyersMS@jakobbotsch
, '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('^' + ".*" + '
Skip to content

Move dead code removal in lower after last updategraph - #69421

Merged
kunalspathak merged 2 commits into
dotnet:mainfrom
kunalspathak:removeblocks_lower
May 21, 2022
Merged

Move dead code removal in lower after last updategraph#69421
kunalspathak merged 2 commits into
dotnet:mainfrom
kunalspathak:removeblocks_lower

Conversation

@kunalspathak

Copy link
Copy Markdown
Contributor

We perform "dead code removal" pass just before "gc poll insertion", but we should do it just after the last updateFlowGraph() happens which is inside lower. This PR moves the phase into lower eliminating some other dead blocks that were left behind because of which LSRA adds resolution moves in them.

image

See #69041 (comment) and #69041 (comment) for details.

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label May 17, 2022
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @JulieLeeMSFT
See info in area-owners.md if you want to be subscribed.

Issue Details

We perform "dead code removal" pass just before "gc poll insertion", but we should do it just after the last updateFlowGraph() happens which is inside lower. This PR moves the phase into lower eliminating some other dead blocks that were left behind because of which LSRA adds resolution moves in them.

image

See #69041 (comment) and #69041 (comment) for details.

Author:kunalspathak
Assignees:kunalspathak
Labels:

area-CodeGen-coreclr

Milestone:-

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

There are few regressions in minopts because earlier we would always do dead code removal, but with this change, we would do it only if optimizing.

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib , @AndyAyersMS - any thoughts?

@kunalspathak
kunalspathak marked this pull request as ready for review May 17, 2022 17:41
@Wraith2

Copy link
Copy Markdown
Contributor

There are few regressions in minopts because earlier we would always do dead code removal, but with this change, we would do it only if optimizing.

Is there any reason it shouldn't done be in minopts as well?

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

Is there any reason it shouldn't done be in minopts as well?

Not really. I think I should do it regardless, just like we do today.

@Wraith2

Copy link
Copy Markdown
Contributor

I agree. I don't see removing dead code as an optimization.

{
comp->optLoopsMarked = false;
bool modified = comp->fgUpdateFlowGraph();
modified |= comp->fgRemoveDeadBlocks();

@jakobbotschjakobbotschMay 17, 2022

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.

If fgUpdateFlowGraph returned false, do we need to run this?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yes. This should be run regardless (as we do today). I want to do it after update flow graph because it might make more blocks eligible for removing.

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.

Makes sense.

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib - can someone sign off so we can unblock the verification of #69041 (comment)?

@kunalspathak
kunalspathak merged commit c190f6b into dotnet:mainMay 21, 2022
@kunalspathak
kunalspathak deleted the removeblocks_lower branch May 21, 2022 15:14
@AndyAyersMS

AndyAyersMS commented May 27, 2022

Copy link
Copy Markdown
Member

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.

4 participants

@kunalspathak@Wraith2@AndyAyersMS@jakobbotsch
, '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); } })(); })();
Skip to content

Move dead code removal in lower after last updategraph - #69421

Merged
kunalspathak merged 2 commits into
dotnet:mainfrom
kunalspathak:removeblocks_lower
May 21, 2022
Merged

Move dead code removal in lower after last updategraph#69421
kunalspathak merged 2 commits into
dotnet:mainfrom
kunalspathak:removeblocks_lower

Conversation

@kunalspathak

Copy link
Copy Markdown
Contributor

We perform "dead code removal" pass just before "gc poll insertion", but we should do it just after the last updateFlowGraph() happens which is inside lower. This PR moves the phase into lower eliminating some other dead blocks that were left behind because of which LSRA adds resolution moves in them.

image

See #69041 (comment) and #69041 (comment) for details.

@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label May 17, 2022
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @JulieLeeMSFT
See info in area-owners.md if you want to be subscribed.

Issue Details

We perform "dead code removal" pass just before "gc poll insertion", but we should do it just after the last updateFlowGraph() happens which is inside lower. This PR moves the phase into lower eliminating some other dead blocks that were left behind because of which LSRA adds resolution moves in them.

image

See #69041 (comment) and #69041 (comment) for details.

Author:kunalspathak
Assignees:kunalspathak
Labels:

area-CodeGen-coreclr

Milestone:-

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

There are few regressions in minopts because earlier we would always do dead code removal, but with this change, we would do it only if optimizing.

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib , @AndyAyersMS - any thoughts?

@kunalspathak
kunalspathak marked this pull request as ready for review May 17, 2022 17:41
@Wraith2

Copy link
Copy Markdown
Contributor

There are few regressions in minopts because earlier we would always do dead code removal, but with this change, we would do it only if optimizing.

Is there any reason it shouldn't done be in minopts as well?

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

Is there any reason it shouldn't done be in minopts as well?

Not really. I think I should do it regardless, just like we do today.

@Wraith2

Copy link
Copy Markdown
Contributor

I agree. I don't see removing dead code as an optimization.

{
comp->optLoopsMarked = false;
bool modified = comp->fgUpdateFlowGraph();
modified |= comp->fgRemoveDeadBlocks();

@jakobbotschjakobbotschMay 17, 2022

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.

If fgUpdateFlowGraph returned false, do we need to run this?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yes. This should be run regardless (as we do today). I want to do it after update flow graph because it might make more blocks eligible for removing.

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.

Makes sense.

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib - can someone sign off so we can unblock the verification of #69041 (comment)?

@kunalspathak
kunalspathak merged commit c190f6b into dotnet:mainMay 21, 2022
@kunalspathak
kunalspathak deleted the removeblocks_lower branch May 21, 2022 15:14
@AndyAyersMS

AndyAyersMS commented May 27, 2022

Copy link
Copy Markdown
Member

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.

4 participants

@kunalspathak@Wraith2@AndyAyersMS@jakobbotsch