Track bool-returning and scalar-T-returning HW intrinsics via flags - #128848

Merged
tannergooding merged 5 commits into
mainfrom
copilot/track-bool-returning-intrinsics
Jun 8, 2026
Merged

Track bool-returning and scalar-T-returning HW intrinsics via flags#128848
tannergooding merged 5 commits into
mainfrom
copilot/track-bool-returning-intrinsics

Conversation

CopilotAI commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Several hardware intrinsics are known to return bool or a scalar T, but consumers (assertionprop, rangecheck, valuenum) tracked them via long ID switches that had to be kept in sync. Replace those with flags on the intrinsic table queryable through HWIntrinsicInfo.

hwintrinsic.h

  • Widen HWIntrinsicFlag to uint64_t (arm64 was out of bits in the 32-bit space).
  • Add HW_Flag_ReturnsBoolean and HW_Flag_ReturnsScalarT as common flags.
  • Add HWIntrinsicInfo::ReturnsBoolean / ReturnsScalarT static APIs, grouped after ReturnsPerElementMask.

hwintrinsiclist*.h

Tag the entries previously enumerated in the consumer switches (skipping HW_Flag_InvalidNodeId entries per the issue):

  • xarch: 24 ReturnsBoolean (Vector{128,256,512}_op_{Equality,Inequality}, X86Base.CompareScalar{Ordered,Unordered}*, X86Base/AVXTest{C,Z,NotZAndNotC}) and 8 ReturnsScalarT (Vector{128,256,512}.{GetElement,ToScalar}, X86Base[_X64].Extract).
  • arm64: 4 ReturnsBoolean (Vector{64,128}_op_{Equality,Inequality}) and 5 ReturnsScalarT (Vector{64,128}.{GetElement,ToScalar}, AdvSimd.Extract).

Consumer refactors

assertionprop.cpp, rangecheck.cpp, and valuenum.cpp no longer enumerate intrinsic IDs in their GT_HWINTRINSIC / VNF_HWI_* switches. A flag check runs before the remaining switch and preserves prior semantics, e.g.:

if (HWIntrinsicInfo::ReturnsBoolean(id))
{
rangeType = TYP_INT;
range = Range(Limit(Limit::keConstant, 0), Limit(Limit::keConstant, 1));
break;
}
if (HWIntrinsicInfo::ReturnsScalarT(id) && varTypeIsSmall(simdBaseType))
{
rangeType = simdBaseType;
break;
}

For IsVNNeverNegative the scalar-T path keeps its base-type guard (only TYP_UBYTE/TYP_USHORT continue), matching the previous case-by-case behavior. The HW intrinsic checks in IsVNNeverNegative and rangecheck.cpp now use IsVNHWIntrinsicFunc, eliminating the manual VNF_HWI_FIRST/VNF_HWI_LAST range check, the explicit NamedIntrinsic cast, the separate GetVNHWIntrinsicSizeAndBaseType call. Both IsVNHWIntrinsicFunc blocks are correctly wrapped in #if defined(FEATURE_HW_INTRINSICS) / #endif guards.

SVE bool/scalar-T intrinsics are intentionally not tagged here — they were never in the original switches and remain covered by the existing TODO-SVE notes.

CopilotAI review requested due to automatic review settings June 1, 2026 14:08
CopilotAI removed the request for review from CopilotJune 1, 2026 14:08
CopilotAI linked an issue Jun 1, 2026 that may be closed by this pull request
Co-authored-by: tannergooding <10487869+tannergooding@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 1, 2026 14:25
@github-actionsgithub-actionsBot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Jun 1, 2026
CopilotAI changed the title [WIP] Add HWIntrinsicFlags for bool and scalar T trackingTrack bool-returning and scalar-T-returning HW intrinsics via flagsJun 1, 2026
CopilotAI requested a review from tannergoodingJune 1, 2026 14:30
@tannergooding
tannergooding marked this pull request as ready for review June 1, 2026 14:41
CopilotAI review requested due to automatic review settings June 1, 2026 14:41
@tannergooding

Copy link
Copy Markdown
Member

CC. @EgorBo, the downside of this is that we were out of flag space and so it extends it up to uint64_t.

I think there's likely cleanup possible and we can free up space, but I expect that's more involved and requires careful thought.

CopilotAI left a comment

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.

Pull request overview

This PR centralizes knowledge about certain hardware intrinsics that return either a boolean (conceptually TYP_INT in range [0, 1]) or a scalar of the SIMD base type, by encoding that information as flags in the HW intrinsic table and switching consumers over to flag queries.

Changes:

  • Widen HWIntrinsicFlag to uint64_t and add common flags for ReturnsBoolean and ReturnsScalarT, exposed via HWIntrinsicInfo.
  • Tag relevant xarch/arm64 intrinsic table entries with the new return-shape flags.
  • Refactor assertionprop.cpp, rangecheck.cpp, and valuenum.cpp to query HWIntrinsicInfo::{ReturnsBoolean,ReturnsScalarT} instead of maintaining long intrinsic-ID switches.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
src/coreclr/jit/valuenum.cppUses HW intrinsic return-shape flags to simplify IsVNNeverNegative handling for HWI VNs.
src/coreclr/jit/rangecheck.cppUses HW intrinsic return-shape flags to derive ranges for HWI VNs without ID enumeration.
src/coreclr/jit/assertionprop.cppUses HW intrinsic return-shape flags to derive symbolic integer ranges for GT_HWINTRINSIC.
src/coreclr/jit/hwintrinsiclistxarch.hTags xarch intrinsics (equality/test/compare, GetElement/ToScalar/Extract) with new return-shape flags.
src/coreclr/jit/hwintrinsiclistarm64.hTags arm64 intrinsics (equality, GetElement/ToScalar/Extract) with new return-shape flags.
src/coreclr/jit/hwintrinsic.hWidens flag type and adds ReturnsBoolean / ReturnsScalarT APIs on HWIntrinsicInfo.

Comment threadsrc/coreclr/jit/valuenum.cpp Outdated
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
CopilotAI requested a review from EgorBoJune 1, 2026 19:10
Comment threadsrc/coreclr/jit/rangecheck.cpp Outdated
…heck
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 1, 2026 19:29
CopilotAI requested a review from EgorBoJune 1, 2026 19:30
Comment threadsrc/coreclr/jit/rangecheck.cpp
Comment threadsrc/coreclr/jit/rangecheck.cpp
…unc blocks
Co-authored-by: tannergooding <10487869+tannergooding@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 2, 2026 00:07
CopilotAI requested a review from tannergoodingJune 2, 2026 00:08
@tannergooding
tannergooding merged commit 4daceb8 into mainJun 8, 2026
140 of 142 checks passed
@tannergooding
tannergooding deleted the copilot/track-bool-returning-intrinsics branch June 8, 2026 13:56
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 9, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 10, 2026
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.

Track bool returning intrinsics via a flag

4 participants

@tannergooding@EgorBo
, '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

