Update Mono to handle various other vector bitcast APIs - #104049

Closed
tannergooding wants to merge 1 commit into
dotnet:mainfrom
tannergooding:mono-vectoras
Closed

Update Mono to handle various other vector bitcast APIs#104049
tannergooding wants to merge 1 commit into
dotnet:mainfrom
tannergooding:mono-vectoras

Conversation

@tannergooding

Copy link
Copy Markdown
Member

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

Comment threadsrc/mono/mono/mini/interp/transform-simd.c Outdated
@kg

kg commented Jun 26, 2024

Copy link
Copy Markdown
Contributor

At a glance this all looks good. If the regression still isn't gone after this on wasm, I can help implement the new intrinsics in the jiterpreter.

@tannergooding

tannergooding commented Jun 26, 2024

Copy link
Copy Markdown
MemberAuthor

I'm not sure why ios-arm64 and tvos-arm64 are failing, I've seen this on a couple Mono PRs that are touching fairly different areas so far

The mono interp handling for AsVector2Single seems to not be quite right though, so I'll see if I can fix that first. Edit: The interp failure was a simple typo

@steveisok

Copy link
Copy Markdown
Member

I'm not sure why ios-arm64 and tvos-arm64 are failing, I've seen this on a couple Mono PRs that are touching fairly different areas so far

#104028 should make it better. All ios/tvos device runs were failing before this.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Glad to know it wasn't something on my end, hopefully this is green and can get merged as it should give us some nice improvements 🎉


static gboolean
get_common_simd_info (MonoClass *vector_klass, MonoMethodSignature *csignature, MonoTypeEnum *atype, int *vector_size, int *arg_size, int *scalar_arg)
get_common_simd_info (MonoClass *klass, MonoTypeEnum *atype, int *klass_size, int *arg_size)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

This file ended up needing a bit of a refactoring as there were some assumptions in place that don't hold when supporting additional intrinsics.

In particular, there are various intrinsics where:

  • one of the SIMD types may not be generic at all (Vector2, Vector3, Vector4)
  • multiple generic types exist (As<TFrom, TTo>)
  • the return type may not be a 128-bit vector (AsVector2, AsVector3)

So, what I did here was I broke this get_common_simd_info method into two:

  • get_common_simd_info
  • get_common_simd_scalar_arg

The former now always gets the size of the input klass and secondly determines if it is a SIMD type and what the underlying element type is if so. While the latter identifies the first non-SIMD argument, if one exists.


static void
emit_common_simd_epilogue (TransformData *td, MonoClass *vector_klass, MonoMethodSignature *csignature, int vector_size, gboolean allow_void)
emit_common_simd_epilogue (TransformData *td, MonoMethodSignature *csignature)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

To support methods which return a value type, but where that isn't a 128-bit vector, this explicitly gets the return type from the signature to ensure there can be no accidents

gint16 simd_intrins = -1;

vector_klass = mono_class_from_mono_type_internal (csignature->ret);
MonoTypeEnum ret_atype;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

In here, we consistently query the relevant simd information of the return type and if it exists the simd information of the first parameter (this is enough to correctly handle all the cases that currently exist).

There's actually quite a bit of logic in this function that could be moved down into emit_common_simd_operations, as APIs like AndNot exist for Vector128<T> and Vector<T>, they may also exist for types like Vector4 in the future. I opted to not move that down in this PR, to try and keep the total churn under control.

But, I did add some basic validation that the encountered signatures are roughly as expected to help ensure we don't hit issues in the future as new overloads are introduced or the general SIMD support in Mono is expanded.

@tannergooding
tannergoodingforce-pushed the mono-vectoras branch 3 times, most recently from 09ee415 to 1d03cbdCompareJune 28, 2024 16:04
@tannergooding

Copy link
Copy Markdown
MemberAuthor

Similarly to #103915, I don't have the time to continue to try and debug why these changes aren't working for Mono.

Anyone should feel free to pick this up if they have more context or time.

-- As it stands, there appears to be some quirk where Mono is either incorrectly doing comparisons or other handling around Vector3 and it's causing most of the downstream failures.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Perf] Linux/x64: 87 Regressions on 6/15/2024 2:08:36 PM

3 participants

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

