Skip to content

Arm64: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset - #91741

Merged
kunalspathak merged 5 commits into
dotnet:mainfrom
kunalspathak:LS_2B
Sep 14, 2023
Merged

Arm64: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset#91741
kunalspathak merged 5 commits into
dotnet:mainfrom
kunalspathak:LS_2B

Conversation

@kunalspathak

Copy link
Copy Markdown
Contributor

Pass the correct size of instruction to determine if the immediate will fit in the instruction or not.

Fixes: #68536

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

ghost commented Sep 7, 2023

Copy link
Copy Markdown

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

Issue Details

Pass the correct size of instruction to determine if the immediate will fit in the instruction or not.

Fixes: #68536

Author:kunalspathak
Assignees:kunalspathak
Labels:

area-CodeGen-coreclr

Milestone:-

@kunalspathak
kunalspathak marked this pull request as ready for review September 8, 2023 13:56
@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib

case INS_ldrsh:
case INS_ldrsw:
case INS_ldrb:
immFitsInIns = emitter::emitIns_valid_imm_for_ldst_offset(imm, EA_1BYTE);

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.

Why is size not already EA_1BYTE in this case?

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.

It is passed by the caller genEnregisterOSRArgsAndLocals() using emitActualTypeSize(lclTyp), which for TYP_BYTE returns EA_4BYTE.

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.

It seems like the bug is in genEnregisterOSRArgsAndLocals() -- it appears lclTyp is TYP_BYTE so it is asking for a ldrb but it passes the actual size (4) instead of size 1. It looks like lclTyp can only be small for OSR local struct fields. Maybe it should use const emitAttr size = emitTypeSize(lclTyp); instead of using emitActualTypeSize()? @AndyAyersMS ?

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.

Yes, I think we should be using emitTypeSize in genEnregisterOSRArgsAndLocals.

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.

It looks like lclTyp can only be small for OSR local struct fields.

Why is the reasoning behind it?

emitTypeSize

I never understood the difference between emitTypeSize and emitActualTypeSize(). In which scenarios should we use one over other?

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.

Turns out that for emit_R_R_I() format, if we are sign extending, we expect the size to be valid general size i.e. 4 bytes or 8 bytes, so changing to emitTypeSize() hits an assert. I will follow up offline with @BruceForstall .

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@BruceForstall PTAL.

@kunalspathak
kunalspathak merged commit 10f0277 into dotnet:mainSep 14, 2023
@kunalspathak
kunalspathak deleted the LS_2B branch September 14, 2023 03:34
@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

/backport to release/8.0

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/8.0: https://github.com/dotnet/runtime/actions/runs/6180624899

@ghostghost locked as resolved and limited conversation to collaborators Oct 14, 2023
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 '!"Instruction cannot be encoded: IF_LS_2B"' during 'Generate code'

3 participants

@kunalspathak@AndyAyersMS@BruceForstall
, '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: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset by kunalspathak · Pull Request #91741 · dotnet/runtime · GitHub
Skip to content

Arm64: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset - #91741

Merged
kunalspathak merged 5 commits into
dotnet:mainfrom
kunalspathak:LS_2B
Sep 14, 2023
Merged

Arm64: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset#91741
kunalspathak merged 5 commits into
dotnet:mainfrom
kunalspathak:LS_2B

Conversation

@kunalspathak

Copy link
Copy Markdown
Contributor

Pass the correct size of instruction to determine if the immediate will fit in the instruction or not.

Fixes: #68536

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

ghost commented Sep 7, 2023

Copy link
Copy Markdown

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

Issue Details

Pass the correct size of instruction to determine if the immediate will fit in the instruction or not.

Fixes: #68536

Author:kunalspathak
Assignees:kunalspathak
Labels:

area-CodeGen-coreclr

Milestone:-

@kunalspathak
kunalspathak marked this pull request as ready for review September 8, 2023 13:56
@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib

case INS_ldrsh:
case INS_ldrsw:
case INS_ldrb:
immFitsInIns = emitter::emitIns_valid_imm_for_ldst_offset(imm, EA_1BYTE);

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.

Why is size not already EA_1BYTE in this case?

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.