Track bool-returning and scalar-T-returning HW intrinsics via flags - #128848

Merged
tannergooding merged 5 commits into
mainfrom
copilot/track-bool-returning-intrinsics
Jun 8, 2026
Merged

Track bool-returning and scalar-T-returning HW intrinsics via flags#128848
tannergooding merged 5 commits into
mainfrom
copilot/track-bool-returning-intrinsics

Conversation

CopilotAI commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Several hardware intrinsics are known to return bool or a scalar T, but consumers (assertionprop, rangecheck, valuenum) tracked them via long ID switches that had to be kept in sync. Replace those with flags on the intrinsic table queryable through HWIntrinsicInfo.

hwintrinsic.h

  • Widen HWIntrinsicFlag to uint64_t (arm64 was out of bits in the 32-bit space).
  • Add HW_Flag_ReturnsBoolean and HW_Flag_ReturnsScalarT as common flags.
  • Add HWIntrinsicInfo::ReturnsBoolean / ReturnsScalarT static APIs, grouped after ReturnsPerElementMask.

hwintrinsiclist*.h

Tag the entries previously enumerated in the consumer switches (skipping HW_Flag_InvalidNodeId entries per the issue):

  • xarch: 24 ReturnsBoolean (Vector{128,256,512}_op_{Equality,Inequality}, X86Base.CompareScalar{Ordered,Unordered}*, X86Base/AVXTest{C,Z,NotZAndNotC}) and 8 ReturnsScalarT (Vector{128,256,512}.{GetElement,ToScalar}, X86Base[_X64].Extract).
  • arm64: 4 ReturnsBoolean (Vector{64,128}_op_{Equality,Inequality}) and 5 ReturnsScalarT (Vector{64,128}.{GetElement,ToScalar}, AdvSimd.Extract).

Consumer refactors

assertionprop.cpp, rangecheck.cpp, and valuenum.cpp no longer enumerate intrinsic IDs in their GT_HWINTRINSIC / VNF_HWI_* switches. A flag check runs before the remaining switch and preserves prior semantics, e.g.:

if (HWIntrinsicInfo::ReturnsBoolean(id))
{
rangeType = TYP_INT;
range = Range(Limit(Limit::keConstant, 0), Limit(Limit::keConstant, 1));
break;
}
if (HWIntrinsicInfo::ReturnsScalarT(id) && varTypeIsSmall(simdBaseType))
{
rangeType = simdBaseType;
break;
}

For IsVNNeverNegative the scalar-T path keeps its base-type guard (only TYP_UBYTE/TYP_USHORT continue), matching the previous case-by-case behavior. The HW intrinsic checks in IsVNNeverNegative and rangecheck.cpp now use IsVNHWIntrinsicFunc, eliminating the manual VNF_HWI_FIRST/VNF_HWI_LAST range check, the explicit NamedIntrinsic cast, the separate GetVNHWIntrinsicSizeAndBaseType call. Both IsVNHWIntrinsicFunc blocks are correctly wrapped in #if defined(FEATURE_HW_INTRINSICS) / #endif guards.

SVE bool/scalar-T intrinsics are intentionally not tagged here — they were never in the original switches and remain covered by the existing TODO-SVE notes.

CopilotAI review requested due to automatic review settings June 1, 2026 14:08
CopilotAI removed the request for review from CopilotJune 1, 2026 14:08
CopilotAI linked an issue Jun 1, 2026 that may be closed by this pull request
Co-authored-by: tannergooding <10487869+tannergooding@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 1, 2026 14:25
@github-actionsgithub-actionsBot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Jun 1, 2026
CopilotAI changed the title [WIP] Add HWIntrinsicFlags for bool and scalar T trackingTrack bool-returning and scalar-T-returning HW intrinsics via flagsJun 1, 2026
CopilotAI requested a review from tannergoodingJune 1, 2026 14:30
@tannergooding
tannergooding marked this pull request as ready for review June 1, 2026 14:41
CopilotAI review requested due to automatic review settings June 1, 2026 14:41
@tannergooding

Copy link
Copy Markdown
Member

CC. @EgorBo, the downside of this is that we were out of flag space and so it extends it up to uint64_t.

I think there's likely cleanup possible and we can free up space, but I expect that's more involved and requires careful thought.

CopilotAI left a comment

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.

Pull request overview

This PR centralizes knowledge about certain hardware intrinsics that return either a boolean (conceptually TYP_INT in range [0, 1]) or a scalar of the SIMD base type, by encoding that information as flags in the HW intrinsic table and switching consumers over to flag queries.

Changes:

  • Widen HWIntrinsicFlag to uint64_t and add common flags for ReturnsBoolean and ReturnsScalarT, exposed via HWIntrinsicInfo.
  • Tag relevant xarch/arm64 intrinsic table entries with the new return-shape flags.
  • Refactor assertionprop.cpp, rangecheck.cpp, and valuenum.cpp to query HWIntrinsicInfo::{ReturnsBoolean,ReturnsScalarT} instead of maintaining long intrinsic-ID switches.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
src/coreclr/jit/valuenum.cppUses HW intrinsic return-shape flags to simplify IsVNNeverNegative handling for HWI VNs.
src/coreclr/jit/rangecheck.cppUses HW intrinsic return-shape flags to derive ranges for HWI VNs without ID enumeration.
src/coreclr/jit/assertionprop.cppUses HW intrinsic return-shape flags to derive symbolic integer ranges for GT_HWINTRINSIC.
src/coreclr/jit/hwintrinsiclistxarch.hTags xarch intrinsics (equality/test/compare, GetElement/ToScalar/Extract) with new return-shape flags.
src/coreclr/jit/hwintrinsiclistarm64.hTags arm64 intrinsics (equality, GetElement/ToScalar/Extract) with new return-shape flags.
src/coreclr/jit/hwintrinsic.hWidens flag type and adds ReturnsBoolean / ReturnsScalarT APIs on HWIntrinsicInfo.

Comment threadsrc/coreclr/jit/valuenum.cpp Outdated
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
CopilotAI requested a review from EgorBoJune 1, 2026 19:10
Comment threadsrc/coreclr/jit/rangecheck.cpp Outdated
…heck
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 1, 2026 19:29
CopilotAI requested a review from EgorBoJune 1, 2026 19:30
Comment threadsrc/coreclr/jit/rangecheck.cpp
Comment threadsrc/coreclr/jit/rangecheck.cpp
…unc blocks
Co-authored-by: tannergooding <10487869+tannergooding@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 2, 2026 00:07
CopilotAI requested a review from tannergoodingJune 2, 2026 00:08
@tannergooding
tannergooding merged commit 4daceb8 into mainJun 8, 2026
140 of 142 checks passed
@tannergooding
tannergooding deleted the copilot/track-bool-returning-intrinsics branch June 8, 2026 13:56
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 9, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 10, 2026
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.

Track bool returning intrinsics via a flag

4 participants

@tannergooding@EgorBo
, '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