Update Mono to handle various other vector bitcast APIs - #104049

Closed
tannergooding wants to merge 1 commit into
dotnet:mainfrom
tannergooding:mono-vectoras
Closed

Update Mono to handle various other vector bitcast APIs#104049
tannergooding wants to merge 1 commit into
dotnet:mainfrom
tannergooding:mono-vectoras

Conversation

@tannergooding

Copy link
Copy Markdown
Member

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

Comment threadsrc/mono/mono/mini/interp/transform-simd.c Outdated
@kg

kg commented Jun 26, 2024

Copy link
Copy Markdown
Contributor

At a glance this all looks good. If the regression still isn't gone after this on wasm, I can help implement the new intrinsics in the jiterpreter.

@tannergooding

tannergooding commented Jun 26, 2024

Copy link
Copy Markdown
MemberAuthor

I'm not sure why ios-arm64 and tvos-arm64 are failing, I've seen this on a couple Mono PRs that are touching fairly different areas so far

The mono interp handling for AsVector2Single seems to not be quite right though, so I'll see if I can fix that first. Edit: The interp failure was a simple typo

@steveisok

Copy link
Copy Markdown
Member

I'm not sure why ios-arm64 and tvos-arm64 are failing, I've seen this on a couple Mono PRs that are touching fairly different areas so far

#104028 should make it better. All ios/tvos device runs were failing before this.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Glad to know it wasn't something on my end, hopefully this is green and can get merged as it should give us some nice improvements 🎉


static gboolean
get_common_simd_info (MonoClass *vector_klass, MonoMethodSignature *csignature, MonoTypeEnum *atype, int *vector_size, int *arg_size, int *scalar_arg)
get_common_simd_info (MonoClass *klass, MonoTypeEnum *atype, int *klass_size, int *arg_size)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

This file ended up needing a bit of a refactoring as there were some assumptions in place that don't hold when supporting additional intrinsics.

In particular, there are various intrinsics where:

  • one of the SIMD types may not be generic at all (Vector2, Vector3, Vector4)
  • multiple generic types exist (As<TFrom, TTo>)
  • the return type may not be a 128-bit vector (AsVector2, AsVector3)

So, what I did here was I broke this get_common_simd_info method into two:

  • get_common_simd_info
  • get_common_simd_scalar_arg

The former now always gets the size of the input klass and secondly determines if it is a SIMD type and what the underlying element type is if so. While the latter identifies the first non-SIMD argument, if one exists.


static void
emit_common_simd_epilogue (TransformData *td, MonoClass *vector_klass, MonoMethodSignature *csignature, int vector_size, gboolean allow_void)
emit_common_simd_epilogue (TransformData *td, MonoMethodSignature *csignature)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

To support methods which return a value type, but where that isn't a 128-bit vector, this explicitly gets the return type from the signature to ensure there can be no accidents

gint16 simd_intrins = -1;

vector_klass = mono_class_from_mono_type_internal (csignature->ret);
MonoTypeEnum ret_atype;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

In here, we consistently query the relevant simd information of the return type and if it exists the simd information of the first parameter (this is enough to correctly handle all the cases that currently exist).

There's actually quite a bit of logic in this function that could be moved down into emit_common_simd_operations, as APIs like AndNot exist for Vector128<T> and Vector<T>, they may also exist for types like Vector4 in the future. I opted to not move that down in this PR, to try and keep the total churn under control.

But, I did add some basic validation that the encountered signatures are roughly as expected to help ensure we don't hit issues in the future as new overloads are introduced or the general SIMD support in Mono is expanded.

@tannergooding
tannergoodingforce-pushed the mono-vectoras branch 3 times, most recently from 09ee415 to 1d03cbdCompareJune 28, 2024 16:04
@tannergooding

Copy link
Copy Markdown
MemberAuthor

Similarly to #103915, I don't have the time to continue to try and debug why these changes aren't working for Mono.

Anyone should feel free to pick this up if they have more context or time.

-- As it stands, there appears to be some quirk where Mono is either incorrectly doing comparisons or other handling around Vector3 and it's causing most of the downstream failures.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Perf] Linux/x64: 87 Regressions on 6/15/2024 2:08:36 PM

3 participants

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