It is passed by the caller genEnregisterOSRArgsAndLocals() using emitActualTypeSize(lclTyp), which for TYP_BYTE returns EA_4BYTE.

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.

It seems like the bug is in genEnregisterOSRArgsAndLocals() -- it appears lclTyp is TYP_BYTE so it is asking for a ldrb but it passes the actual size (4) instead of size 1. It looks like lclTyp can only be small for OSR local struct fields. Maybe it should use const emitAttr size = emitTypeSize(lclTyp); instead of using emitActualTypeSize()? @AndyAyersMS ?

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.

Yes, I think we should be using emitTypeSize in genEnregisterOSRArgsAndLocals.

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.

It looks like lclTyp can only be small for OSR local struct fields.

Why is the reasoning behind it?

emitTypeSize

I never understood the difference between emitTypeSize and emitActualTypeSize(). In which scenarios should we use one over other?

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.

Turns out that for emit_R_R_I() format, if we are sign extending, we expect the size to be valid general size i.e. 4 bytes or 8 bytes, so changing to emitTypeSize() hits an assert. I will follow up offline with @BruceForstall .

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@BruceForstall PTAL.

@kunalspathak
kunalspathak merged commit 10f0277 into dotnet:mainSep 14, 2023
@kunalspathak
kunalspathak deleted the LS_2B branch September 14, 2023 03:34
@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

/backport to release/8.0

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/8.0: https://github.com/dotnet/runtime/actions/runs/6180624899

@ghostghost locked as resolved and limited conversation to collaborators Oct 14, 2023
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 '!"Instruction cannot be encoded: IF_LS_2B"' during 'Generate code'

3 participants

@kunalspathak@AndyAyersMS@BruceForstall
, '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: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset by kunalspathak · Pull Request #91741 · dotnet/runtime · GitHub
Skip to content

Arm64: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset - #91741

Merged
kunalspathak merged 5 commits into
dotnet:mainfrom
kunalspathak:LS_2B
Sep 14, 2023
Merged

Arm64: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset#91741
kunalspathak merged 5 commits into
dotnet:mainfrom
kunalspathak:LS_2B

Conversation

@kunalspathak

Copy link
Copy Markdown
Contributor

Pass the correct size of instruction to determine if the immediate will fit in the instruction or not.

Fixes: #68536

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

ghost commented Sep 7, 2023

Copy link
Copy Markdown

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

Issue Details

Pass the correct size of instruction to determine if the immediate will fit in the instruction or not.

Fixes: #68536

Author:kunalspathak
Assignees:kunalspathak
Labels:

area-CodeGen-coreclr

Milestone:-

@kunalspathak
kunalspathak marked this pull request as ready for review September 8, 2023 13:56
@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib

case INS_ldrsh:
case INS_ldrsw:
case INS_ldrb:
immFitsInIns = emitter::emitIns_valid_imm_for_ldst_offset(imm, EA_1BYTE);

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.

Why is size not already EA_1BYTE in this case?

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.

It is passed by the caller genEnregisterOSRArgsAndLocals() using emitActualTypeSize(lclTyp), which for TYP_BYTE returns EA_4BYTE.

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.

It seems like the bug is in genEnregisterOSRArgsAndLocals() -- it appears lclTyp is TYP_BYTE so it is asking for a ldrb but it passes the actual size (4) instead of size 1. It looks like lclTyp can only be small for OSR local struct fields. Maybe it should use const emitAttr size = emitTypeSize(lclTyp); instead of using emitActualTypeSize()? @AndyAyersMS ?

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.

Yes, I think we should be using emitTypeSize in genEnregisterOSRArgsAndLocals.

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.

It looks like lclTyp can only be small for OSR local struct fields.

Why is the reasoning behind it?

emitTypeSize

I never understood the difference between emitTypeSize and emitActualTypeSize(). In which scenarios should we use one over other?

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.

Turns out that for emit_R_R_I() format, if we are sign extending, we expect the size to be valid general size i.e. 4 bytes or 8 bytes, so changing to emitTypeSize() hits an assert. I will follow up offline with @BruceForstall .

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@BruceForstall PTAL.