Track bool-returning and scalar-T-returning HW intrinsics via flags - #128848

Merged
tannergooding merged 5 commits into
mainfrom
copilot/track-bool-returning-intrinsics
Jun 8, 2026
Merged

Track bool-returning and scalar-T-returning HW intrinsics via flags#128848
tannergooding merged 5 commits into
mainfrom
copilot/track-bool-returning-intrinsics

Conversation

CopilotAI commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Several hardware intrinsics are known to return bool or a scalar T, but consumers (assertionprop, rangecheck, valuenum) tracked them via long ID switches that had to be kept in sync. Replace those with flags on the intrinsic table queryable through HWIntrinsicInfo.

hwintrinsic.h

  • Widen HWIntrinsicFlag to uint64_t (arm64 was out of bits in the 32-bit space).
  • Add HW_Flag_ReturnsBoolean and HW_Flag_ReturnsScalarT as common flags.
  • Add HWIntrinsicInfo::ReturnsBoolean / ReturnsScalarT static APIs, grouped after ReturnsPerElementMask.

hwintrinsiclist*.h

Tag the entries previously enumerated in the consumer switches (skipping HW_Flag_InvalidNodeId entries per the issue):

  • xarch: 24 ReturnsBoolean (Vector{128,256,512}_op_{Equality,Inequality}, X86Base.CompareScalar{Ordered,Unordered}*, X86Base/AVXTest{C,Z,NotZAndNotC}) and 8 ReturnsScalarT (Vector{128,256,512}.{GetElement,ToScalar}, X86Base[_X64].Extract).
  • arm64: 4 ReturnsBoolean (Vector{64,128}_op_{Equality,Inequality}) and 5 ReturnsScalarT (Vector{64,128}.{GetElement,ToScalar}, AdvSimd.Extract).

Consumer refactors

assertionprop.cpp, rangecheck.cpp, and valuenum.cpp no longer enumerate intrinsic IDs in their GT_HWINTRINSIC / VNF_HWI_* switches. A flag check runs before the remaining switch and preserves prior semantics, e.g.:

if (HWIntrinsicInfo::ReturnsBoolean(id))
{
rangeType = TYP_INT;
range = Range(Limit(Limit::keConstant, 0), Limit(Limit::keConstant, 1));
break;
}
if (HWIntrinsicInfo::ReturnsScalarT(id) && varTypeIsSmall(simdBaseType))
{
rangeType = simdBaseType;
break;
}

For IsVNNeverNegative the scalar-T path keeps its base-type guard (only TYP_UBYTE/TYP_USHORT continue), matching the previous case-by-case behavior. The HW intrinsic checks in IsVNNeverNegative and rangecheck.cpp now use IsVNHWIntrinsicFunc, eliminating the manual VNF_HWI_FIRST/VNF_HWI_LAST range check, the explicit NamedIntrinsic cast, the separate GetVNHWIntrinsicSizeAndBaseType call. Both IsVNHWIntrinsicFunc blocks are correctly wrapped in #if defined(FEATURE_HW_INTRINSICS) / #endif guards.

SVE bool/scalar-T intrinsics are intentionally not tagged here — they were never in the original switches and remain covered by the existing TODO-SVE notes.

CopilotAI review requested due to automatic review settings June 1, 2026 14:08
CopilotAI removed the request for review from CopilotJune 1, 2026 14:08
CopilotAI linked an issue Jun 1, 2026 that may be closed by this pull request
Co-authored-by: tannergooding <10487869+tannergooding@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 1, 2026 14:25
@github-actionsgithub-actionsBot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Jun 1, 2026
CopilotAI changed the title [WIP] Add HWIntrinsicFlags for bool and scalar T trackingTrack bool-returning and scalar-T-returning HW intrinsics via flagsJun 1, 2026
CopilotAI requested a review from tannergoodingJune 1, 2026 14:30
@tannergooding
tannergooding marked this pull request as ready for review June 1, 2026 14:41
CopilotAI review requested due to automatic review settings June 1, 2026 14:41
@tannergooding

Copy link
Copy Markdown
Member

CC. @EgorBo, the downside of this is that we were out of flag space and so it extends it up to uint64_t.

I think there's likely cleanup possible and we can free up space, but I expect that's more involved and requires careful thought.

CopilotAI left a comment

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.

Pull request overview

This PR centralizes knowledge about certain hardware intrinsics that return either a boolean (conceptually TYP_INT in range [0, 1]) or a scalar of the SIMD base type, by encoding that information as flags in the HW intrinsic table and switching consumers over to flag queries.

Changes:

  • Widen HWIntrinsicFlag to uint64_t and add common flags for ReturnsBoolean and ReturnsScalarT, exposed via HWIntrinsicInfo.
  • Tag relevant xarch/arm64 intrinsic table entries with the new return-shape flags.
  • Refactor assertionprop.cpp, rangecheck.cpp, and valuenum.cpp to query HWIntrinsicInfo::{ReturnsBoolean,ReturnsScalarT} instead of maintaining long intrinsic-ID switches.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
src/coreclr/jit/valuenum.cppUses HW intrinsic return-shape flags to simplify IsVNNeverNegative handling for HWI VNs.
src/coreclr/jit/rangecheck.cppUses HW intrinsic return-shape flags to derive ranges for HWI VNs without ID enumeration.
src/coreclr/jit/assertionprop.cppUses HW intrinsic return-shape flags to derive symbolic integer ranges for GT_HWINTRINSIC.
src/coreclr/jit/hwintrinsiclistxarch.hTags xarch intrinsics (equality/test/compare, GetElement/ToScalar/Extract) with new return-shape flags.
src/coreclr/jit/hwintrinsiclistarm64.hTags arm64 intrinsics (equality, GetElement/ToScalar/Extract) with new return-shape flags.
src/coreclr/jit/hwintrinsic.hWidens flag type and adds ReturnsBoolean / ReturnsScalarT APIs on HWIntrinsicInfo.

Comment threadsrc/coreclr/jit/valuenum.cpp Outdated
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
CopilotAI requested a review from EgorBoJune 1, 2026 19:10
Comment threadsrc/coreclr/jit/rangecheck.cpp Outdated
…heck
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 1, 2026 19:29
CopilotAI requested a review from EgorBoJune 1, 2026 19:30
Comment threadsrc/coreclr/jit/rangecheck.cpp
Comment threadsrc/coreclr/jit/rangecheck.cpp
…unc blocks
Co-authored-by: tannergooding <10487869+tannergooding@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 2, 2026 00:07
CopilotAI requested a review from tannergoodingJune 2, 2026 00:08
@tannergooding
tannergooding merged commit 4daceb8 into mainJun 8, 2026
140 of 142 checks passed
@tannergooding
tannergooding deleted the copilot/track-bool-returning-intrinsics branch June 8, 2026 13:56
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 9, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 10, 2026
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.

Track bool returning intrinsics via a flag

4 participants

@tannergooding@EgorBo
, '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

