-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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
JIT: Fix assertion due to remorph #110516
Conversation
|
The issue here is that Regarding to the fix, in global morph, do we really need to morph |
Let's see how CI going |
Okay it becomes
Seems that this is not true. |
It seems that similar patterns can also be produced by |
What problem did you hit? |
I opened #110658 as an example of what I meant. Does this fix the assertion for the case in the issue, and for your own case? |
Thanks! I will check it and see whether it fixes the issue I hit or not. |
We had indirections set up where we'd `RuntimeExport` a method under a symbolic name and then `RuntimeImport` it elsewhere (or call the export from JIT-generated code). Most of this was motivated by the old Redhawk layering where things like casting and interface dispatch were part of Runtime.Base and not part of CoreLib. Since we decided if we ever reintroduce a Runtime.Base, we wouldn't have casting in it, this indirection will no longer be needed. Motivated by dotnet#110267 (and also the reason why I'm only doing it for `RuntimeExport`s used from the JIT right now). Once that PR gets in, calling methods through `RuntimeExport`s would actually become a bigger deoptimization than it is now.
This syncs the gcc version in toolchian file with what's in the newest container build. Fixes dotnet#110517
* Fixing step becomes a go * Trying to avoid step that becomes a go * Adding comments and more protections. * fixing comment * Checking if removing this comments, CI failures are gone. * Adding part of the changes to understand the failures on CI * Update src/coreclr/debug/ee/controller.cpp Co-authored-by: mikelle-rogers <[email protected]> * Fixing wrong fix. --------- Co-authored-by: mikelle-rogers <[email protected]>
Fix dotnet#109722 Co-authored-by: loadingcn <[email protected]>
…henNotSet (dotnet#110070) Accept "localdomain" as a valid DomainName on Android.
…efined. (dotnet#110506) * Fix build break for DATAS Stress Mode * Removed stress heap dynamic
…tate (dotnet#110449) Some methods have a nil token - for example, special runtime methods like array functions. When we tried to look up their IL version state, we were throwing an exception. Methods like this will have no versioning state, so check for a nil token and skip the lookup.
Based on measurements on the ASP.NET perf infra (BasicWebApi and TodosApi), using the GuardCF libraries in non-guard context doesn't have measurable impact on throughput. The impact on size is negligible. We can just have it enabled unconditionally on the native runtime bits.
…10669) This improves diagnostic in our measurement infra
This adds an invariant that there always exists an "init BB" throughout the JIT's phases. The init BB has the following properties: - It is only executed once, so it does not have any predecessors - It is not inside a try region, hence it dominates all other blocks in the function There are no further requirements on the BB. The init BB does not have to be `BBJ_ALWAYS` (unlike the old "scratch BB" concept). This is mainly because it philosophically does not make sense to insert IR at the end of the init BB, since earlier phases can have inserted arbitrary IR in them.
We're not using it anymore. Fixes dotnet#109961
…assificationDataType` (dotnet#110602) - Add the different method desc types to the data descriptor - We only need their size right now - Add tests for different method desc classifications - Mostly fill-in for things I found we didn't cover - `GetNativeCode_StableEntryPoint_NonVtableSlot` is the one that actually hits the updated code in this change
…tnet#110322) * Add GetGCStressCodeCopy to ICodeVersions and IRuntimeTypeSystem
If we need to spill ref type args for a GDV, try to annotate the spilled locals with type information.
…10700) Found this while running the diagnostics repo SOS tests with the cDAC enabled. General sequence for the repro was: ``` !sethostruntime -none !bpmd <firstLocation> !bpmd <secondLocation> g g !clrstack ``` Printed stack shows `<unknown>` for some method(s). Between the first and second breakpoints, more methods were jitted and the corresponding code heap list updated. When a new method in the stack for `<secondLocation>` had the same code heap list as any method from `<firstLocation>`, we'd end up with a stale end address for the heap list and determine that the method was invalid (outside the address range). The cdac was assuming that the target would be created every time the state changes, but that is not the case (for the repro above, `!sethostruntime -none` resulted in not re-creating the target). We need to handle `IXCLRDataProcess::Flush` calls to clear out any cached data. With this change, the SOS tests with the cDAC enabled run successfully with both a Release and Debug cdacreader (on a Release runtime).
Likely obsoleted by #110787 |
Okay, I'm closing this PR. |
Extracted from #104906
We always set
GTF_DEBUG_NODE_MORPHED
ingtFoldExprCompare
,gtFoldExprSpecial
,gtFoldExprConditional
andgtFoldExprHWIntrinsic
if the tree is morphed, but not ingtFoldExprConst
as it may creates a new tree that can be morphed again.Especially,
gtFoldExprSpecial
can create a newCOMMA
containing a subtree of side effects, which leads to the assertion later when we try to remorph it, asnewTree != oldTree
can yield false positives for this. The subtree ofCOMMA
is already morphed anyway so in this case we can avoid morphing it again by using a flag instead of relying onnewTree != oldTree
.Fixes #107542
cc: @AndyAyersMS