Skip to content

[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128 - #45020

Closed
echesakov wants to merge 18 commits into
dotnet:masterfrom
echesakov:Arm64-ASIMD-LoadPairVector64-LoadPairVector128
Closed

[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128#45020
echesakov wants to merge 18 commits into
dotnet:masterfrom
echesakov:Arm64-ASIMD-LoadPairVector64-LoadPairVector128

Conversation

@echesakov

Copy link
Copy Markdown
Contributor

This is combined work:

  1. based on Carol's changes in Support mulx returning ValueTuple #37928 (that originally were done as implementation of Bmi2 MultiplyNoFlags2) that adds support for hardware intrinsics returning their result in multiple registers and
  2. my changes that affect Arm64 side of the JIT and implement LoadPairVector64 and LoadPairVector128 ([Arm64] LoadPairVector64 and LoadPairVector128 #39243).

Background: Based on our discussion with Carol we decided to include her changes that enable support for hardware intrinsics multiple registers return value in #37928 minus Bmi2.MultiplyNoFlags2 related changes (this would require an approval of #44926 in an API review meeting) as a part of this PR.

Fixes:#39243

CarolEidtand others added 18 commits November 18, 2020 19:23
…gentree.cpp src/coreclr/src/jit/gentree.h src/coreclr/src/jit/lsra.cpp
…alues in multiple registers in src/coreclr/src/jit/lsra.h src/coreclr/src/jit/lsraarm64.cpp src/coreclr/src/jit/lsraxarch.cpp
… src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.tt
@echesakovechesakov added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Nov 20, 2020
@echesakovechesakov self-assigned this Nov 20, 2020
@Dotnet-GitSync-Bot

Copy link
Copy Markdown
Collaborator

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, to please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

#endif
}
}
else if (src->OperIsHWIntrinsic())

@echesakovechesakovNov 20, 2020

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.

@CarolEidt I think I need to implement a similar logic on Arm64 to avoid store-reload of returned SIMD values for ldp/ldnp as in the following example:

 2C404410 ldnp s16, s17,[x0] FD000FB0 str d16,[fp,#24] FD0013B1 str d17,[fp,#32] FD400FA8 ldr d8,[fp,#24] FD4013A9 ldr d9,[fp,#32]

Is it correct understanding?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, I believe that's correct. However, this path is only for the case where you wind up with a STORE_BLK, as opposed to a STORE_LCL_VAR. If the lhs is a multi-reg lclVar, you should have the latter.

@echesakovechesakov mentioned this pull request Nov 20, 2020
29 tasks
@ViktorHofer

Copy link
Copy Markdown
Member

// Auto-generated message

69e114c which was merged 12/7 removed the intermediate src/coreclr/src/ folder. This PR needs to be updated as it touches files in that directory which causes conflicts.

To update your commits you can use this bash script: https://gist.github.com/ViktorHofer/6d24f62abdcddb518b4966ead5ef3783. Feel free to use the comment section of the gist to improve the script for others.

@ghostghost closed this Jan 25, 2021
@ghost

Copy link
Copy Markdown

Draft Pull Request was automatically closed for inactivity. It can be manually reopened in the next 30 days if the work resumes.

@ghostghost locked as resolved and limited conversation to collaborators Feb 24, 2021
@echesakov
echesakov deleted the Arm64-ASIMD-LoadPairVector64-LoadPairVector128 branch April 16, 2021 23:54
This pull request was closed.
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 SuperPMInew-api-needs-documentation

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants

@echesakov@Dotnet-GitSync-Bot@ViktorHofer@CarolEidt@JulieLeeMSFT
, '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" + '
[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128 by echesakov · Pull Request #45020 · dotnet/runtime · GitHub
Skip to content

[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128 - #45020

Closed
echesakov wants to merge 18 commits into
dotnet:masterfrom
echesakov:Arm64-ASIMD-LoadPairVector64-LoadPairVector128
Closed

[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128#45020
echesakov wants to merge 18 commits into
dotnet:masterfrom
echesakov:Arm64-ASIMD-LoadPairVector64-LoadPairVector128

Conversation

@echesakov

Copy link
Copy Markdown
Contributor

This is combined work:

  1. based on Carol's changes in Support mulx returning ValueTuple #37928 (that originally were done as implementation of Bmi2 MultiplyNoFlags2) that adds support for hardware intrinsics returning their result in multiple registers and
  2. my changes that affect Arm64 side of the JIT and implement LoadPairVector64 and LoadPairVector128 ([Arm64] LoadPairVector64 and LoadPairVector128 #39243).

Background: Based on our discussion with Carol we decided to include her changes that enable support for hardware intrinsics multiple registers return value in #37928 minus Bmi2.MultiplyNoFlags2 related changes (this would require an approval of #44926 in an API review meeting) as a part of this PR.

Fixes:#39243

CarolEidtand others added 18 commits November 18, 2020 19:23
…gentree.cpp src/coreclr/src/jit/gentree.h src/coreclr/src/jit/lsra.cpp
…alues in multiple registers in src/coreclr/src/jit/lsra.h src/coreclr/src/jit/lsraarm64.cpp src/coreclr/src/jit/lsraxarch.cpp
… src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.tt
@echesakovechesakov added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Nov 20, 2020
@echesakovechesakov self-assigned this Nov 20, 2020
@Dotnet-GitSync-Bot

Copy link
Copy Markdown
Collaborator

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, to please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

#endif
}
}
else if (src->OperIsHWIntrinsic())

@echesakovechesakovNov 20, 2020

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.

@CarolEidt I think I need to implement a similar logic on Arm64 to avoid store-reload of returned SIMD values for ldp/ldnp as in the following example:

 2C404410 ldnp s16, s17,[x0] FD000FB0 str d16,[fp,#24] FD0013B1 str d17,[fp,#32] FD400FA8 ldr d8,[fp,#24] FD4013A9 ldr d9,[fp,#32]

Is it correct understanding?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, I believe that's correct. However, this path is only for the case where you wind up with a STORE_BLK, as opposed to a STORE_LCL_VAR. If the lhs is a multi-reg lclVar, you should have the latter.

@echesakovechesakov mentioned this pull request Nov 20, 2020
29 tasks
@ViktorHofer

Copy link
Copy Markdown
Member

// Auto-generated message

69e114c which was merged 12/7 removed the intermediate src/coreclr/src/ folder. This PR needs to be updated as it touches files in that directory which causes conflicts.

To update your commits you can use this bash script: https://gist.github.com/ViktorHofer/6d24f62abdcddb518b4966ead5ef3783. Feel free to use the comment section of the gist to improve the script for others.

@ghostghost closed this Jan 25, 2021
@ghost

Copy link
Copy Markdown

Draft Pull Request was automatically closed for inactivity. It can be manually reopened in the next 30 days if the work resumes.

@ghostghost locked as resolved and limited conversation to collaborators Feb 24, 2021
@echesakov
echesakov deleted the Arm64-ASIMD-LoadPairVector64-LoadPairVector128 branch April 16, 2021 23:54
This pull request was closed.
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 SuperPMInew-api-needs-documentation

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants

@echesakov@Dotnet-GitSync-Bot@ViktorHofer@CarolEidt@JulieLeeMSFT
, '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('^' + ".*" + ' [Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128 by echesakov · Pull Request #45020 · dotnet/runtime · GitHub
Skip to content

[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128 - #45020

Closed
echesakov wants to merge 18 commits into
dotnet:masterfrom
echesakov:Arm64-ASIMD-LoadPairVector64-LoadPairVector128
Closed

[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128#45020
echesakov wants to merge 18 commits into
dotnet:masterfrom
echesakov:Arm64-ASIMD-LoadPairVector64-LoadPairVector128

Conversation

@echesakov

Copy link
Copy Markdown
Contributor

This is combined work:

  1. based on Carol's changes in Support mulx returning ValueTuple #37928 (that originally were done as implementation of Bmi2 MultiplyNoFlags2) that adds support for hardware intrinsics returning their result in multiple registers and
  2. my changes that affect Arm64 side of the JIT and implement LoadPairVector64 and LoadPairVector128 ([Arm64] LoadPairVector64 and LoadPairVector128 #39243).

Background: Based on our discussion with Carol we decided to include her changes that enable support for hardware intrinsics multiple registers return value in #37928 minus Bmi2.MultiplyNoFlags2 related changes (this would require an approval of #44926 in an API review meeting) as a part of this PR.

Fixes:#39243

CarolEidtand others added 18 commits November 18, 2020 19:23
…gentree.cpp src/coreclr/src/jit/gentree.h src/coreclr/src/jit/lsra.cpp
…alues in multiple registers in src/coreclr/src/jit/lsra.h src/coreclr/src/jit/lsraarm64.cpp src/coreclr/src/jit/lsraxarch.cpp
… src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.tt
@echesakovechesakov added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Nov 20, 2020
@echesakovechesakov self-assigned this Nov 20, 2020
@Dotnet-GitSync-Bot

Copy link
Copy Markdown
Collaborator

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, to please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

#endif
}
}
else if (src->OperIsHWIntrinsic())

@echesakovechesakovNov 20, 2020

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.

@CarolEidt I think I need to implement a similar logic on Arm64 to avoid store-reload of returned SIMD values for ldp/ldnp as in the following example:

 2C404410 ldnp s16, s17,[x0] FD000FB0 str d16,[fp,#24] FD0013B1 str d17,[fp,#32] FD400FA8 ldr d8,[fp,#24] FD4013A9 ldr d9,[fp,#32]

Is it correct understanding?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, I believe that's correct. However, this path is only for the case where you wind up with a STORE_BLK, as opposed to a STORE_LCL_VAR. If the lhs is a multi-reg lclVar, you should have the latter.

@echesakovechesakov mentioned this pull request Nov 20, 2020
29 tasks
@ViktorHofer

Copy link
Copy Markdown
Member

// Auto-generated message

69e114c which was merged 12/7 removed the intermediate src/coreclr/src/ folder. This PR needs to be updated as it touches files in that directory which causes conflicts.

To update your commits you can use this bash script: https://gist.github.com/ViktorHofer/6d24f62abdcddb518b4966ead5ef3783. Feel free to use the comment section of the gist to improve the script for others.

@ghostghost closed this Jan 25, 2021
@ghost

Copy link
Copy Markdown

Draft Pull Request was automatically closed for inactivity. It can be manually reopened in the next 30 days if the work resumes.

@ghostghost locked as resolved and limited conversation to collaborators Feb 24, 2021
@echesakov
echesakov deleted the Arm64-ASIMD-LoadPairVector64-LoadPairVector128 branch April 16, 2021 23:54
This pull request was closed.
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 SuperPMInew-api-needs-documentation

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants

@echesakov@Dotnet-GitSync-Bot@ViktorHofer@CarolEidt@JulieLeeMSFT
, '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('^' + ".*" + ' [Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128 by echesakov · Pull Request #45020 · dotnet/runtime · GitHub
Skip to content

[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128 - #45020

Closed
echesakov wants to merge 18 commits into
dotnet:masterfrom
echesakov:Arm64-ASIMD-LoadPairVector64-LoadPairVector128
Closed

[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128#45020
echesakov wants to merge 18 commits into
dotnet:masterfrom
echesakov:Arm64-ASIMD-LoadPairVector64-LoadPairVector128

Conversation

@echesakov

Copy link
Copy Markdown
Contributor

This is combined work:

  1. based on Carol's changes in Support mulx returning ValueTuple #37928 (that originally were done as implementation of Bmi2 MultiplyNoFlags2) that adds support for hardware intrinsics returning their result in multiple registers and
  2. my changes that affect Arm64 side of the JIT and implement LoadPairVector64 and LoadPairVector128 ([Arm64] LoadPairVector64 and LoadPairVector128 #39243).

Background: Based on our discussion with Carol we decided to include her changes that enable support for hardware intrinsics multiple registers return value in #37928 minus Bmi2.MultiplyNoFlags2 related changes (this would require an approval of #44926 in an API review meeting) as a part of this PR.

Fixes:#39243

CarolEidtand others added 18 commits November 18, 2020 19:23
…gentree.cpp src/coreclr/src/jit/gentree.h src/coreclr/src/jit/lsra.cpp
…alues in multiple registers in src/coreclr/src/jit/lsra.h src/coreclr/src/jit/lsraarm64.cpp src/coreclr/src/jit/lsraxarch.cpp
… src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.tt
@echesakovechesakov added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Nov 20, 2020
@echesakovechesakov self-assigned this Nov 20, 2020
@Dotnet-GitSync-Bot

Copy link
Copy Markdown
Collaborator

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, to please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

#endif
}
}
else if (src->OperIsHWIntrinsic())

@echesakovechesakovNov 20, 2020

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.

@CarolEidt I think I need to implement a similar logic on Arm64 to avoid store-reload of returned SIMD values for ldp/ldnp as in the following example:

 2C404410 ldnp s16, s17,[x0] FD000FB0 str d16,[fp,#24] FD0013B1 str d17,[fp,#32] FD400FA8 ldr d8,[fp,#24] FD4013A9 ldr d9,[fp,#32]

Is it correct understanding?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, I believe that's correct. However, this path is only for the case where you wind up with a STORE_BLK, as opposed to a STORE_LCL_VAR. If the lhs is a multi-reg lclVar, you should have the latter.

@echesakovechesakov mentioned this pull request Nov 20, 2020
29 tasks
@ViktorHofer

Copy link
Copy Markdown
Member

// Auto-generated message

69e114c which was merged 12/7 removed the intermediate src/coreclr/src/ folder. This PR needs to be updated as it touches files in that directory which causes conflicts.

To update your commits you can use this bash script: https://gist.github.com/ViktorHofer/6d24f62abdcddb518b4966ead5ef3783. Feel free to use the comment section of the gist to improve the script for others.

@ghostghost closed this Jan 25, 2021
@ghost

Copy link
Copy Markdown

Draft Pull Request was automatically closed for inactivity. It can be manually reopened in the next 30 days if the work resumes.

@ghostghost locked as resolved and limited conversation to collaborators Feb 24, 2021
@echesakov
echesakov deleted the Arm64-ASIMD-LoadPairVector64-LoadPairVector128 branch April 16, 2021 23:54
This pull request was closed.
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 SuperPMInew-api-needs-documentation

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants

@echesakov@Dotnet-GitSync-Bot@ViktorHofer@CarolEidt@JulieLeeMSFT
, '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" + ' [Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128 by echesakov · Pull Request #45020 · dotnet/runtime · GitHub
Skip to content

[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128 - #45020

Closed
echesakov wants to merge 18 commits into
dotnet:masterfrom
echesakov:Arm64-ASIMD-LoadPairVector64-LoadPairVector128
Closed

[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128#45020
echesakov wants to merge 18 commits into
dotnet:masterfrom
echesakov:Arm64-ASIMD-LoadPairVector64-LoadPairVector128

Conversation

@echesakov

Copy link
Copy Markdown
Contributor

This is combined work:

  1. based on Carol's changes in Support mulx returning ValueTuple #37928 (that originally were done as implementation of Bmi2 MultiplyNoFlags2) that adds support for hardware intrinsics returning their result in multiple registers and
  2. my changes that affect Arm64 side of the JIT and implement LoadPairVector64 and LoadPairVector128 ([Arm64] LoadPairVector64 and LoadPairVector128 #39243).

Background: Based on our discussion with Carol we decided to include her changes that enable support for hardware intrinsics multiple registers return value in #37928 minus Bmi2.MultiplyNoFlags2 related changes (this would require an approval of #44926 in an API review meeting) as a part of this PR.

Fixes:#39243

CarolEidtand others added 18 commits November 18, 2020 19:23
…gentree.cpp src/coreclr/src/jit/gentree.h src/coreclr/src/jit/lsra.cpp
…alues in multiple registers in src/coreclr/src/jit/lsra.h src/coreclr/src/jit/lsraarm64.cpp src/coreclr/src/jit/lsraxarch.cpp
… src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.tt
@echesakovechesakov added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Nov 20, 2020
@echesakovechesakov self-assigned this Nov 20, 2020
@Dotnet-GitSync-Bot

Copy link
Copy Markdown
Collaborator

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, to please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

#endif
}
}
else if (src->OperIsHWIntrinsic())

@echesakovechesakovNov 20, 2020

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.

@CarolEidt I think I need to implement a similar logic on Arm64 to avoid store-reload of returned SIMD values for ldp/ldnp as in the following example:

 2C404410 ldnp s16, s17,[x0] FD000FB0 str d16,[fp,#24] FD0013B1 str d17,[fp,#32] FD400FA8 ldr d8,[fp,#24] FD4013A9 ldr d9,[fp,#32]

Is it correct understanding?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, I believe that's correct. However, this path is only for the case where you wind up with a STORE_BLK, as opposed to a STORE_LCL_VAR. If the lhs is a multi-reg lclVar, you should have the latter.

@echesakovechesakov mentioned this pull request Nov 20, 2020
29 tasks
@ViktorHofer

Copy link
Copy Markdown
Member

// Auto-generated message

69e114c which was merged 12/7 removed the intermediate src/coreclr/src/ folder. This PR needs to be updated as it touches files in that directory which causes conflicts.

To update your commits you can use this bash script: https://gist.github.com/ViktorHofer/6d24f62abdcddb518b4966ead5ef3783. Feel free to use the comment section of the gist to improve the script for others.

@ghostghost closed this Jan 25, 2021
@ghost

Copy link
Copy Markdown

Draft Pull Request was automatically closed for inactivity. It can be manually reopened in the next 30 days if the work resumes.

@ghostghost locked as resolved and limited conversation to collaborators Feb 24, 2021
@echesakov
echesakov deleted the Arm64-ASIMD-LoadPairVector64-LoadPairVector128 branch April 16, 2021 23:54
This pull request was closed.
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 SuperPMInew-api-needs-documentation

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants

@echesakov@Dotnet-GitSync-Bot@ViktorHofer@CarolEidt@JulieLeeMSFT
, '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('^' + ".*" + ' [Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128 by echesakov · Pull Request #45020 · dotnet/runtime · GitHub
Skip to content

[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128 - #45020

Closed
echesakov wants to merge 18 commits into
dotnet:masterfrom
echesakov:Arm64-ASIMD-LoadPairVector64-LoadPairVector128
Closed

[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128#45020
echesakov wants to merge 18 commits into
dotnet:masterfrom
echesakov:Arm64-ASIMD-LoadPairVector64-LoadPairVector128

Conversation

@echesakov

Copy link
Copy Markdown
Contributor

This is combined work:

  1. based on Carol's changes in Support mulx returning ValueTuple #37928 (that originally were done as implementation of Bmi2 MultiplyNoFlags2) that adds support for hardware intrinsics returning their result in multiple registers and
  2. my changes that affect Arm64 side of the JIT and implement LoadPairVector64 and LoadPairVector128 ([Arm64] LoadPairVector64 and LoadPairVector128 #39243).

Background: Based on our discussion with Carol we decided to include her changes that enable support for hardware intrinsics multiple registers return value in #37928 minus Bmi2.MultiplyNoFlags2 related changes (this would require an approval of #44926 in an API review meeting) as a part of this PR.

Fixes:#39243

CarolEidtand others added 18 commits November 18, 2020 19:23
…gentree.cpp src/coreclr/src/jit/gentree.h src/coreclr/src/jit/lsra.cpp
…alues in multiple registers in src/coreclr/src/jit/lsra.h src/coreclr/src/jit/lsraarm64.cpp src/coreclr/src/jit/lsraxarch.cpp
… src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.tt
@echesakovechesakov added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Nov 20, 2020
@echesakovechesakov self-assigned this Nov 20, 2020
@Dotnet-GitSync-Bot

Copy link
Copy Markdown
Collaborator

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, to please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

#endif
}
}
else if (src->OperIsHWIntrinsic())

@echesakovechesakovNov 20, 2020

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.

@CarolEidt I think I need to implement a similar logic on Arm64 to avoid store-reload of returned SIMD values for ldp/ldnp as in the following example:

 2C404410 ldnp s16, s17,[x0] FD000FB0 str d16,[fp,#24] FD0013B1 str d17,[fp,#32] FD400FA8 ldr d8,[fp,#24] FD4013A9 ldr d9,[fp,#32]

Is it correct understanding?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, I believe that's correct. However, this path is only for the case where you wind up with a STORE_BLK, as opposed to a STORE_LCL_VAR. If the lhs is a multi-reg lclVar, you should have the latter.

@echesakovechesakov mentioned this pull request Nov 20, 2020
29 tasks
@ViktorHofer

Copy link
Copy Markdown
Member

// Auto-generated message

69e114c which was merged 12/7 removed the intermediate src/coreclr/src/ folder. This PR needs to be updated as it touches files in that directory which causes conflicts.

To update your commits you can use this bash script: https://gist.github.com/ViktorHofer/6d24f62abdcddb518b4966ead5ef3783. Feel free to use the comment section of the gist to improve the script for others.

@ghostghost closed this Jan 25, 2021
@ghost

Copy link
Copy Markdown

Draft Pull Request was automatically closed for inactivity. It can be manually reopened in the next 30 days if the work resumes.

@ghostghost locked as resolved and limited conversation to collaborators Feb 24, 2021
@echesakov
echesakov deleted the Arm64-ASIMD-LoadPairVector64-LoadPairVector128 branch April 16, 2021 23:54
This pull request was closed.
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 SuperPMInew-api-needs-documentation

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants

@echesakov@Dotnet-GitSync-Bot@ViktorHofer@CarolEidt@JulieLeeMSFT
, '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('^' + ".*" + ' [Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128 by echesakov · Pull Request #45020 · dotnet/runtime · GitHub
Skip to content

[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128 - #45020

Closed
echesakov wants to merge 18 commits into
dotnet:masterfrom
echesakov:Arm64-ASIMD-LoadPairVector64-LoadPairVector128
Closed

[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128#45020
echesakov wants to merge 18 commits into
dotnet:masterfrom
echesakov:Arm64-ASIMD-LoadPairVector64-LoadPairVector128

Conversation

@echesakov

Copy link
Copy Markdown
Contributor

This is combined work:

  1. based on Carol's changes in Support mulx returning ValueTuple #37928 (that originally were done as implementation of Bmi2 MultiplyNoFlags2) that adds support for hardware intrinsics returning their result in multiple registers and
  2. my changes that affect Arm64 side of the JIT and implement LoadPairVector64 and LoadPairVector128 ([Arm64] LoadPairVector64 and LoadPairVector128 #39243).

Background: Based on our discussion with Carol we decided to include her changes that enable support for hardware intrinsics multiple registers return value in #37928 minus Bmi2.MultiplyNoFlags2 related changes (this would require an approval of #44926 in an API review meeting) as a part of this PR.

Fixes:#39243

CarolEidtand others added 18 commits November 18, 2020 19:23
…gentree.cpp src/coreclr/src/jit/gentree.h src/coreclr/src/jit/lsra.cpp
…alues in multiple registers in src/coreclr/src/jit/lsra.h src/coreclr/src/jit/lsraarm64.cpp src/coreclr/src/jit/lsraxarch.cpp
… src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.tt
@echesakovechesakov added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Nov 20, 2020
@echesakovechesakov self-assigned this Nov 20, 2020
@Dotnet-GitSync-Bot

Copy link
Copy Markdown
Collaborator

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, to please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

#endif
}
}
else if (src->OperIsHWIntrinsic())

@echesakovechesakovNov 20, 2020

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.

@CarolEidt I think I need to implement a similar logic on Arm64 to avoid store-reload of returned SIMD values for ldp/ldnp as in the following example:

 2C404410 ldnp s16, s17,[x0] FD000FB0 str d16,[fp,#24] FD0013B1 str d17,[fp,#32] FD400FA8 ldr d8,[fp,#24] FD4013A9 ldr d9,[fp,#32]

Is it correct understanding?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, I believe that's correct. However, this path is only for the case where you wind up with a STORE_BLK, as opposed to a STORE_LCL_VAR. If the lhs is a multi-reg lclVar, you should have the latter.

@echesakovechesakov mentioned this pull request Nov 20, 2020
29 tasks
@ViktorHofer

Copy link
Copy Markdown
Member

// Auto-generated message

69e114c which was merged 12/7 removed the intermediate src/coreclr/src/ folder. This PR needs to be updated as it touches files in that directory which causes conflicts.

To update your commits you can use this bash script: https://gist.github.com/ViktorHofer/6d24f62abdcddb518b4966ead5ef3783. Feel free to use the comment section of the gist to improve the script for others.

@ghostghost closed this Jan 25, 2021
@ghost

Copy link
Copy Markdown

Draft Pull Request was automatically closed for inactivity. It can be manually reopened in the next 30 days if the work resumes.

@ghostghost locked as resolved and limited conversation to collaborators Feb 24, 2021
@echesakov
echesakov deleted the Arm64-ASIMD-LoadPairVector64-LoadPairVector128 branch April 16, 2021 23:54
This pull request was closed.
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 SuperPMInew-api-needs-documentation

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants

@echesakov@Dotnet-GitSync-Bot@ViktorHofer@CarolEidt@JulieLeeMSFT
, '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); } })(); })(); [Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128 by echesakov · Pull Request #45020 · dotnet/runtime · GitHub
Skip to content

[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128 - #45020

Closed
echesakov wants to merge 18 commits into
dotnet:masterfrom
echesakov:Arm64-ASIMD-LoadPairVector64-LoadPairVector128
Closed

[Arm64] AdvSIMD LoadPairVector64 and LoadPairVector128#45020
echesakov wants to merge 18 commits into
dotnet:masterfrom
echesakov:Arm64-ASIMD-LoadPairVector64-LoadPairVector128

Conversation

@echesakov

Copy link
Copy Markdown
Contributor

This is combined work:

  1. based on Carol's changes in Support mulx returning ValueTuple #37928 (that originally were done as implementation of Bmi2 MultiplyNoFlags2) that adds support for hardware intrinsics returning their result in multiple registers and
  2. my changes that affect Arm64 side of the JIT and implement LoadPairVector64 and LoadPairVector128 ([Arm64] LoadPairVector64 and LoadPairVector128 #39243).

Background: Based on our discussion with Carol we decided to include her changes that enable support for hardware intrinsics multiple registers return value in #37928 minus Bmi2.MultiplyNoFlags2 related changes (this would require an approval of #44926 in an API review meeting) as a part of this PR.

Fixes:#39243

CarolEidtand others added 18 commits November 18, 2020 19:23
…gentree.cpp src/coreclr/src/jit/gentree.h src/coreclr/src/jit/lsra.cpp
…alues in multiple registers in src/coreclr/src/jit/lsra.h src/coreclr/src/jit/lsraarm64.cpp src/coreclr/src/jit/lsraxarch.cpp
… src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.tt
@echesakovechesakov added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Nov 20, 2020
@echesakovechesakov self-assigned this Nov 20, 2020
@Dotnet-GitSync-Bot

Copy link
Copy Markdown
Collaborator

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, to please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

#endif
}
}
else if (src->OperIsHWIntrinsic())

@echesakovechesakovNov 20, 2020

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.

@CarolEidt I think I need to implement a similar logic on Arm64 to avoid store-reload of returned SIMD values for ldp/ldnp as in the following example:

 2C404410 ldnp s16, s17,[x0] FD000FB0 str d16,[fp,#24] FD0013B1 str d17,[fp,#32] FD400FA8 ldr d8,[fp,#24] FD4013A9 ldr d9,[fp,#32]

Is it correct understanding?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, I believe that's correct. However, this path is only for the case where you wind up with a STORE_BLK, as opposed to a STORE_LCL_VAR. If the lhs is a multi-reg lclVar, you should have the latter.

@echesakovechesakov mentioned this pull request Nov 20, 2020
29 tasks
@ViktorHofer

Copy link
Copy Markdown
Member

// Auto-generated message

69e114c which was merged 12/7 removed the intermediate src/coreclr/src/ folder. This PR needs to be updated as it touches files in that directory which causes conflicts.

To update your commits you can use this bash script: https://gist.github.com/ViktorHofer/6d24f62abdcddb518b4966ead5ef3783. Feel free to use the comment section of the gist to improve the script for others.

@ghostghost closed this Jan 25, 2021
@ghost

Copy link
Copy Markdown

Draft Pull Request was automatically closed for inactivity. It can be manually reopened in the next 30 days if the work resumes.

@ghostghost locked as resolved and limited conversation to collaborators Feb 24, 2021
@echesakov
echesakov deleted the Arm64-ASIMD-LoadPairVector64-LoadPairVector128 branch April 16, 2021 23:54
This pull request was closed.
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 SuperPMInew-api-needs-documentation

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants

@echesakov@Dotnet-GitSync-Bot@ViktorHofer@CarolEidt@JulieLeeMSFT