Track bool-returning and scalar-T-returning HW intrinsics via flags - #128848

Merged
tannergooding merged 5 commits into
mainfrom
copilot/track-bool-returning-intrinsics
Jun 8, 2026
Merged

Track bool-returning and scalar-T-returning HW intrinsics via flags#128848
tannergooding merged 5 commits into
mainfrom
copilot/track-bool-returning-intrinsics

Conversation

CopilotAI commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Several hardware intrinsics are known to return bool or a scalar T, but consumers (assertionprop, rangecheck, valuenum) tracked them via long ID switches that had to be kept in sync. Replace those with flags on the intrinsic table queryable through HWIntrinsicInfo.

hwintrinsic.h

  • Widen HWIntrinsicFlag to uint64_t (arm64 was out of bits in the 32-bit space).
  • Add HW_Flag_ReturnsBoolean and HW_Flag_ReturnsScalarT as common flags.
  • Add HWIntrinsicInfo::ReturnsBoolean / ReturnsScalarT static APIs, grouped after ReturnsPerElementMask.

hwintrinsiclist*.h

Tag the entries previously enumerated in the consumer switches (skipping HW_Flag_InvalidNodeId entries per the issue):

  • xarch: 24 ReturnsBoolean (Vector{128,256,512}_op_{Equality,Inequality}, X86Base.CompareScalar{Ordered,Unordered}*, X86Base/AVXTest{C,Z,NotZAndNotC}) and 8 ReturnsScalarT (Vector{128,256,512}.{GetElement,ToScalar}, X86Base[_X64].Extract).
  • arm64: 4 ReturnsBoolean (Vector{64,128}_op_{Equality,Inequality}) and 5 ReturnsScalarT (Vector{64,128}.{GetElement,ToScalar}, AdvSimd.Extract).

Consumer refactors

assertionprop.cpp, rangecheck.cpp, and valuenum.cpp no longer enumerate intrinsic IDs in their GT_HWINTRINSIC / VNF_HWI_* switches. A flag check runs before the remaining switch and preserves prior semantics, e.g.:

if (HWIntrinsicInfo::ReturnsBoolean(id))
{
rangeType = TYP_INT;
range = Range(Limit(Limit::keConstant, 0), Limit(Limit::keConstant, 1));
break;
}
if (HWIntrinsicInfo::ReturnsScalarT(id) && varTypeIsSmall(simdBaseType))
{
rangeType = simdBaseType;
break;
}

For IsVNNeverNegative the scalar-T path keeps its base-type guard (only TYP_UBYTE/TYP_USHORT continue), matching the previous case-by-case behavior. The HW intrinsic checks in IsVNNeverNegative and rangecheck.cpp now use IsVNHWIntrinsicFunc, eliminating the manual VNF_HWI_FIRST/VNF_HWI_LAST range check, the explicit NamedIntrinsic cast, the separate GetVNHWIntrinsicSizeAndBaseType call. Both IsVNHWIntrinsicFunc blocks are correctly wrapped in #if defined(FEATURE_HW_INTRINSICS) / #endif guards.

SVE bool/scalar-T intrinsics are intentionally not tagged here — they were never in the original switches and remain covered by the existing TODO-SVE notes.

CopilotAI review requested due to automatic review settings June 1, 2026 14:08
CopilotAI removed the request for review from CopilotJune 1, 2026 14:08
CopilotAI linked an issue Jun 1, 2026 that may be closed by this pull request
Co-authored-by: tannergooding <10487869+tannergooding@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 1, 2026 14:25
@github-actionsgithub-actionsBot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Jun 1, 2026
CopilotAI changed the title [WIP] Add HWIntrinsicFlags for bool and scalar T trackingTrack bool-returning and scalar-T-returning HW intrinsics via flagsJun 1, 2026
CopilotAI requested a review from tannergoodingJune 1, 2026 14:30
@tannergooding
tannergooding marked this pull request as ready for review June 1, 2026 14:41
CopilotAI review requested due to automatic review settings June 1, 2026 14:41
@tannergooding

Copy link
Copy Markdown
Member

CC. @EgorBo, the downside of this is that we were out of flag space and so it extends it up to uint64_t.

I think there's likely cleanup possible and we can free up space, but I expect that's more involved and requires careful thought.

CopilotAI left a comment

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.

Pull request overview

This PR centralizes knowledge about certain hardware intrinsics that return either a boolean (conceptually TYP_INT in range [0, 1]) or a scalar of the SIMD base type, by encoding that information as flags in the HW intrinsic table and switching consumers over to flag queries.

Changes:

  • Widen HWIntrinsicFlag to uint64_t and add common flags for ReturnsBoolean and ReturnsScalarT, exposed via HWIntrinsicInfo.
  • Tag relevant xarch/arm64 intrinsic table entries with the new return-shape flags.
  • Refactor assertionprop.cpp, rangecheck.cpp, and valuenum.cpp to query HWIntrinsicInfo::{ReturnsBoolean,ReturnsScalarT} instead of maintaining long intrinsic-ID switches.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
src/coreclr/jit/valuenum.cppUses HW intrinsic return-shape flags to simplify IsVNNeverNegative handling for HWI VNs.
src/coreclr/jit/rangecheck.cppUses HW intrinsic return-shape flags to derive ranges for HWI VNs without ID enumeration.
src/coreclr/jit/assertionprop.cppUses HW intrinsic return-shape flags to derive symbolic integer ranges for GT_HWINTRINSIC.
src/coreclr/jit/hwintrinsiclistxarch.hTags xarch intrinsics (equality/test/compare, GetElement/ToScalar/Extract) with new return-shape flags.
src/coreclr/jit/hwintrinsiclistarm64.hTags arm64 intrinsics (equality, GetElement/ToScalar/Extract) with new return-shape flags.
src/coreclr/jit/hwintrinsic.hWidens flag type and adds ReturnsBoolean / ReturnsScalarT APIs on HWIntrinsicInfo.

Comment threadsrc/coreclr/jit/valuenum.cpp Outdated
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
CopilotAI requested a review from EgorBoJune 1, 2026 19:10
Comment threadsrc/coreclr/jit/rangecheck.cpp Outdated
…heck
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 1, 2026 19:29
CopilotAI requested a review from EgorBoJune 1, 2026 19:30
Comment threadsrc/coreclr/jit/rangecheck.cpp
Comment threadsrc/coreclr/jit/rangecheck.cpp
…unc blocks
Co-authored-by: tannergooding <10487869+tannergooding@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 2, 2026 00:07
CopilotAI requested a review from tannergoodingJune 2, 2026 00:08
@tannergooding
tannergooding merged commit 4daceb8 into mainJun 8, 2026
140 of 142 checks passed
@tannergooding
tannergooding deleted the copilot/track-bool-returning-intrinsics branch June 8, 2026 13:56
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 9, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 10, 2026
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.

Track bool returning intrinsics via a flag

4 participants

@tannergooding@EgorBo
, '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