@kunalspathak
kunalspathak merged commit 10f0277 into dotnet:mainSep 14, 2023
@kunalspathak
kunalspathak deleted the LS_2B branch September 14, 2023 03:34
@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

/backport to release/8.0

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/8.0: https://github.com/dotnet/runtime/actions/runs/6180624899

@ghostghost locked as resolved and limited conversation to collaborators Oct 14, 2023
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 '!"Instruction cannot be encoded: IF_LS_2B"' during 'Generate code'

3 participants

@kunalspathak@AndyAyersMS@BruceForstall
, '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: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset by kunalspathak · Pull Request #91741 · dotnet/runtime · GitHub
Skip to content

Arm64: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset - #91741

Merged
kunalspathak merged 5 commits into
dotnet:mainfrom
kunalspathak:LS_2B
Sep 14, 2023
Merged

Arm64: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset#91741
kunalspathak merged 5 commits into
dotnet:mainfrom
kunalspathak:LS_2B

Conversation

@kunalspathak

Copy link
Copy Markdown
Contributor

Pass the correct size of instruction to determine if the immediate will fit in the instruction or not.

Fixes: #68536

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

ghost commented Sep 7, 2023

Copy link
Copy Markdown

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

Issue Details

Pass the correct size of instruction to determine if the immediate will fit in the instruction or not.

Fixes: #68536

Author:kunalspathak
Assignees:kunalspathak
Labels:

area-CodeGen-coreclr

Milestone:-

@kunalspathak
kunalspathak marked this pull request as ready for review September 8, 2023 13:56
@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib

case INS_ldrsh:
case INS_ldrsw:
case INS_ldrb:
immFitsInIns = emitter::emitIns_valid_imm_for_ldst_offset(imm, EA_1BYTE);

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.

Why is size not already EA_1BYTE in this case?

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.

It is passed by the caller genEnregisterOSRArgsAndLocals() using emitActualTypeSize(lclTyp), which for TYP_BYTE returns EA_4BYTE.

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.

It seems like the bug is in genEnregisterOSRArgsAndLocals() -- it appears lclTyp is TYP_BYTE so it is asking for a ldrb but it passes the actual size (4) instead of size 1. It looks like lclTyp can only be small for OSR local struct fields. Maybe it should use const emitAttr size = emitTypeSize(lclTyp); instead of using emitActualTypeSize()? @AndyAyersMS ?

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.

Yes, I think we should be using emitTypeSize in genEnregisterOSRArgsAndLocals.

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.

It looks like lclTyp can only be small for OSR local struct fields.

Why is the reasoning behind it?

emitTypeSize

I never understood the difference between emitTypeSize and emitActualTypeSize(). In which scenarios should we use one over other?

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.

Turns out that for emit_R_R_I() format, if we are sign extending, we expect the size to be valid general size i.e. 4 bytes or 8 bytes, so changing to emitTypeSize() hits an assert. I will follow up offline with @BruceForstall .

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@BruceForstall PTAL.

@kunalspathak
kunalspathak merged commit 10f0277 into dotnet:mainSep 14, 2023
@kunalspathak
kunalspathak deleted the LS_2B branch September 14, 2023 03:34
@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

/backport to release/8.0

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/8.0: https://github.com/dotnet/runtime/actions/runs/6180624899

@ghostghost locked as resolved and limited conversation to collaborators Oct 14, 2023
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 '!"Instruction cannot be encoded: IF_LS_2B"' during 'Generate code'

3 participants

@kunalspathak@AndyAyersMS@BruceForstall
, '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: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset by kunalspathak · Pull Request #91741 · dotnet/runtime · GitHub
Skip to content

Arm64: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset - #91741

Merged
kunalspathak merged 5 commits into
dotnet:mainfrom
kunalspathak:LS_2B
Sep 14, 2023
Merged

Arm64: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset#91741
kunalspathak merged 5 commits into
dotnet:mainfrom
kunalspathak:LS_2B

Conversation

@kunalspathak

Copy link
Copy Markdown
Contributor

Pass the correct size of instruction to determine if the immediate will fit in the instruction or not.

Fixes: #68536

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

ghost commented Sep 7, 2023

Copy link
Copy Markdown

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

Issue Details

Pass the correct size of instruction to determine if the immediate will fit in the instruction or not.