Update Mono to handle various other vector bitcast APIs - #104049

Closed
tannergooding wants to merge 1 commit into
dotnet:mainfrom
tannergooding:mono-vectoras
Closed

Update Mono to handle various other vector bitcast APIs#104049
tannergooding wants to merge 1 commit into
dotnet:mainfrom
tannergooding:mono-vectoras

Conversation

@tannergooding

Copy link
Copy Markdown
Member

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

Comment threadsrc/mono/mono/mini/interp/transform-simd.c Outdated
@kg

kg commented Jun 26, 2024

Copy link
Copy Markdown
Contributor

At a glance this all looks good. If the regression still isn't gone after this on wasm, I can help implement the new intrinsics in the jiterpreter.

@tannergooding

tannergooding commented Jun 26, 2024

Copy link
Copy Markdown
MemberAuthor

I'm not sure why ios-arm64 and tvos-arm64 are failing, I've seen this on a couple Mono PRs that are touching fairly different areas so far

The mono interp handling for AsVector2Single seems to not be quite right though, so I'll see if I can fix that first. Edit: The interp failure was a simple typo

@steveisok

Copy link
Copy Markdown
Member

I'm not sure why ios-arm64 and tvos-arm64 are failing, I've seen this on a couple Mono PRs that are touching fairly different areas so far

#104028 should make it better. All ios/tvos device runs were failing before this.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Glad to know it wasn't something on my end, hopefully this is green and can get merged as it should give us some nice improvements 🎉


static gboolean
get_common_simd_info (MonoClass *vector_klass, MonoMethodSignature *csignature, MonoTypeEnum *atype, int *vector_size, int *arg_size, int *scalar_arg)
get_common_simd_info (MonoClass *klass, MonoTypeEnum *atype, int *klass_size, int *arg_size)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

This file ended up needing a bit of a refactoring as there were some assumptions in place that don't hold when supporting additional intrinsics.

In particular, there are various intrinsics where:

  • one of the SIMD types may not be generic at all (Vector2, Vector3, Vector4)
  • multiple generic types exist (As<TFrom, TTo>)
  • the return type may not be a 128-bit vector (AsVector2, AsVector3)

So, what I did here was I broke this get_common_simd_info method into two:

  • get_common_simd_info
  • get_common_simd_scalar_arg

The former now always gets the size of the input klass and secondly determines if it is a SIMD type and what the underlying element type is if so. While the latter identifies the first non-SIMD argument, if one exists.


static void
emit_common_simd_epilogue (TransformData *td, MonoClass *vector_klass, MonoMethodSignature *csignature, int vector_size, gboolean allow_void)
emit_common_simd_epilogue (TransformData *td, MonoMethodSignature *csignature)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

To support methods which return a value type, but where that isn't a 128-bit vector, this explicitly gets the return type from the signature to ensure there can be no accidents

gint16 simd_intrins = -1;

vector_klass = mono_class_from_mono_type_internal (csignature->ret);
MonoTypeEnum ret_atype;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

In here, we consistently query the relevant simd information of the return type and if it exists the simd information of the first parameter (this is enough to correctly handle all the cases that currently exist).

There's actually quite a bit of logic in this function that could be moved down into emit_common_simd_operations, as APIs like AndNot exist for Vector128<T> and Vector<T>, they may also exist for types like Vector4 in the future. I opted to not move that down in this PR, to try and keep the total churn under control.

But, I did add some basic validation that the encountered signatures are roughly as expected to help ensure we don't hit issues in the future as new overloads are introduced or the general SIMD support in Mono is expanded.

@tannergooding
tannergoodingforce-pushed the mono-vectoras branch 3 times, most recently from 09ee415 to 1d03cbdCompareJune 28, 2024 16:04
@tannergooding

Copy link
Copy Markdown
MemberAuthor

Similarly to #103915, I don't have the time to continue to try and debug why these changes aren't working for Mono.

Anyone should feel free to pick this up if they have more context or time.

-- As it stands, there appears to be some quirk where Mono is either incorrectly doing comparisons or other handling around Vector3 and it's causing most of the downstream failures.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Perf] Linux/x64: 87 Regressions on 6/15/2024 2:08:36 PM

3 participants

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