Track bool-returning and scalar-T-returning HW intrinsics via flags - #128848

Merged
tannergooding merged 5 commits into
mainfrom
copilot/track-bool-returning-intrinsics
Jun 8, 2026
Merged

Track bool-returning and scalar-T-returning HW intrinsics via flags#128848
tannergooding merged 5 commits into
mainfrom
copilot/track-bool-returning-intrinsics

Conversation

CopilotAI commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Several hardware intrinsics are known to return bool or a scalar T, but consumers (assertionprop, rangecheck, valuenum) tracked them via long ID switches that had to be kept in sync. Replace those with flags on the intrinsic table queryable through HWIntrinsicInfo.

hwintrinsic.h

  • Widen HWIntrinsicFlag to uint64_t (arm64 was out of bits in the 32-bit space).
  • Add HW_Flag_ReturnsBoolean and HW_Flag_ReturnsScalarT as common flags.
  • Add HWIntrinsicInfo::ReturnsBoolean / ReturnsScalarT static APIs, grouped after ReturnsPerElementMask.

hwintrinsiclist*.h

Tag the entries previously enumerated in the consumer switches (skipping HW_Flag_InvalidNodeId entries per the issue):

  • xarch: 24 ReturnsBoolean (Vector{128,256,512}_op_{Equality,Inequality}, X86Base.CompareScalar{Ordered,Unordered}*, X86Base/AVXTest{C,Z,NotZAndNotC}) and 8 ReturnsScalarT (Vector{128,256,512}.{GetElement,ToScalar}, X86Base[_X64].Extract).
  • arm64: 4 ReturnsBoolean (Vector{64,128}_op_{Equality,Inequality}) and 5 ReturnsScalarT (Vector{64,128}.{GetElement,ToScalar}, AdvSimd.Extract).

Consumer refactors

assertionprop.cpp, rangecheck.cpp, and valuenum.cpp no longer enumerate intrinsic IDs in their GT_HWINTRINSIC / VNF_HWI_* switches. A flag check runs before the remaining switch and preserves prior semantics, e.g.:

if (HWIntrinsicInfo::ReturnsBoolean(id))
{
rangeType = TYP_INT;
range = Range(Limit(Limit::keConstant, 0), Limit(Limit::keConstant, 1));
break;
}
if (HWIntrinsicInfo::ReturnsScalarT(id) && varTypeIsSmall(simdBaseType))
{
rangeType = simdBaseType;
break;
}

For IsVNNeverNegative the scalar-T path keeps its base-type guard (only TYP_UBYTE/TYP_USHORT continue), matching the previous case-by-case behavior. The HW intrinsic checks in IsVNNeverNegative and rangecheck.cpp now use IsVNHWIntrinsicFunc, eliminating the manual VNF_HWI_FIRST/VNF_HWI_LAST range check, the explicit NamedIntrinsic cast, the separate GetVNHWIntrinsicSizeAndBaseType call. Both IsVNHWIntrinsicFunc blocks are correctly wrapped in #if defined(FEATURE_HW_INTRINSICS) / #endif guards.

SVE bool/scalar-T intrinsics are intentionally not tagged here — they were never in the original switches and remain covered by the existing TODO-SVE notes.

CopilotAI review requested due to automatic review settings June 1, 2026 14:08
CopilotAI removed the request for review from CopilotJune 1, 2026 14:08
CopilotAI linked an issue Jun 1, 2026 that may be closed by this pull request
Co-authored-by: tannergooding <10487869+tannergooding@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 1, 2026 14:25
@github-actionsgithub-actionsBot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Jun 1, 2026
CopilotAI changed the title [WIP] Add HWIntrinsicFlags for bool and scalar T trackingTrack bool-returning and scalar-T-returning HW intrinsics via flagsJun 1, 2026
CopilotAI requested a review from tannergoodingJune 1, 2026 14:30
@tannergooding
tannergooding marked this pull request as ready for review June 1, 2026 14:41
CopilotAI review requested due to automatic review settings June 1, 2026 14:41
@tannergooding

Copy link
Copy Markdown
Member

CC. @EgorBo, the downside of this is that we were out of flag space and so it extends it up to uint64_t.

I think there's likely cleanup possible and we can free up space, but I expect that's more involved and requires careful thought.

CopilotAI left a comment

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.

Pull request overview

This PR centralizes knowledge about certain hardware intrinsics that return either a boolean (conceptually TYP_INT in range [0, 1]) or a scalar of the SIMD base type, by encoding that information as flags in the HW intrinsic table and switching consumers over to flag queries.

Changes:

  • Widen HWIntrinsicFlag to uint64_t and add common flags for ReturnsBoolean and ReturnsScalarT, exposed via HWIntrinsicInfo.
  • Tag relevant xarch/arm64 intrinsic table entries with the new return-shape flags.
  • Refactor assertionprop.cpp, rangecheck.cpp, and valuenum.cpp to query HWIntrinsicInfo::{ReturnsBoolean,ReturnsScalarT} instead of maintaining long intrinsic-ID switches.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
src/coreclr/jit/valuenum.cppUses HW intrinsic return-shape flags to simplify IsVNNeverNegative handling for HWI VNs.
src/coreclr/jit/rangecheck.cppUses HW intrinsic return-shape flags to derive ranges for HWI VNs without ID enumeration.
src/coreclr/jit/assertionprop.cppUses HW intrinsic return-shape flags to derive symbolic integer ranges for GT_HWINTRINSIC.
src/coreclr/jit/hwintrinsiclistxarch.hTags xarch intrinsics (equality/test/compare, GetElement/ToScalar/Extract) with new return-shape flags.
src/coreclr/jit/hwintrinsiclistarm64.hTags arm64 intrinsics (equality, GetElement/ToScalar/Extract) with new return-shape flags.
src/coreclr/jit/hwintrinsic.hWidens flag type and adds ReturnsBoolean / ReturnsScalarT APIs on HWIntrinsicInfo.

Comment threadsrc/coreclr/jit/valuenum.cpp Outdated
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
CopilotAI requested a review from EgorBoJune 1, 2026 19:10
Comment threadsrc/coreclr/jit/rangecheck.cpp Outdated
…heck
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 1, 2026 19:29
CopilotAI requested a review from EgorBoJune 1, 2026 19:30
Comment threadsrc/coreclr/jit/rangecheck.cpp
Comment threadsrc/coreclr/jit/rangecheck.cpp
…unc blocks
Co-authored-by: tannergooding <10487869+tannergooding@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 2, 2026 00:07
CopilotAI requested a review from tannergoodingJune 2, 2026 00:08
@tannergooding
tannergooding merged commit 4daceb8 into mainJun 8, 2026
140 of 142 checks passed
@tannergooding
tannergooding deleted the copilot/track-bool-returning-intrinsics branch June 8, 2026 13:56
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 9, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 10, 2026
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.

Track bool returning intrinsics via a flag

4 participants

@tannergooding@EgorBo
, '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

