Age | Commit message (Collapse) | Author | Files | Lines |
|
* Disable VSD Stub Kind Prediction on H/W Exception
* Add a comment on a false argument
* Use BOOL (instead of bool) for consistency
* Replace remaining bool/true/false with BOOL/TRUE/FALSE
|
|
Remove useless TODO from genCompareInt
|
|
|
|
* Change jit notifications so that they pass the native code address. This fixes !bpmd so that it will set the correct breakpoint on tiered jitted methods.
* code review feedback
* don't handle OnCodeGenerated
|
|
RuntimeTypeHandles on CoreRT are backed by IntPtr today. This fix is not complete. There are likely more places that make assumption about the underlying runtime handle types, but this is enough to fix the immediate problem hit by @sergign60.
|
|
[Arm64] LowerCompare Cast-Bool/UBYTE CMP immediate #0 to TST immediate
|
|
[Arm64] Enable Lowering GT_ARR_BOUNDS_CHECK
|
|
gtSetEvalOrder already does this. And even if it doesn't it's not the job of genCompareInt to swap operands, that should happen in LowerCompare.
Attempting to do this in LowerCompare resulted in 0 diffs.
|
|
|
|
* show the problem with contained arg_place
We set contained on PUTARG_REG, but it doesn't pass IsContained check.
* Fix problem with gtControlExpr
* fix problem with ARGPLACE
* additional improvements1
We should never have a contained node that is the last node in the
execution order.
* additional impovement2 for xarch.
It is redundant, do not need to set as contained.
* additional improvement2 for arm
`GenTree* ctrlExpr = call->gtControlExpr;` was unused.
* additional improvement3: unify CheckLir.
|
|
Merge changes from TFS
|
|
Disable tiered compilation for dynamic methods
|
|
|
|
Reverting 99db31c41d5057e08cc4701c79f11246b9191a9b and fd91ee1fa23f35130f576c19dfaf35934dc2ce24 to unblock others while trying to figure out what the issues are and how to fix them.
fd91ee1fa23f35130f576c19dfaf35934dc2ce24 is causing @benaadams thread pool perf test (https://github.com/benaadams/ThreadPoolTaskTesting) to hang due to a missed thread request. Somehow wsqActive is ending up at zero while there is a work item in the queue and with no pending thread requests. I don't understand how yet.
99db31c41d5057e08cc4701c79f11246b9191a9b appears to have a potential issue because the order of MarkThreadRequestSatisfied and Dequeue are reversed. For instance, assuming a proc count of 1:
- Initial state: 1 work item enqueued, 1 thread request
- T1 Dispatch: dequeues a work item and requests a thread (0 work items, 1 thread request)
- T1 Dispatch: sees no more work items, returns
- T1 calls Dispatch again due to its own thread request
- T1 Dispatch: After Dequeue (which saw 0 work items) and before MarkThreadRequestSatisfied:
- Current state: 0 work items, 1 thread request
- T2 enqueues a work item, sees 1 thread request and does not request a thread (1 work item, 1 thread request)
- T1 Dispatch: MarkThreadRequestSatisfied decrements thread requests (1 work item, 0 thread requests)
- Now after T1 returns, it won't wake up again but there is still one work item in the queue
|
|
In some R2R expansions the type handle is not an explicit operand to
the newobj helper. So we must bail out of removal attempts when the
type handle is desired and we see such an expansion.
Closes #13942.
Also likely will fix #13930.
|
|
The check for recursive call was incorrect when processing an inlineee.
The change had no diffs with jit-diff --frameworks --tests so I added a test where
this change results in a codegen diff: the call to C is inlined with this change but
is not inlined without it.
|
|
- Delete redundant collection and dictionary debug view implementations
Signed-off-by: dotnet-bot <dotnet-bot@microsoft.com>
|
|
command line"
[tfs-changeset: 1674327]
|
|
[Arm64] Enable LowerShift
|
|
Remove COMPlus_JitNoInline from RETAIL
|
|
ayuckhulk/fix-arm-set-debuggerregdisplay-from-context
[ARM] Fix SetDebuggerREGDISPLAYFromREGDISPLAY() function
|
|
Fix devdiv 491210
|
|
|
|
|
|
Change delegation in {Unmanaged}MemoryStream.Read/WriteAsync(Memory)
|
|
Model box object allocations using the AllocObj tree node. Update
the box deconstruction utility to compensate.
Also set the OMF_HAS_NEWOBJ flag when we generate Box IR; this both
fixes an oversight from before and is a necessary step to trigger the
morphing of AllocObj into a helper call.
No diffs.
Closes #13905.
|
|
This is makes it work for CoreRT, and faster for everybody (avoids JIT/EE call).
|
|
Fixing an oversight from earlier, tiered compilation isn't designed to handle dynamic methods yet because of their limited lifetime. There may be other issues but a basic one would be having the method get collected while its MethodDesc is in the tiered compilation queue which results in use after free memory issues.
|
|
Allow a RET_EXPR as a BYREF operand for SIMD intrinsics.
|
|
|
|
Specifically, this insures the GT_LIST nodes of gtCallArgs
and gtCallLateArgs flags are set correctly, based on their
child nodes.
|
|
Improve ReaderWriterLockSlim scalability
Fixes #12780
The _myLock spin lock runs into some bad scalability issues. For example:
- Readers can starve writers for an unreasonable amount of time. Typically there would be more readers than writers, and it doesn't take many readers to starve a writer. On my machine with 6 cores (12 logical processors with hyperthreading), 6 to 16 reader threads attempting to acquire the spin lock to acquire or release a read lock can starve one writer thread from acquiring the spin lock for several or many seconds. The issue magnifies with more reader threads.
- Readers and especially writers that hold the RW lock can be starved from even releasing their lock. Releasing an RW lock requires acquiring the spin lock, so releasers are easliy starved by acquirers. How badly they are starved depends on how many acquirers there are, and it doesn't take many to show a very noticeable scalability issue. Often, these acquirers are those that would not be able to acquire the RW lock until one or more releasers release their lock, so the acquirers effectively starve themselves.
Took some suggestions from @vancem and landed on the following after some experiments:
- Introduced some fairness to _myLock acquisition by deprioritizing attempts to acquire _myLock that are not likely to make progress on the RW lock
- Limited spinning in some cases where it is very unlikely that spinning would help
|
|
[ARM64/Windows] Corrected stack overflow in JIT_Stelem_ref
|
|
* Take lock before manipulating list in desctructor
* Add NULL checks for provider list
* Remove asserts that duplicate conditional check
|
|
Read/WriteAsync(Memory) on MemoryStream and UnmanagedMemoryStream need to delegate to one of the existing virtual methods, in case an existing stream has overridden the virtuals in order to change or augment the behavior (e.g. checking on each write to ensure the length doesn't exceed some amount). Currently these delegate to the synchronous Read/Write(Span) methods. The problem with that is, for exactly the case where there is a derived class, Read/Write(Span) themselves need to delegate to Read/Write(byte[]), which means they use ArrayPool and copy. But with a {ReadOnly}Memory, we may already have access to the underlying array, in which case we're going from an array to a span and back to different rented array along with an unnecessary copy. To address that, this commit changes the delegation to prefer Read/Write(byte[],...) if possible, falling back to Read/Write(Span) only if we couldn't get an array from the Memory.
|
|
This change removes executable memory mappings from crossgen. Now it
can be run on systems with PAX set to prevent executable mappings
without any marking using the paxctl.
|
|
|
|
column is not aligned properly (#13856)
|
|
An indir in the runtime lookup sequence wasn't marked as nonfaulting
so dead context trees could not be entirely cleaned up.
Also added invariant since this particular lookup sequence will always
return the same result.
|
|
|
|
Both methods to the same, but the latter one is the offficial public name for the functionality
|
|
Remove some `goto`s that were added to work around undesirable jit
layout (#9692, fixed in #13314) and epilog factoring (improved in
#13792 and #13903), which are no longer needed.
Resolves #13466.
|
|
Renumber blocks before computing loop nest
|
|
|
|
Array.Reverse showed up as hot method in profiles of real workloads (e.g. it is called from Json.NET frequently via List.Reverse)
|
|
This change enables full end to end build of coreclr including
managed code on Alpine Linux.
|
|
Lower TEST(x, LSH(1, y)) to BT(x, y)
|
|
Fix #13568
|
|
* Eliminate double delete in EventProvider cleanup
* Fix access after deletion error
* Simplify control flow
|
|
The loop nest computation expects to be able to test block numbers for
lexical inclusion, so do a renumbering pass first if blocks have been
moved.
Fixes #13919.
|