Update Mono to handle various other vector bitcast APIs - #104049

Closed
tannergooding wants to merge 1 commit into
dotnet:mainfrom
tannergooding:mono-vectoras
Closed

Update Mono to handle various other vector bitcast APIs#104049
tannergooding wants to merge 1 commit into
dotnet:mainfrom
tannergooding:mono-vectoras

Conversation

@tannergooding

Copy link
Copy Markdown
Member

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

Comment threadsrc/mono/mono/mini/interp/transform-simd.c Outdated
@kg

kg commented Jun 26, 2024

Copy link
Copy Markdown
Contributor

At a glance this all looks good. If the regression still isn't gone after this on wasm, I can help implement the new intrinsics in the jiterpreter.

@tannergooding

tannergooding commented Jun 26, 2024

Copy link
Copy Markdown
MemberAuthor

I'm not sure why ios-arm64 and tvos-arm64 are failing, I've seen this on a couple Mono PRs that are touching fairly different areas so far

The mono interp handling for AsVector2Single seems to not be quite right though, so I'll see if I can fix that first. Edit: The interp failure was a simple typo

@steveisok

Copy link
Copy Markdown
Member

I'm not sure why ios-arm64 and tvos-arm64 are failing, I've seen this on a couple Mono PRs that are touching fairly different areas so far

#104028 should make it better. All ios/tvos device runs were failing before this.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Glad to know it wasn't something on my end, hopefully this is green and can get merged as it should give us some nice improvements 🎉


static gboolean
get_common_simd_info (MonoClass *vector_klass, MonoMethodSignature *csignature, MonoTypeEnum *atype, int *vector_size, int *arg_size, int *scalar_arg)
get_common_simd_info (MonoClass *klass, MonoTypeEnum *atype, int *klass_size, int *arg_size)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

This file ended up needing a bit of a refactoring as there were some assumptions in place that don't hold when supporting additional intrinsics.

In particular, there are various intrinsics where:

  • one of the SIMD types may not be generic at all (Vector2, Vector3, Vector4)
  • multiple generic types exist (As<TFrom, TTo>)
  • the return type may not be a 128-bit vector (AsVector2, AsVector3)

So, what I did here was I broke this get_common_simd_info method into two:

  • get_common_simd_info
  • get_common_simd_scalar_arg

The former now always gets the size of the input klass and secondly determines if it is a SIMD type and what the underlying element type is if so. While the latter identifies the first non-SIMD argument, if one exists.


static void
emit_common_simd_epilogue (TransformData *td, MonoClass *vector_klass, MonoMethodSignature *csignature, int vector_size, gboolean allow_void)
emit_common_simd_epilogue (TransformData *td, MonoMethodSignature *csignature)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

To support methods which return a value type, but where that isn't a 128-bit vector, this explicitly gets the return type from the signature to ensure there can be no accidents

gint16 simd_intrins = -1;

vector_klass = mono_class_from_mono_type_internal (csignature->ret);
MonoTypeEnum ret_atype;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

In here, we consistently query the relevant simd information of the return type and if it exists the simd information of the first parameter (this is enough to correctly handle all the cases that currently exist).

There's actually quite a bit of logic in this function that could be moved down into emit_common_simd_operations, as APIs like AndNot exist for Vector128<T> and Vector<T>, they may also exist for types like Vector4 in the future. I opted to not move that down in this PR, to try and keep the total churn under control.

But, I did add some basic validation that the encountered signatures are roughly as expected to help ensure we don't hit issues in the future as new overloads are introduced or the general SIMD support in Mono is expanded.

@tannergooding
tannergoodingforce-pushed the mono-vectoras branch 3 times, most recently from 09ee415 to 1d03cbdCompareJune 28, 2024 16:04
@tannergooding

Copy link
Copy Markdown
MemberAuthor

Similarly to #103915, I don't have the time to continue to try and debug why these changes aren't working for Mono.

Anyone should feel free to pick this up if they have more context or time.

-- As it stands, there appears to be some quirk where Mono is either incorrectly doing comparisons or other handling around Vector3 and it's causing most of the downstream failures.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Perf] Linux/x64: 87 Regressions on 6/15/2024 2:08:36 PM

3 participants

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