Track bool-returning and scalar-T-returning HW intrinsics via flags - #128848

Merged
tannergooding merged 5 commits into
mainfrom
copilot/track-bool-returning-intrinsics
Jun 8, 2026
Merged

Track bool-returning and scalar-T-returning HW intrinsics via flags#128848
tannergooding merged 5 commits into
mainfrom
copilot/track-bool-returning-intrinsics

Conversation

CopilotAI commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Several hardware intrinsics are known to return bool or a scalar T, but consumers (assertionprop, rangecheck, valuenum) tracked them via long ID switches that had to be kept in sync. Replace those with flags on the intrinsic table queryable through HWIntrinsicInfo.

hwintrinsic.h

  • Widen HWIntrinsicFlag to uint64_t (arm64 was out of bits in the 32-bit space).
  • Add HW_Flag_ReturnsBoolean and HW_Flag_ReturnsScalarT as common flags.
  • Add HWIntrinsicInfo::ReturnsBoolean / ReturnsScalarT static APIs, grouped after ReturnsPerElementMask.

hwintrinsiclist*.h

Tag the entries previously enumerated in the consumer switches (skipping HW_Flag_InvalidNodeId entries per the issue):

  • xarch: 24 ReturnsBoolean (Vector{128,256,512}_op_{Equality,Inequality}, X86Base.CompareScalar{Ordered,Unordered}*, X86Base/AVXTest{C,Z,NotZAndNotC}) and 8 ReturnsScalarT (Vector{128,256,512}.{GetElement,ToScalar}, X86Base[_X64].Extract).
  • arm64: 4 ReturnsBoolean (Vector{64,128}_op_{Equality,Inequality}) and 5 ReturnsScalarT (Vector{64,128}.{GetElement,ToScalar}, AdvSimd.Extract).

Consumer refactors

assertionprop.cpp, rangecheck.cpp, and valuenum.cpp no longer enumerate intrinsic IDs in their GT_HWINTRINSIC / VNF_HWI_* switches. A flag check runs before the remaining switch and preserves prior semantics, e.g.:

if (HWIntrinsicInfo::ReturnsBoolean(id))
{
rangeType = TYP_INT;
range = Range(Limit(Limit::keConstant, 0), Limit(Limit::keConstant, 1));
break;
}
if (HWIntrinsicInfo::ReturnsScalarT(id) && varTypeIsSmall(simdBaseType))
{
rangeType = simdBaseType;
break;
}

For IsVNNeverNegative the scalar-T path keeps its base-type guard (only TYP_UBYTE/TYP_USHORT continue), matching the previous case-by-case behavior. The HW intrinsic checks in IsVNNeverNegative and rangecheck.cpp now use IsVNHWIntrinsicFunc, eliminating the manual VNF_HWI_FIRST/VNF_HWI_LAST range check, the explicit NamedIntrinsic cast, the separate GetVNHWIntrinsicSizeAndBaseType call. Both IsVNHWIntrinsicFunc blocks are correctly wrapped in #if defined(FEATURE_HW_INTRINSICS) / #endif guards.

SVE bool/scalar-T intrinsics are intentionally not tagged here — they were never in the original switches and remain covered by the existing TODO-SVE notes.

CopilotAI review requested due to automatic review settings June 1, 2026 14:08
CopilotAI removed the request for review from CopilotJune 1, 2026 14:08
CopilotAI linked an issue Jun 1, 2026 that may be closed by this pull request
Co-authored-by: tannergooding <10487869+tannergooding@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 1, 2026 14:25
@github-actionsgithub-actionsBot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Jun 1, 2026
CopilotAI changed the title [WIP] Add HWIntrinsicFlags for bool and scalar T trackingTrack bool-returning and scalar-T-returning HW intrinsics via flagsJun 1, 2026
CopilotAI requested a review from tannergoodingJune 1, 2026 14:30
@tannergooding
tannergooding marked this pull request as ready for review June 1, 2026 14:41
CopilotAI review requested due to automatic review settings June 1, 2026 14:41
@tannergooding

Copy link
Copy Markdown
Member

CC. @EgorBo, the downside of this is that we were out of flag space and so it extends it up to uint64_t.

I think there's likely cleanup possible and we can free up space, but I expect that's more involved and requires careful thought.

CopilotAI left a comment

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.

Pull request overview

This PR centralizes knowledge about certain hardware intrinsics that return either a boolean (conceptually TYP_INT in range [0, 1]) or a scalar of the SIMD base type, by encoding that information as flags in the HW intrinsic table and switching consumers over to flag queries.

Changes:

  • Widen HWIntrinsicFlag to uint64_t and add common flags for ReturnsBoolean and ReturnsScalarT, exposed via HWIntrinsicInfo.
  • Tag relevant xarch/arm64 intrinsic table entries with the new return-shape flags.
  • Refactor assertionprop.cpp, rangecheck.cpp, and valuenum.cpp to query HWIntrinsicInfo::{ReturnsBoolean,ReturnsScalarT} instead of maintaining long intrinsic-ID switches.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
src/coreclr/jit/valuenum.cppUses HW intrinsic return-shape flags to simplify IsVNNeverNegative handling for HWI VNs.
src/coreclr/jit/rangecheck.cppUses HW intrinsic return-shape flags to derive ranges for HWI VNs without ID enumeration.
src/coreclr/jit/assertionprop.cppUses HW intrinsic return-shape flags to derive symbolic integer ranges for GT_HWINTRINSIC.
src/coreclr/jit/hwintrinsiclistxarch.hTags xarch intrinsics (equality/test/compare, GetElement/ToScalar/Extract) with new return-shape flags.
src/coreclr/jit/hwintrinsiclistarm64.hTags arm64 intrinsics (equality, GetElement/ToScalar/Extract) with new return-shape flags.
src/coreclr/jit/hwintrinsic.hWidens flag type and adds ReturnsBoolean / ReturnsScalarT APIs on HWIntrinsicInfo.

Comment threadsrc/coreclr/jit/valuenum.cpp Outdated
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
CopilotAI requested a review from EgorBoJune 1, 2026 19:10
Comment threadsrc/coreclr/jit/rangecheck.cpp Outdated
…heck
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 1, 2026 19:29
CopilotAI requested a review from EgorBoJune 1, 2026 19:30
Comment threadsrc/coreclr/jit/rangecheck.cpp
Comment threadsrc/coreclr/jit/rangecheck.cpp
…unc blocks
Co-authored-by: tannergooding <10487869+tannergooding@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 2, 2026 00:07
CopilotAI requested a review from tannergoodingJune 2, 2026 00:08
@tannergooding
tannergooding merged commit 4daceb8 into mainJun 8, 2026
140 of 142 checks passed
@tannergooding
tannergooding deleted the copilot/track-bool-returning-intrinsics branch June 8, 2026 13:56
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 9, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 10, 2026
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.

Track bool returning intrinsics via a flag

4 participants

@tannergooding@EgorBo
, '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

