-
Notifications
You must be signed in to change notification settings - Fork 201
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[NativeAOT-LLVM] Merge may24 #2591
Conversation
Today with a pattern like `ab*c`, IndexOfAnyExcept('b') will be used to skip past the `b`s. But if that pattern is changed to `ab{0, 1000}c`, we'll end up manually iterating, as the current specialization only handles unbounded loops. This adds the minor improvements necessary to also enable using IndexOf for bounded loops.
…, dotnet/sdk, dotnet/xharness (#101843) * Update dependencies from https://github.com/dotnet/xharness build 20240502.1 Microsoft.DotNet.XHarness.CLI , Microsoft.DotNet.XHarness.TestRunners.Common , Microsoft.DotNet.XHarness.TestRunners.Xunit From Version 9.0.0-prerelease.24229.1 -> To Version 9.0.0-prerelease.24252.1 * Update dependencies from https://github.com/dotnet/runtime-assets build 20240502.1 Microsoft.DotNet.CilStrip.Sources , System.ComponentModel.TypeConverter.TestData , System.Data.Common.TestData , System.Drawing.Common.TestData , System.Formats.Tar.TestData , System.IO.Compression.TestData , System.IO.Packaging.TestData , System.Net.TestData , System.Private.Runtime.UnicodeData , System.Runtime.Numerics.TestData , System.Runtime.TimeZoneData , System.Security.Cryptography.X509Certificates.TestData , System.Text.RegularExpressions.TestData , System.Windows.Extensions.TestData From Version 9.0.0-beta.24229.1 -> To Version 9.0.0-beta.24252.1 * Update dependencies from https://github.com/dotnet/xharness build 20240502.1 Microsoft.DotNet.XHarness.CLI , Microsoft.DotNet.XHarness.TestRunners.Common , Microsoft.DotNet.XHarness.TestRunners.Xunit From Version 9.0.0-prerelease.24229.1 -> To Version 9.0.0-prerelease.24252.1 * Update dependencies from https://github.com/dotnet/runtime-assets build 20240502.1 Microsoft.DotNet.CilStrip.Sources , System.ComponentModel.TypeConverter.TestData , System.Data.Common.TestData , System.Drawing.Common.TestData , System.Formats.Tar.TestData , System.IO.Compression.TestData , System.IO.Packaging.TestData , System.Net.TestData , System.Private.Runtime.UnicodeData , System.Runtime.Numerics.TestData , System.Runtime.TimeZoneData , System.Security.Cryptography.X509Certificates.TestData , System.Text.RegularExpressions.TestData , System.Windows.Extensions.TestData From Version 9.0.0-beta.24229.1 -> To Version 9.0.0-beta.24252.1 * Update dependencies from https://github.com/dotnet/xharness build 20240502.1 Microsoft.DotNet.XHarness.CLI , Microsoft.DotNet.XHarness.TestRunners.Common , Microsoft.DotNet.XHarness.TestRunners.Xunit From Version 9.0.0-prerelease.24229.1 -> To Version 9.0.0-prerelease.24252.1 * Update dependencies from https://github.com/dotnet/runtime-assets build 20240502.1 Microsoft.DotNet.CilStrip.Sources , System.ComponentModel.TypeConverter.TestData , System.Data.Common.TestData , System.Drawing.Common.TestData , System.Formats.Tar.TestData , System.IO.Compression.TestData , System.IO.Packaging.TestData , System.Net.TestData , System.Private.Runtime.UnicodeData , System.Runtime.Numerics.TestData , System.Runtime.TimeZoneData , System.Security.Cryptography.X509Certificates.TestData , System.Text.RegularExpressions.TestData , System.Windows.Extensions.TestData From Version 9.0.0-beta.24229.1 -> To Version 9.0.0-beta.24252.1 * Update dependencies from https://github.com/dotnet/xharness build 20240502.1 Microsoft.DotNet.XHarness.CLI , Microsoft.DotNet.XHarness.TestRunners.Common , Microsoft.DotNet.XHarness.TestRunners.Xunit From Version 9.0.0-prerelease.24229.1 -> To Version 9.0.0-prerelease.24252.1 * Update dependencies from https://github.com/dotnet/runtime-assets build 20240502.1 Microsoft.DotNet.CilStrip.Sources , System.ComponentModel.TypeConverter.TestData , System.Data.Common.TestData , System.Drawing.Common.TestData , System.Formats.Tar.TestData , System.IO.Compression.TestData , System.IO.Packaging.TestData , System.Net.TestData , System.Private.Runtime.UnicodeData , System.Runtime.Numerics.TestData , System.Runtime.TimeZoneData , System.Security.Cryptography.X509Certificates.TestData , System.Text.RegularExpressions.TestData , System.Windows.Extensions.TestData From Version 9.0.0-beta.24229.1 -> To Version 9.0.0-beta.24252.1 * Update dependencies from https://github.com/dotnet/runtime build 20240506.1 Microsoft.DotNet.ILCompiler , Microsoft.NET.Sdk.IL , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.ILAsm , runtime.native.System.IO.Ports , System.Reflection.Metadata , System.Reflection.MetadataLoadContext , System.Text.Json , Microsoft.SourceBuild.Intermediate.runtime.linux-x64 From Version 9.0.0-preview.4.24229.1 -> To Version 9.0.0-preview.5.24256.1 * Update dependencies from https://github.com/dotnet/sdk build 20240506.1 Microsoft.SourceBuild.Intermediate.sdk , Microsoft.DotNet.ApiCompat.Task From Version 9.0.100-preview.5.24227.1 -> To Version 9.0.100-preview.5.24256.1 --------- Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
…1870) * Add handling of delay free * refactor lsra code * remove the change that is in separate PR * jit format
…rd (#101577) When a COM interface method is defined with the new keyword, we should avoid creating a new shadowing method on the derived interface, and remove the new keyword when creating implementations of methods. This change tracks whether a method was declared with the new keyword. If it was, we search all the inherited methods for one with the same name and signature. If found, we mark that method as "HiddenOnDerivedInterface". The hidden method may not be found if the method hides a non-COM method. When generating methods, we only generate new shadowing method declarations for inherited methods that aren't already hidden, and we don't generate any stubs for inherited hidden methods. The diff for the generated code for the new test interfaces is shown below. --------- Co-authored-by: Aaron Robinson <arobins@microsoft.com>
Recreates the Process() loop in MarkStep with node that depends on a new copy of itself when the loop needs to be rerun. Within the loop, the new Method and Type nodes are added to the dependency framework analyzer as roots when MarkMethod and MarkType are called, which leads to the OnMarked methods to be called, which forwards to the ProcessType/Method method in MarkStep. The dependency analyzer doesn't do anything interesting yet. In a follow-up I'll move dependencies from the MarkX and ProcessX methods to the DependencyNode types. Makes ILCompiler.DependencyAnalysisFramework output path independent of target architecture. Removes TargetArchitecture and TargetOS from ILLink.Tasks project references. --------- Co-authored-by: vitek-karas <10670590+vitek-karas@users.noreply.github.com>
…ment variable (#101867)
* Add the missing else * Max, MaxAcross, MaxNumber, MaxNumberAcross, Min, MinAcross, MinNumber, MinNumberAcross * Map APIs to instruction * Add test cases * Remove the space * fix the test case * Add handling of delay free * fix some errors * wip: morph optimization * Track TYP_MASK for arm64 * Enable mov predicate registers * jit format
* allow async interruptions on safepoints * ARM64 TODO * report GC ref/byref returns at partially interruptible callsites * enable on all platforms * tweak * fix after rebasing * do not record tailcalls * IsInterruptibleSafePoint * update gccover * turn on new behavior on a gcinfo version * tailcalls tweak * do not report unused returns * CORINFO_HELP_FAIL_FAST should not be a safepoint * treat tailcalls as emitNoGChelper * versioning tweak * enable in CoreCLR (not just for GC stress scenarios) * fix x86 build * other architectures * added a knob DOTNET_InterruptibleCallSites * moved DOTNET_InterruptibleCallSites check to the code manager * JIT_StackProbe should not be a safepoint (stack is not cleaned yet) * Hooked up GCInfo version to R2R file version * formatting * GCStress support for RISC architectures * Update src/coreclr/inc/gcinfo.h Co-authored-by: Jan Kotas <jkotas@microsoft.com> * make InterruptibleSafePointsEnabled static * fix linux-x86 build. * ARM32 actually can`t return 2 GC references, so can filter out R1 early * revert unnecessary change * Update src/coreclr/tools/aot/ILCompiler.Reflection.ReadyToRun/Amd64/GcInfo.cs Co-authored-by: Filip Navara <filip.navara@gmail.com> * removed GCINFO_VERSION cons from GcInfo.cs * Use RBM_INTRET/RBM_INTRET_1 * Update src/coreclr/tools/aot/ILCompiler.Reflection.ReadyToRun/Amd64/GcInfo.cs Co-authored-by: Jan Kotas <jkotas@microsoft.com> * do not skip safe points twice (stress failure) * revert unnecessary change in gccover. * fix after rebase * make sure to check `idIsNoGC` on all codepaths in `emitOutputInstr` * make CORINFO_HELP_CHECK_OBJ a no-gc helper (because we can) * mark a test that tests WaitForPendingFinalizers as GCStressIncompatible * NOP * these helpers should not form GC safe points * require that the new block has BBF_HAS_LABEL * Apply suggestions from code review Co-authored-by: Jakob Botsch Nielsen <Jakob.botsch.nielsen@gmail.com> * updated JITEEVersionIdentifier GUID --------- Co-authored-by: Jan Kotas <jkotas@microsoft.com> Co-authored-by: Filip Navara <filip.navara@gmail.com> Co-authored-by: Jakob Botsch Nielsen <Jakob.botsch.nielsen@gmail.com>
…, SVE_ET_3A, SVE_EU_3A into SVE_AA_3A (#101785) * Merging SVE_AE_3A, SVE_AN_3A, SVE_EP_3A, SVE_ER_3A, SVE_ET_3A, SVE_EU_3A into SVE_AA_3A * Feedback * Fix build * Fix build
Incorporate "stress" profile counts even if we're not optimizing. Scale after synthesis, not before. Fixes #101901.
… debugger (#101864)
* Use REG_INDIRECT_CALL_TARGET_REG for indirect calls on arm64 * Added a comment about NativeAOT dependency at the place wehre we exclude LR from availableIntRegs
We don't support dynamically switching arch/GC anymore with modern dotnet.
* Integrate static web asset endpoints --------- Co-authored-by: Marek Fišera <mara@neptuo.com>
…ext setup (#101318) Remove unnecessary indirect use of managed wcslen from AppContext setup since it pulls in vector dependencies and we already know the length of each string
* remove pragma warning that was required when the code was linked by the tools * move the files
We only have one app domain now. The `Thread` constructor was always just initializing its member variable to the current domain. - Remove `Thread::m_pDomain/GetDomain` - Remove `AppDomain` parameter on `DebuggerPatchSkip` and checking for mismatch (always the current domain, no mismatch)
When I've made a change to optimize the collided exception handling by copying the stack frame iterator state, I've somehow missed adding two callee saved registers, x27 and x28 to a list of callee saved registers and that caused them to not to be copied during the state copying. It has caused failures in one of the coreclr tests when running with specific JIT stress settings. Close #100476
The biarch image is currently unused in our ci builds. Use of the biarch image was added in dotnet/runtime#91019 but the job that used it was disabled for arm64 in dotnet/runtime#92057. dotnet/runtime#90427 tracks adding back the arm64 jobs. The arm64 fullaot job was added in dotnet/runtime#55362 which explains: > We don't ship any products using FullAOT on Linux x64/arm64, but this compilation mode is used for iOS, FullAOT-related issues that affect iOS are likely to be caught by FullAOT on Linux x64/arm64, and it is a lot easier to build, develop, and debug on desktop OSes. If the arm64 job is enabled again in the future, it should be made to use a new entry in `pipeline-with-resources.yml`, instead of modifying the image used for all other linux_arm64 jobs. Fixes dotnet/runtime#101707
…nals build 20240506.2 (#101978) Microsoft.SourceBuild.Intermediate.source-build-externals From Version 9.0.0-alpha.1.24229.1 -> To Version 9.0.0-alpha.1.24256.2 Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
…ad of including the ABI header. (#101997)
…(#101340) Rewrite `lvaAssignVirtualFrameOffsetsToArgs` to make use of the ABI information that was already computed as part of ABI classification in the frontend.
… (#100309)" (#101995) (commit 765ca4e) Revert workaround but leave test in place.
cc @dotnet/nativeaot-llvm - should go green from here. |
@@ -18431,6 +18431,7 @@ bool gc_heap::should_retry_other_heap (int gen_number, size_t size) | |||
} | |||
} | |||
|
|||
#ifdef BACKGROUND_GC |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should go upstream (probably the declarations should be ifdefed out too).
src/coreclr/jit/llvm.cpp
Outdated
@@ -396,7 +396,7 @@ bool Llvm::helperCallMayPhysicallyThrow(CorInfoHelpFunc helperFunc) const | |||
{ FUNC(CORINFO_HELP_ASSIGN_BYREF) }, // Not used on WASM. | |||
|
|||
// Not used in NativeAOT (or at all in some cases). | |||
{ FUNC(CORINFO_HELP_ASSIGN_STRUCT) }, | |||
{ FUNC(CORINFO_HELP_BULK_WRITEBARRIER) }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This one should go to the above group now with // Not used on WASM.
. We could start using it too.
src/coreclr/jit/register.h
Outdated
REGDEF(STK_CANDIDATE_UNCONDITIONAL, 3, 0x08, "SS_UNCONDITIONAL") | ||
REGDEF(STK_CANDIDATE_TENTATIVE, 4, 0x10, "SS_TENTATIVE") | ||
REGDEF(STK_CANDIDATE_COMMITED, 5, 0x20, "SS_COMMITED") | ||
REGDEF(STK, 6, 0x40, "SS") | ||
REGDEF(LLVM, 6, 0x40, "LLVM") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
REG_STK
should be the last register:
; target.h
// Each register list in register.h must declare REG_STK as the last value.
byte[] nullTerminated = new byte[inputArray.Length + 1]; | ||
inputArray.CopyTo(nullTerminated, 0); | ||
Span<byte> nullTerminated = new Span<byte>(new byte[inputArray.Length + 1]); | ||
inputArray.CopyTo(nullTerminated); | ||
nullTerminated[inputArray.Length] = 0; | ||
return nullTerminated; | ||
return nullTerminated.ToArray(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will allocate two arrays, while only one is needed.
@@ -63,7 +63,7 @@ private static byte[] AppendNullByte(byte[] inputArray) | |||
node.AppendMangledName(_this._compilation.NameMangler, sb); | |||
|
|||
sb.Append("\0"); | |||
return (byte*)_this.GetPin(sb.UnderlyingArray); | |||
return (byte*)_this.GetPin(sb.AsSpan().ToArray()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will double the allocations on this path, which is not great. It would be better to re-expose UnderlyingArray
instead.
// LLVM: staock offsets are not aligned in the classifier, if they are then this passes and | ||
// assert(segment.Offset + segment.Size <= lvaLclExactSize(lclNum)) below fails. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why does the second assert fail?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good question, I can change the classifier to
if (type == TYP_STRUCT)
{
structPassingKind wbPassStruct;
type = comp->m_llvm->GetArgTypeForStructWasm(structLayout->GetClassHandle(), &wbPassStruct);
}
assert(type != TYP_STRUCT);
unsigned typeSize = genTypeSize(type);
ABIPassingSegment segment = ABIPassingSegment::OnStack(m_stackArgSize, 0, typeSize);
m_stackArgSize += AlignUp(typeSize, TARGET_POINTER_SIZE);
return ABIPassingInformation::FromSegment(comp, segment);
But that doesn't match the values passed to SetStackOffset
For example, when the first arg is not a "user arg", e.g. lvaInitThisPtr
, then we dont set the stack offset, as its assumed to be allocRegArg(TYP_INT)
I suppose. Maybe this is where I've gone wrong in attempting to remove the use of the registers and I should look for another solution?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is an assumption in the compiler that this
is always passed in a register. The new classifier can accommodate this assumption like so:
if (wellKnownParam == WellKnownArg::ThisPointer)
{
// Produce a register segment (by bringing back R0).
}
We can delete this later - when the old classification is phased out.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, this
is solved with that. For TYP_STRUCT
and implicit by refs I dont see how these 2 uses of the size are working:
Here the size is used as is, ignoring byref structs, and the value used to set the stack offset.
However here
https://github.com/dotnet/runtime/blob/main/src/coreclr/jit/lclvars.cpp#L1904
the segment is checked against the size adusted for storing byrefs as pointers. How do we handle this to both pass this assert and the one that checks the classifer offsets with the stack offsets ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We would need to modify eeGetArgSize
to harmonize these. But at this point I agree that commenting out the assert is simpler.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, I left the this
code in but can take it out as you say.
src/coreclr/jit/importercalls.cpp
Outdated
#if defined(TARGET_WASM) | ||
// TODO-LLVM: Revisit when SIMD is enabled. | ||
// We want the fallback LIR expansions for these. | ||
switch(intrinsicName) | ||
{ | ||
case NI_System_Math_MultiplyAddEstimate: | ||
case NI_System_Math_ReciprocalEstimate: | ||
case NI_System_Math_ReciprocalSqrtEstimate: | ||
return false; | ||
default: | ||
break; | ||
} | ||
#endif //TARGET_WASM |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have done some time thinking about this, and looking at dotnet/runtime#102098, and I think the better fix for this issue is to augment IsTargetIntrinsic
to return true
for these intrinsics.
return nullptr
from impEstimateIntrinsic
requires a corresponding ifdef
in CoreLib, see https://github.com/dotnet/runtime/pull/102098/files#r1597779222. We have the sqrt
intrinsic, so ReciprocalSqrtEstimate
is expandable inline for WASM, and others have trivial expansions.
The actual CQ item here is to enable the better CQ for these intrinsic by actually exploiting the non-determinism, but it's a bit hard because LLVM doesn't have the same notion of intrinsics deterministic on "process granularity".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Changed Math
to
public static double ReciprocalSqrtEstimate(double d)
{
#if MONO || TARGET_RISCV64 || TARGET_LOONGARCH64 || TARGET_WASM
return 1.0 / Sqrt(d);
#else
return ReciprocalSqrtEstimate(d);
#endif
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why was it needed? It doesn't look expected to me.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Its not needed, but I thought that' what you refered to in "requires a corresponding ...". I will revert it
src/coreclr/jit/targetwasm.h
Outdated
@@ -44,12 +44,12 @@ | |||
#define FEATURE_EH_CALLFINALLY_THUNKS 1 // Generate call-to-finally code in "thunks" in the enclosing EH region, protected by "cloned finally" clauses. | |||
#define CSE_CONSTS 1 // Enable if we want to CSE constants | |||
|
|||
#define RBM_ALLFLOAT RBM_F0 | |||
#define RBM_ALLFLOAT REG_STK |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we are deleting fake registers, it would be better to replace them with REG_NA
instead of REG_STK
.
REG_STK
is the half-way point between real and fake registers itself :).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, reverted basically. I added
#define RBM_R0 REG_NA
#define RBM_F0 REG_NA
#define REG_F0 REG_NA
Maybe I should just collapse the uses of RBM/REG_F0
?
Co-authored-by: SingleAccretion <62474226+SingleAccretion@users.noreply.github.com>
Co-authored-by: SingleAccretion <62474226+SingleAccretion@users.noreply.github.com>
Co-authored-by: SingleAccretion <62474226+SingleAccretion@users.noreply.github.com>
IsTargetIntrinsic true for estimate MethodS Special handling for `this` in classifier, although could remove that Move CORINFO_HELP_BULK_WRITEBARRIER reinstate order of LLVM ARGs Use REG_NA inplace of REG_A/F resinstate UnderlyingArray
src/coreclr/tools/aot/ILCompiler.RyuJit/JitInterface/CorInfoImpl.Llvm.cs
Outdated
Show resolved
Hide resolved
src/coreclr/jit/compiler.h
Outdated
reg = REG_STK; | ||
regMask = RBM_STK; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
reg = REG_STK; | |
regMask = RBM_STK; | |
reg = REG_NA; | |
regMask = REG_NA; |
If that runs into asserts, R0
will need to be physically brought back.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Have brought it back, just didn't seem to be a great idea, at least not in this PR.
src/coreclr/jit/lclvars.cpp
Outdated
#ifdef TARGET_WASM | ||
else if (i == info.compThisArg) | ||
{ | ||
wellKnownArg = WellKnownArg::ThisPointer; | ||
} | ||
#endif //TARGET_WASM |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#ifdef TARGET_WASM | |
else if (i == info.compThisArg) | |
{ | |
wellKnownArg = WellKnownArg::ThisPointer; | |
} | |
#endif //TARGET_WASM |
No longer needed now that we've decided on silencing out the assert.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Right, wasn't sure if it was "correct". Now removed.
const regNumber intArgRegs[] = { REG_STK }; | ||
const regNumber fltArgRegs[] = { REG_STK }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
const regNumber intArgRegs[] = { REG_STK }; | |
const regNumber fltArgRegs[] = { REG_STK }; | |
const regNumber intArgRegs[] = { REG_NA }; | |
const regNumber fltArgRegs[] = { REG_NA }; |
src/coreclr/jit/targetwasm.h
Outdated
#define RBM_R0 REG_NA | ||
#define RBM_F0 REG_NA | ||
#define REG_F0 REG_NA |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
RBM_<...>
is a register mask, i. e. 1 << REG_<...>
. So the right "nothing" value for it is zero, i. e. RBM_NONE
.
#define RBM_R0 REG_NA | |
#define RBM_F0 REG_NA | |
#define REG_F0 REG_NA | |
#define RBM_R0 RBM_NONE | |
#define RBM_F0 RBM_NONE | |
#define REG_F0 REG_NA |
src/coreclr/jit/targetwasm.h
Outdated
#define RBM_F0 REG_NA | ||
#define REG_F0 REG_NA | ||
|
||
#define RBM_ALLFLOAT REG_F0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#define RBM_ALLFLOAT REG_F0 | |
#define RBM_ALLFLOAT RBM_F0 |
src/coreclr/jit/targetwasm.h
Outdated
#define REG_PINVOKE_COOKIE_PARAM REG_R0 | ||
#define REG_PINVOKE_COOKIE_PARAM RBM_R0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There are a number of cases where REG_
values have been changed to be defined as RBM_R0
, which are masks. They should be changed back to register values (REG_NA
if that works, brought back R0/F0
otherwise).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reinstated R0
…pl.Llvm.cs Co-authored-by: SingleAccretion <62474226+SingleAccretion@users.noreply.github.com>
remove "this" wellKnownArg
I'm assuming the git hub failure is an infrastructure problem and this is actually green. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thank you!
Looking into it |
Total execution time: 0.01 seconds |
Thank you! |
This PR merges to 301604e
#ifdef BACKGROUND_GC
ingc.cpp
upstreamable.WasmClassifier
REG_R0/REG_F0
toREG_STK
to avoid asserts arising from the classifier.#if
out theassert(dscStackOffset == expected.GetStackOffset());
assert as "stack" offsets not aligned. If aligned we hit another assert as per the comment.REG_STK
andREG_LLVM
to avoid anassert
emsdk_env.cmd
where we haveemsdk_env.bat
, didn't look to see why mono has a different extension.