Update Mono to handle various other vector bitcast APIs - #104049

Closed
tannergooding wants to merge 1 commit into
dotnet:mainfrom
tannergooding:mono-vectoras
Closed

Update Mono to handle various other vector bitcast APIs#104049
tannergooding wants to merge 1 commit into
dotnet:mainfrom
tannergooding:mono-vectoras

Conversation

@tannergooding

Copy link
Copy Markdown
Member

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

Comment threadsrc/mono/mono/mini/interp/transform-simd.c Outdated
@kg

kg commented Jun 26, 2024

Copy link
Copy Markdown
Contributor

At a glance this all looks good. If the regression still isn't gone after this on wasm, I can help implement the new intrinsics in the jiterpreter.

@tannergooding

tannergooding commented Jun 26, 2024

Copy link
Copy Markdown
MemberAuthor

I'm not sure why ios-arm64 and tvos-arm64 are failing, I've seen this on a couple Mono PRs that are touching fairly different areas so far

The mono interp handling for AsVector2Single seems to not be quite right though, so I'll see if I can fix that first. Edit: The interp failure was a simple typo

@steveisok

Copy link
Copy Markdown
Member

I'm not sure why ios-arm64 and tvos-arm64 are failing, I've seen this on a couple Mono PRs that are touching fairly different areas so far

#104028 should make it better. All ios/tvos device runs were failing before this.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Glad to know it wasn't something on my end, hopefully this is green and can get merged as it should give us some nice improvements 🎉


static gboolean
get_common_simd_info (MonoClass *vector_klass, MonoMethodSignature *csignature, MonoTypeEnum *atype, int *vector_size, int *arg_size, int *scalar_arg)
get_common_simd_info (MonoClass *klass, MonoTypeEnum *atype, int *klass_size, int *arg_size)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

This file ended up needing a bit of a refactoring as there were some assumptions in place that don't hold when supporting additional intrinsics.

In particular, there are various intrinsics where:

  • one of the SIMD types may not be generic at all (Vector2, Vector3, Vector4)
  • multiple generic types exist (As<TFrom, TTo>)
  • the return type may not be a 128-bit vector (AsVector2, AsVector3)

So, what I did here was I broke this get_common_simd_info method into two:

  • get_common_simd_info
  • get_common_simd_scalar_arg

The former now always gets the size of the input klass and secondly determines if it is a SIMD type and what the underlying element type is if so. While the latter identifies the first non-SIMD argument, if one exists.


static void
emit_common_simd_epilogue (TransformData *td, MonoClass *vector_klass, MonoMethodSignature *csignature, int vector_size, gboolean allow_void)
emit_common_simd_epilogue (TransformData *td, MonoMethodSignature *csignature)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

To support methods which return a value type, but where that isn't a 128-bit vector, this explicitly gets the return type from the signature to ensure there can be no accidents

gint16 simd_intrins = -1;

vector_klass = mono_class_from_mono_type_internal (csignature->ret);
MonoTypeEnum ret_atype;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

In here, we consistently query the relevant simd information of the return type and if it exists the simd information of the first parameter (this is enough to correctly handle all the cases that currently exist).

There's actually quite a bit of logic in this function that could be moved down into emit_common_simd_operations, as APIs like AndNot exist for Vector128<T> and Vector<T>, they may also exist for types like Vector4 in the future. I opted to not move that down in this PR, to try and keep the total churn under control.

But, I did add some basic validation that the encountered signatures are roughly as expected to help ensure we don't hit issues in the future as new overloads are introduced or the general SIMD support in Mono is expanded.

@tannergooding
tannergoodingforce-pushed the mono-vectoras branch 3 times, most recently from 09ee415 to 1d03cbdCompareJune 28, 2024 16:04
@tannergooding

Copy link
Copy Markdown
MemberAuthor

Similarly to #103915, I don't have the time to continue to try and debug why these changes aren't working for Mono.

Anyone should feel free to pick this up if they have more context or time.

-- As it stands, there appears to be some quirk where Mono is either incorrectly doing comparisons or other handling around Vector3 and it's causing most of the downstream failures.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Perf] Linux/x64: 87 Regressions on 6/15/2024 2:08:36 PM

3 participants

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