Track bool-returning and scalar-T-returning HW intrinsics via flags - #128848

Merged
tannergooding merged 5 commits into
mainfrom
copilot/track-bool-returning-intrinsics
Jun 8, 2026
Merged

Track bool-returning and scalar-T-returning HW intrinsics via flags#128848
tannergooding merged 5 commits into
mainfrom
copilot/track-bool-returning-intrinsics

Conversation

CopilotAI commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Several hardware intrinsics are known to return bool or a scalar T, but consumers (assertionprop, rangecheck, valuenum) tracked them via long ID switches that had to be kept in sync. Replace those with flags on the intrinsic table queryable through HWIntrinsicInfo.

hwintrinsic.h

  • Widen HWIntrinsicFlag to uint64_t (arm64 was out of bits in the 32-bit space).
  • Add HW_Flag_ReturnsBoolean and HW_Flag_ReturnsScalarT as common flags.
  • Add HWIntrinsicInfo::ReturnsBoolean / ReturnsScalarT static APIs, grouped after ReturnsPerElementMask.

hwintrinsiclist*.h

Tag the entries previously enumerated in the consumer switches (skipping HW_Flag_InvalidNodeId entries per the issue):

  • xarch: 24 ReturnsBoolean (Vector{128,256,512}_op_{Equality,Inequality}, X86Base.CompareScalar{Ordered,Unordered}*, X86Base/AVXTest{C,Z,NotZAndNotC}) and 8 ReturnsScalarT (Vector{128,256,512}.{GetElement,ToScalar}, X86Base[_X64].Extract).
  • arm64: 4 ReturnsBoolean (Vector{64,128}_op_{Equality,Inequality}) and 5 ReturnsScalarT (Vector{64,128}.{GetElement,ToScalar}, AdvSimd.Extract).

Consumer refactors

assertionprop.cpp, rangecheck.cpp, and valuenum.cpp no longer enumerate intrinsic IDs in their GT_HWINTRINSIC / VNF_HWI_* switches. A flag check runs before the remaining switch and preserves prior semantics, e.g.:

if (HWIntrinsicInfo::ReturnsBoolean(id))
{
rangeType = TYP_INT;
range = Range(Limit(Limit::keConstant, 0), Limit(Limit::keConstant, 1));
break;
}
if (HWIntrinsicInfo::ReturnsScalarT(id) && varTypeIsSmall(simdBaseType))
{
rangeType = simdBaseType;
break;
}

For IsVNNeverNegative the scalar-T path keeps its base-type guard (only TYP_UBYTE/TYP_USHORT continue), matching the previous case-by-case behavior. The HW intrinsic checks in IsVNNeverNegative and rangecheck.cpp now use IsVNHWIntrinsicFunc, eliminating the manual VNF_HWI_FIRST/VNF_HWI_LAST range check, the explicit NamedIntrinsic cast, the separate GetVNHWIntrinsicSizeAndBaseType call. Both IsVNHWIntrinsicFunc blocks are correctly wrapped in #if defined(FEATURE_HW_INTRINSICS) / #endif guards.

SVE bool/scalar-T intrinsics are intentionally not tagged here — they were never in the original switches and remain covered by the existing TODO-SVE notes.

CopilotAI review requested due to automatic review settings June 1, 2026 14:08
CopilotAI removed the request for review from CopilotJune 1, 2026 14:08
CopilotAI linked an issue Jun 1, 2026 that may be closed by this pull request
Co-authored-by: tannergooding <10487869+tannergooding@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 1, 2026 14:25
@github-actionsgithub-actionsBot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Jun 1, 2026
CopilotAI changed the title [WIP] Add HWIntrinsicFlags for bool and scalar T trackingTrack bool-returning and scalar-T-returning HW intrinsics via flagsJun 1, 2026
CopilotAI requested a review from tannergoodingJune 1, 2026 14:30
@tannergooding
tannergooding marked this pull request as ready for review June 1, 2026 14:41
CopilotAI review requested due to automatic review settings June 1, 2026 14:41
@tannergooding

Copy link
Copy Markdown
Member

CC. @EgorBo, the downside of this is that we were out of flag space and so it extends it up to uint64_t.

I think there's likely cleanup possible and we can free up space, but I expect that's more involved and requires careful thought.

CopilotAI left a comment

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.

Pull request overview

This PR centralizes knowledge about certain hardware intrinsics that return either a boolean (conceptually TYP_INT in range [0, 1]) or a scalar of the SIMD base type, by encoding that information as flags in the HW intrinsic table and switching consumers over to flag queries.

Changes:

  • Widen HWIntrinsicFlag to uint64_t and add common flags for ReturnsBoolean and ReturnsScalarT, exposed via HWIntrinsicInfo.
  • Tag relevant xarch/arm64 intrinsic table entries with the new return-shape flags.
  • Refactor assertionprop.cpp, rangecheck.cpp, and valuenum.cpp to query HWIntrinsicInfo::{ReturnsBoolean,ReturnsScalarT} instead of maintaining long intrinsic-ID switches.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
src/coreclr/jit/valuenum.cppUses HW intrinsic return-shape flags to simplify IsVNNeverNegative handling for HWI VNs.
src/coreclr/jit/rangecheck.cppUses HW intrinsic return-shape flags to derive ranges for HWI VNs without ID enumeration.
src/coreclr/jit/assertionprop.cppUses HW intrinsic return-shape flags to derive symbolic integer ranges for GT_HWINTRINSIC.
src/coreclr/jit/hwintrinsiclistxarch.hTags xarch intrinsics (equality/test/compare, GetElement/ToScalar/Extract) with new return-shape flags.
src/coreclr/jit/hwintrinsiclistarm64.hTags arm64 intrinsics (equality, GetElement/ToScalar/Extract) with new return-shape flags.
src/coreclr/jit/hwintrinsic.hWidens flag type and adds ReturnsBoolean / ReturnsScalarT APIs on HWIntrinsicInfo.

Comment threadsrc/coreclr/jit/valuenum.cpp Outdated
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
CopilotAI requested a review from EgorBoJune 1, 2026 19:10
Comment threadsrc/coreclr/jit/rangecheck.cpp Outdated
…heck
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 1, 2026 19:29
CopilotAI requested a review from EgorBoJune 1, 2026 19:30
Comment threadsrc/coreclr/jit/rangecheck.cpp
Comment threadsrc/coreclr/jit/rangecheck.cpp
…unc blocks
Co-authored-by: tannergooding <10487869+tannergooding@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 2, 2026 00:07
CopilotAI requested a review from tannergoodingJune 2, 2026 00:08
@tannergooding
tannergooding merged commit 4daceb8 into mainJun 8, 2026
140 of 142 checks passed
@tannergooding
tannergooding deleted the copilot/track-bool-returning-intrinsics branch June 8, 2026 13:56
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 9, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 10, 2026
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.

Track bool returning intrinsics via a flag

4 participants

@tannergooding@EgorBo
, '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