Fixes: #68536

Author:kunalspathak
Assignees:kunalspathak
Labels:

area-CodeGen-coreclr

Milestone:-

@kunalspathak
kunalspathak marked this pull request as ready for review September 8, 2023 13:56
@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib

case INS_ldrsh:
case INS_ldrsw:
case INS_ldrb:
immFitsInIns = emitter::emitIns_valid_imm_for_ldst_offset(imm, EA_1BYTE);

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.

Why is size not already EA_1BYTE in this case?

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.

It is passed by the caller genEnregisterOSRArgsAndLocals() using emitActualTypeSize(lclTyp), which for TYP_BYTE returns EA_4BYTE.

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.

It seems like the bug is in genEnregisterOSRArgsAndLocals() -- it appears lclTyp is TYP_BYTE so it is asking for a ldrb but it passes the actual size (4) instead of size 1. It looks like lclTyp can only be small for OSR local struct fields. Maybe it should use const emitAttr size = emitTypeSize(lclTyp); instead of using emitActualTypeSize()? @AndyAyersMS ?

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.

Yes, I think we should be using emitTypeSize in genEnregisterOSRArgsAndLocals.

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.

It looks like lclTyp can only be small for OSR local struct fields.

Why is the reasoning behind it?

emitTypeSize

I never understood the difference between emitTypeSize and emitActualTypeSize(). In which scenarios should we use one over other?

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.

Turns out that for emit_R_R_I() format, if we are sign extending, we expect the size to be valid general size i.e. 4 bytes or 8 bytes, so changing to emitTypeSize() hits an assert. I will follow up offline with @BruceForstall .

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@BruceForstall PTAL.

@kunalspathak
kunalspathak merged commit 10f0277 into dotnet:mainSep 14, 2023
@kunalspathak
kunalspathak deleted the LS_2B branch September 14, 2023 03:34
@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

/backport to release/8.0

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/8.0: https://github.com/dotnet/runtime/actions/runs/6180624899

@ghostghost locked as resolved and limited conversation to collaborators Oct 14, 2023
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 '!"Instruction cannot be encoded: IF_LS_2B"' during 'Generate code'

3 participants

@kunalspathak@AndyAyersMS@BruceForstall
, '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: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset by kunalspathak · Pull Request #91741 · dotnet/runtime · GitHub
Skip to content

Arm64: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset - #91741

Merged
kunalspathak merged 5 commits into
dotnet:mainfrom
kunalspathak:LS_2B
Sep 14, 2023
Merged

Arm64: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset#91741
kunalspathak merged 5 commits into
dotnet:mainfrom
kunalspathak:LS_2B

Conversation

@kunalspathak

Copy link
Copy Markdown
Contributor

Pass the correct size of instruction to determine if the immediate will fit in the instruction or not.

Fixes: #68536

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

ghost commented Sep 7, 2023

Copy link
Copy Markdown

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

Issue Details

Pass the correct size of instruction to determine if the immediate will fit in the instruction or not.

Fixes: #68536

Author:kunalspathak
Assignees:kunalspathak
Labels:

area-CodeGen-coreclr

Milestone:-

@kunalspathak
kunalspathak marked this pull request as ready for review September 8, 2023 13:56
@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib

case INS_ldrsh:
case INS_ldrsw:
case INS_ldrb:
immFitsInIns = emitter::emitIns_valid_imm_for_ldst_offset(imm, EA_1BYTE);

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.

Why is size not already EA_1BYTE in this case?

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.

It is passed by the caller genEnregisterOSRArgsAndLocals() using emitActualTypeSize(lclTyp), which for TYP_BYTE returns EA_4BYTE.

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.

It seems like the bug is in genEnregisterOSRArgsAndLocals() -- it appears lclTyp is TYP_BYTE so it is asking for a ldrb but it passes the actual size (4) instead of size 1. It looks like lclTyp can only be small for OSR local struct fields. Maybe it should use const emitAttr size = emitTypeSize(lclTyp); instead of using emitActualTypeSize()? @AndyAyersMS ?

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.

Yes, I think we should be using emitTypeSize in genEnregisterOSRArgsAndLocals.

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.