Update Mono to handle various other vector bitcast APIs - #104049

Closed
tannergooding wants to merge 1 commit into
dotnet:mainfrom
tannergooding:mono-vectoras
Closed

Update Mono to handle various other vector bitcast APIs#104049
tannergooding wants to merge 1 commit into
dotnet:mainfrom
tannergooding:mono-vectoras

Conversation

@tannergooding

Copy link
Copy Markdown
Member

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

Comment threadsrc/mono/mono/mini/interp/transform-simd.c Outdated
@kg

kg commented Jun 26, 2024

Copy link
Copy Markdown
Contributor

At a glance this all looks good. If the regression still isn't gone after this on wasm, I can help implement the new intrinsics in the jiterpreter.

@tannergooding

tannergooding commented Jun 26, 2024

Copy link
Copy Markdown
MemberAuthor

I'm not sure why ios-arm64 and tvos-arm64 are failing, I've seen this on a couple Mono PRs that are touching fairly different areas so far

The mono interp handling for AsVector2Single seems to not be quite right though, so I'll see if I can fix that first. Edit: The interp failure was a simple typo

@steveisok

Copy link
Copy Markdown
Member

I'm not sure why ios-arm64 and tvos-arm64 are failing, I've seen this on a couple Mono PRs that are touching fairly different areas so far

#104028 should make it better. All ios/tvos device runs were failing before this.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Glad to know it wasn't something on my end, hopefully this is green and can get merged as it should give us some nice improvements 🎉


static gboolean
get_common_simd_info (MonoClass *vector_klass, MonoMethodSignature *csignature, MonoTypeEnum *atype, int *vector_size, int *arg_size, int *scalar_arg)
get_common_simd_info (MonoClass *klass, MonoTypeEnum *atype, int *klass_size, int *arg_size)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

This file ended up needing a bit of a refactoring as there were some assumptions in place that don't hold when supporting additional intrinsics.

In particular, there are various intrinsics where:

  • one of the SIMD types may not be generic at all (Vector2, Vector3, Vector4)
  • multiple generic types exist (As<TFrom, TTo>)
  • the return type may not be a 128-bit vector (AsVector2, AsVector3)

So, what I did here was I broke this get_common_simd_info method into two:

  • get_common_simd_info
  • get_common_simd_scalar_arg

The former now always gets the size of the input klass and secondly determines if it is a SIMD type and what the underlying element type is if so. While the latter identifies the first non-SIMD argument, if one exists.


static void
emit_common_simd_epilogue (TransformData *td, MonoClass *vector_klass, MonoMethodSignature *csignature, int vector_size, gboolean allow_void)
emit_common_simd_epilogue (TransformData *td, MonoMethodSignature *csignature)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

To support methods which return a value type, but where that isn't a 128-bit vector, this explicitly gets the return type from the signature to ensure there can be no accidents

gint16 simd_intrins = -1;

vector_klass = mono_class_from_mono_type_internal (csignature->ret);
MonoTypeEnum ret_atype;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

In here, we consistently query the relevant simd information of the return type and if it exists the simd information of the first parameter (this is enough to correctly handle all the cases that currently exist).

There's actually quite a bit of logic in this function that could be moved down into emit_common_simd_operations, as APIs like AndNot exist for Vector128<T> and Vector<T>, they may also exist for types like Vector4 in the future. I opted to not move that down in this PR, to try and keep the total churn under control.

But, I did add some basic validation that the encountered signatures are roughly as expected to help ensure we don't hit issues in the future as new overloads are introduced or the general SIMD support in Mono is expanded.

@tannergooding
tannergoodingforce-pushed the mono-vectoras branch 3 times, most recently from 09ee415 to 1d03cbdCompareJune 28, 2024 16:04
@tannergooding

Copy link
Copy Markdown
MemberAuthor

Similarly to #103915, I don't have the time to continue to try and debug why these changes aren't working for Mono.

Anyone should feel free to pick this up if they have more context or time.

-- As it stands, there appears to be some quirk where Mono is either incorrectly doing comparisons or other handling around Vector3 and it's causing most of the downstream failures.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Perf] Linux/x64: 87 Regressions on 6/15/2024 2:08:36 PM

3 participants

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