Track bool-returning and scalar-T-returning HW intrinsics via flags - #128848

Merged
tannergooding merged 5 commits into
mainfrom
copilot/track-bool-returning-intrinsics
Jun 8, 2026
Merged

Track bool-returning and scalar-T-returning HW intrinsics via flags#128848
tannergooding merged 5 commits into
mainfrom
copilot/track-bool-returning-intrinsics

Conversation

CopilotAI commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Several hardware intrinsics are known to return bool or a scalar T, but consumers (assertionprop, rangecheck, valuenum) tracked them via long ID switches that had to be kept in sync. Replace those with flags on the intrinsic table queryable through HWIntrinsicInfo.

hwintrinsic.h

  • Widen HWIntrinsicFlag to uint64_t (arm64 was out of bits in the 32-bit space).
  • Add HW_Flag_ReturnsBoolean and HW_Flag_ReturnsScalarT as common flags.
  • Add HWIntrinsicInfo::ReturnsBoolean / ReturnsScalarT static APIs, grouped after ReturnsPerElementMask.

hwintrinsiclist*.h

Tag the entries previously enumerated in the consumer switches (skipping HW_Flag_InvalidNodeId entries per the issue):

  • xarch: 24 ReturnsBoolean (Vector{128,256,512}_op_{Equality,Inequality}, X86Base.CompareScalar{Ordered,Unordered}*, X86Base/AVXTest{C,Z,NotZAndNotC}) and 8 ReturnsScalarT (Vector{128,256,512}.{GetElement,ToScalar}, X86Base[_X64].Extract).
  • arm64: 4 ReturnsBoolean (Vector{64,128}_op_{Equality,Inequality}) and 5 ReturnsScalarT (Vector{64,128}.{GetElement,ToScalar}, AdvSimd.Extract).

Consumer refactors

assertionprop.cpp, rangecheck.cpp, and valuenum.cpp no longer enumerate intrinsic IDs in their GT_HWINTRINSIC / VNF_HWI_* switches. A flag check runs before the remaining switch and preserves prior semantics, e.g.:

if (HWIntrinsicInfo::ReturnsBoolean(id))
{
rangeType = TYP_INT;
range = Range(Limit(Limit::keConstant, 0), Limit(Limit::keConstant, 1));
break;
}
if (HWIntrinsicInfo::ReturnsScalarT(id) && varTypeIsSmall(simdBaseType))
{
rangeType = simdBaseType;
break;
}

For IsVNNeverNegative the scalar-T path keeps its base-type guard (only TYP_UBYTE/TYP_USHORT continue), matching the previous case-by-case behavior. The HW intrinsic checks in IsVNNeverNegative and rangecheck.cpp now use IsVNHWIntrinsicFunc, eliminating the manual VNF_HWI_FIRST/VNF_HWI_LAST range check, the explicit NamedIntrinsic cast, the separate GetVNHWIntrinsicSizeAndBaseType call. Both IsVNHWIntrinsicFunc blocks are correctly wrapped in #if defined(FEATURE_HW_INTRINSICS) / #endif guards.

SVE bool/scalar-T intrinsics are intentionally not tagged here — they were never in the original switches and remain covered by the existing TODO-SVE notes.

CopilotAI review requested due to automatic review settings June 1, 2026 14:08
CopilotAI removed the request for review from CopilotJune 1, 2026 14:08
CopilotAI linked an issue Jun 1, 2026 that may be closed by this pull request
Co-authored-by: tannergooding <10487869+tannergooding@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 1, 2026 14:25
@github-actionsgithub-actionsBot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Jun 1, 2026
CopilotAI changed the title [WIP] Add HWIntrinsicFlags for bool and scalar T trackingTrack bool-returning and scalar-T-returning HW intrinsics via flagsJun 1, 2026
CopilotAI requested a review from tannergoodingJune 1, 2026 14:30
@tannergooding
tannergooding marked this pull request as ready for review June 1, 2026 14:41
CopilotAI review requested due to automatic review settings June 1, 2026 14:41
@tannergooding

Copy link
Copy Markdown
Member

CC. @EgorBo, the downside of this is that we were out of flag space and so it extends it up to uint64_t.

I think there's likely cleanup possible and we can free up space, but I expect that's more involved and requires careful thought.

CopilotAI left a comment

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.

Pull request overview

This PR centralizes knowledge about certain hardware intrinsics that return either a boolean (conceptually TYP_INT in range [0, 1]) or a scalar of the SIMD base type, by encoding that information as flags in the HW intrinsic table and switching consumers over to flag queries.

Changes:

  • Widen HWIntrinsicFlag to uint64_t and add common flags for ReturnsBoolean and ReturnsScalarT, exposed via HWIntrinsicInfo.
  • Tag relevant xarch/arm64 intrinsic table entries with the new return-shape flags.
  • Refactor assertionprop.cpp, rangecheck.cpp, and valuenum.cpp to query HWIntrinsicInfo::{ReturnsBoolean,ReturnsScalarT} instead of maintaining long intrinsic-ID switches.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
src/coreclr/jit/valuenum.cppUses HW intrinsic return-shape flags to simplify IsVNNeverNegative handling for HWI VNs.
src/coreclr/jit/rangecheck.cppUses HW intrinsic return-shape flags to derive ranges for HWI VNs without ID enumeration.
src/coreclr/jit/assertionprop.cppUses HW intrinsic return-shape flags to derive symbolic integer ranges for GT_HWINTRINSIC.
src/coreclr/jit/hwintrinsiclistxarch.hTags xarch intrinsics (equality/test/compare, GetElement/ToScalar/Extract) with new return-shape flags.
src/coreclr/jit/hwintrinsiclistarm64.hTags arm64 intrinsics (equality, GetElement/ToScalar/Extract) with new return-shape flags.
src/coreclr/jit/hwintrinsic.hWidens flag type and adds ReturnsBoolean / ReturnsScalarT APIs on HWIntrinsicInfo.

Comment threadsrc/coreclr/jit/valuenum.cpp Outdated
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
CopilotAI requested a review from EgorBoJune 1, 2026 19:10
Comment threadsrc/coreclr/jit/rangecheck.cpp Outdated
…heck
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 1, 2026 19:29
CopilotAI requested a review from EgorBoJune 1, 2026 19:30
Comment threadsrc/coreclr/jit/rangecheck.cpp
Comment threadsrc/coreclr/jit/rangecheck.cpp
…unc blocks
Co-authored-by: tannergooding <10487869+tannergooding@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJune 2, 2026 00:07
CopilotAI requested a review from tannergoodingJune 2, 2026 00:08
@tannergooding
tannergooding merged commit 4daceb8 into mainJun 8, 2026
140 of 142 checks passed
@tannergooding
tannergooding deleted the copilot/track-bool-returning-intrinsics branch June 8, 2026 13:56
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 9, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 10, 2026
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.

Track bool returning intrinsics via a flag

4 participants

@tannergooding@EgorBo