It looks like lclTyp can only be small for OSR local struct fields.

Why is the reasoning behind it?

emitTypeSize

I never understood the difference between emitTypeSize and emitActualTypeSize(). In which scenarios should we use one over other?

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.

Turns out that for emit_R_R_I() format, if we are sign extending, we expect the size to be valid general size i.e. 4 bytes or 8 bytes, so changing to emitTypeSize() hits an assert. I will follow up offline with @BruceForstall .

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@BruceForstall PTAL.

@kunalspathak
kunalspathak merged commit 10f0277 into dotnet:mainSep 14, 2023
@kunalspathak
kunalspathak deleted the LS_2B branch September 14, 2023 03:34
@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

/backport to release/8.0

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/8.0: https://github.com/dotnet/runtime/actions/runs/6180624899

@ghostghost locked as resolved and limited conversation to collaborators Oct 14, 2023
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 '!"Instruction cannot be encoded: IF_LS_2B"' during 'Generate code'

3 participants

@kunalspathak@AndyAyersMS@BruceForstall
, '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); } })(); })(); Arm64: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset by kunalspathak · Pull Request #91741 · dotnet/runtime · GitHub
Skip to content

Arm64: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset - #91741

Merged
kunalspathak merged 5 commits into
dotnet:mainfrom
kunalspathak:LS_2B
Sep 14, 2023
Merged

Arm64: Pass the small size accurately to emitIns_valid_imm_for_ldst_offset#91741
kunalspathak merged 5 commits into
dotnet:mainfrom
kunalspathak:LS_2B

Conversation

@kunalspathak

Copy link
Copy Markdown
Contributor

Pass the correct size of instruction to determine if the immediate will fit in the instruction or not.

Fixes: #68536

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

ghost commented Sep 7, 2023

Copy link
Copy Markdown

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

Issue Details

Pass the correct size of instruction to determine if the immediate will fit in the instruction or not.

Fixes: #68536

Author:kunalspathak
Assignees:kunalspathak
Labels:

area-CodeGen-coreclr

Milestone:-

@kunalspathak
kunalspathak marked this pull request as ready for review September 8, 2023 13:56
@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@dotnet/jit-contrib

case INS_ldrsh:
case INS_ldrsw:
case INS_ldrb:
immFitsInIns = emitter::emitIns_valid_imm_for_ldst_offset(imm, EA_1BYTE);

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.

Why is size not already EA_1BYTE in this case?

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.

It is passed by the caller genEnregisterOSRArgsAndLocals() using emitActualTypeSize(lclTyp), which for TYP_BYTE returns EA_4BYTE.

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.

It seems like the bug is in genEnregisterOSRArgsAndLocals() -- it appears lclTyp is TYP_BYTE so it is asking for a ldrb but it passes the actual size (4) instead of size 1. It looks like lclTyp can only be small for OSR local struct fields. Maybe it should use const emitAttr size = emitTypeSize(lclTyp); instead of using emitActualTypeSize()? @AndyAyersMS ?

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.

Yes, I think we should be using emitTypeSize in genEnregisterOSRArgsAndLocals.

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.

It looks like lclTyp can only be small for OSR local struct fields.

Why is the reasoning behind it?

emitTypeSize

I never understood the difference between emitTypeSize and emitActualTypeSize(). In which scenarios should we use one over other?

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.

Turns out that for emit_R_R_I() format, if we are sign extending, we expect the size to be valid general size i.e. 4 bytes or 8 bytes, so changing to emitTypeSize() hits an assert. I will follow up offline with @BruceForstall .

@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

@BruceForstall PTAL.

@kunalspathak
kunalspathak merged commit 10f0277 into dotnet:mainSep 14, 2023
@kunalspathak
kunalspathak deleted the LS_2B branch September 14, 2023 03:34
@kunalspathak

Copy link
Copy Markdown
ContributorAuthor

/backport to release/8.0

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/8.0: https://github.com/dotnet/runtime/actions/runs/6180624899

@ghostghost locked as resolved and limited conversation to collaborators Oct 14, 2023
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 '!"Instruction cannot be encoded: IF_LS_2B"' during 'Generate code'

3 participants

@kunalspathak@AndyAyersMS@BruceForstall