Update Mono to handle various other vector bitcast APIs - #104049

Closed
tannergooding wants to merge 1 commit into
dotnet:mainfrom
tannergooding:mono-vectoras
Closed

Update Mono to handle various other vector bitcast APIs#104049
tannergooding wants to merge 1 commit into
dotnet:mainfrom
tannergooding:mono-vectoras

Conversation

@tannergooding

Copy link
Copy Markdown
Member

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

Comment threadsrc/mono/mono/mini/interp/transform-simd.c Outdated
@kg

kg commented Jun 26, 2024

Copy link
Copy Markdown
Contributor

At a glance this all looks good. If the regression still isn't gone after this on wasm, I can help implement the new intrinsics in the jiterpreter.

@tannergooding

tannergooding commented Jun 26, 2024

Copy link
Copy Markdown
MemberAuthor

I'm not sure why ios-arm64 and tvos-arm64 are failing, I've seen this on a couple Mono PRs that are touching fairly different areas so far

The mono interp handling for AsVector2Single seems to not be quite right though, so I'll see if I can fix that first. Edit: The interp failure was a simple typo

@steveisok

Copy link
Copy Markdown
Member

I'm not sure why ios-arm64 and tvos-arm64 are failing, I've seen this on a couple Mono PRs that are touching fairly different areas so far

#104028 should make it better. All ios/tvos device runs were failing before this.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Glad to know it wasn't something on my end, hopefully this is green and can get merged as it should give us some nice improvements 🎉


static gboolean
get_common_simd_info (MonoClass *vector_klass, MonoMethodSignature *csignature, MonoTypeEnum *atype, int *vector_size, int *arg_size, int *scalar_arg)
get_common_simd_info (MonoClass *klass, MonoTypeEnum *atype, int *klass_size, int *arg_size)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

This file ended up needing a bit of a refactoring as there were some assumptions in place that don't hold when supporting additional intrinsics.

In particular, there are various intrinsics where:

  • one of the SIMD types may not be generic at all (Vector2, Vector3, Vector4)
  • multiple generic types exist (As<TFrom, TTo>)
  • the return type may not be a 128-bit vector (AsVector2, AsVector3)

So, what I did here was I broke this get_common_simd_info method into two:

  • get_common_simd_info
  • get_common_simd_scalar_arg

The former now always gets the size of the input klass and secondly determines if it is a SIMD type and what the underlying element type is if so. While the latter identifies the first non-SIMD argument, if one exists.


static void
emit_common_simd_epilogue (TransformData *td, MonoClass *vector_klass, MonoMethodSignature *csignature, int vector_size, gboolean allow_void)
emit_common_simd_epilogue (TransformData *td, MonoMethodSignature *csignature)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

To support methods which return a value type, but where that isn't a 128-bit vector, this explicitly gets the return type from the signature to ensure there can be no accidents

gint16 simd_intrins = -1;

vector_klass = mono_class_from_mono_type_internal (csignature->ret);
MonoTypeEnum ret_atype;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

In here, we consistently query the relevant simd information of the return type and if it exists the simd information of the first parameter (this is enough to correctly handle all the cases that currently exist).

There's actually quite a bit of logic in this function that could be moved down into emit_common_simd_operations, as APIs like AndNot exist for Vector128<T> and Vector<T>, they may also exist for types like Vector4 in the future. I opted to not move that down in this PR, to try and keep the total churn under control.

But, I did add some basic validation that the encountered signatures are roughly as expected to help ensure we don't hit issues in the future as new overloads are introduced or the general SIMD support in Mono is expanded.

@tannergooding
tannergoodingforce-pushed the mono-vectoras branch 3 times, most recently from 09ee415 to 1d03cbdCompareJune 28, 2024 16:04
@tannergooding

Copy link
Copy Markdown
MemberAuthor

Similarly to #103915, I don't have the time to continue to try and debug why these changes aren't working for Mono.

Anyone should feel free to pick this up if they have more context or time.

-- As it stands, there appears to be some quirk where Mono is either incorrectly doing comparisons or other handling around Vector3 and it's causing most of the downstream failures.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Perf] Linux/x64: 87 Regressions on 6/15/2024 2:08:36 PM

3 participants

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

Update Mono to handle various other vector bitcast APIs - #104049

Closed
tannergooding wants to merge 1 commit into
dotnet:mainfrom
tannergooding:mono-vectoras
Closed

Update Mono to handle various other vector bitcast APIs#104049
tannergooding wants to merge 1 commit into
dotnet:mainfrom
tannergooding:mono-vectoras

Conversation

@tannergooding

Copy link
Copy Markdown
Member

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

Comment threadsrc/mono/mono/mini/interp/transform-simd.c Outdated
@kg

kg commented Jun 26, 2024

Copy link
Copy Markdown
Contributor

At a glance this all looks good. If the regression still isn't gone after this on wasm, I can help implement the new intrinsics in the jiterpreter.

@tannergooding

tannergooding commented Jun 26, 2024

Copy link
Copy Markdown
MemberAuthor

I'm not sure why ios-arm64 and tvos-arm64 are failing, I've seen this on a couple Mono PRs that are touching fairly different areas so far

The mono interp handling for AsVector2Single seems to not be quite right though, so I'll see if I can fix that first. Edit: The interp failure was a simple typo

@steveisok

Copy link
Copy Markdown
Member

I'm not sure why ios-arm64 and tvos-arm64 are failing, I've seen this on a couple Mono PRs that are touching fairly different areas so far

#104028 should make it better. All ios/tvos device runs were failing before this.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Glad to know it wasn't something on my end, hopefully this is green and can get merged as it should give us some nice improvements 🎉


static gboolean
get_common_simd_info (MonoClass *vector_klass, MonoMethodSignature *csignature, MonoTypeEnum *atype, int *vector_size, int *arg_size, int *scalar_arg)
get_common_simd_info (MonoClass *klass, MonoTypeEnum *atype, int *klass_size, int *arg_size)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

This file ended up needing a bit of a refactoring as there were some assumptions in place that don't hold when supporting additional intrinsics.

In particular, there are various intrinsics where:

  • one of the SIMD types may not be generic at all (Vector2, Vector3, Vector4)
  • multiple generic types exist (As<TFrom, TTo>)
  • the return type may not be a 128-bit vector (AsVector2, AsVector3)

So, what I did here was I broke this get_common_simd_info method into two:

  • get_common_simd_info
  • get_common_simd_scalar_arg

The former now always gets the size of the input klass and secondly determines if it is a SIMD type and what the underlying element type is if so. While the latter identifies the first non-SIMD argument, if one exists.


static void
emit_common_simd_epilogue (TransformData *td, MonoClass *vector_klass, MonoMethodSignature *csignature, int vector_size, gboolean allow_void)
emit_common_simd_epilogue (TransformData *td, MonoMethodSignature *csignature)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

To support methods which return a value type, but where that isn't a 128-bit vector, this explicitly gets the return type from the signature to ensure there can be no accidents

gint16 simd_intrins = -1;

vector_klass = mono_class_from_mono_type_internal (csignature->ret);
MonoTypeEnum ret_atype;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

In here, we consistently query the relevant simd information of the return type and if it exists the simd information of the first parameter (this is enough to correctly handle all the cases that currently exist).

There's actually quite a bit of logic in this function that could be moved down into emit_common_simd_operations, as APIs like AndNot exist for Vector128<T> and Vector<T>, they may also exist for types like Vector4 in the future. I opted to not move that down in this PR, to try and keep the total churn under control.

But, I did add some basic validation that the encountered signatures are roughly as expected to help ensure we don't hit issues in the future as new overloads are introduced or the general SIMD support in Mono is expanded.

@tannergooding
tannergoodingforce-pushed the mono-vectoras branch 3 times, most recently from 09ee415 to 1d03cbdCompareJune 28, 2024 16:04
@tannergooding

Copy link
Copy Markdown
MemberAuthor

Similarly to #103915, I don't have the time to continue to try and debug why these changes aren't working for Mono.

Anyone should feel free to pick this up if they have more context or time.

-- As it stands, there appears to be some quirk where Mono is either incorrectly doing comparisons or other handling around Vector3 and it's causing most of the downstream failures.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Perf] Linux/x64: 87 Regressions on 6/15/2024 2:08:36 PM

3 participants

@tannergooding@kg@steveisok