Viktor Hofer [Fri, 6 Oct 2017 18:15:29 +0000 (20:15 +0200)]
Make ContractException serializable
Viktor Hofer [Thu, 5 Oct 2017 14:55:25 +0000 (16:55 +0200)]
Make more exceptions serializable, fix typeforwards and add one missing serialization field
Viktor Hofer [Wed, 4 Oct 2017 22:43:34 +0000 (00:43 +0200)]
Update typeforward assemblyqualifiedname for TimeZoneInfoException
Viktor Hofer [Wed, 4 Oct 2017 14:52:43 +0000 (16:52 +0200)]
Remove duplicate parameter check in TypeLoadException
Viktor Hofer [Wed, 4 Oct 2017 13:02:02 +0000 (15:02 +0200)]
Remove Contract.EndContractBlock and parameter check that gets handled in the base impl
Viktor Hofer [Tue, 3 Oct 2017 20:11:09 +0000 (22:11 +0200)]
Make coreclr exceptions serializable and add typeforwards
Konstantin Baladurin [Tue, 3 Oct 2017 11:08:06 +0000 (14:08 +0300)]
[x86/Linux] Fix regdisplay initialization in case of WIN64EXCEPTIONS (#14296)
Method Debugger::IsThreadAtSafePlaceWorker for x86 sets values only
for ControlPC and PCTAddr fields of REGDISPLAY but there is assert
in StackFrameIterator::Init that checks that field pCurrentContext
is not NULL if WIN64EXCEPTIONS is defined.
This patch uses FillRegDisplay function to correctly initialize
regdisplay in case of WIN64EXCEPTIONS.
Sergey Andreenko [Tue, 3 Oct 2017 02:09:01 +0000 (19:09 -0700)]
delete the old workaround. (#14288)
gcc is not supported.
Bruce Forstall [Mon, 2 Oct 2017 23:29:45 +0000 (16:29 -0700)]
Merge pull request #14220 from wateret/ryu-arm-bitcast-cleanup
[RyuJIT/arm32] Code cleanup
Hanjoung Lee [Mon, 2 Oct 2017 23:22:48 +0000 (08:22 +0900)]
Improve runtest.sh concurrency (#14036)
* Imporove runtest.sh concurrency
`runtest.sh` runs next tests immediately after any of child processes is done
* Fix runtest.sh getting number of processors
For linux, check if `nproc` or `getconf` exists
when getting number of processors.
* Add tests that fail with OOM to unsupported list
Add several tests that consumes a lot of memory to unsupported test list(arm32).
This change is temporary until we properly handle these test with memory issue.
Carol Eidt [Mon, 2 Oct 2017 20:44:10 +0000 (13:44 -0700)]
Merge pull request #14274 from fiigii/vexencoding
[RyuJIT] Fix VEX.vvvv for cvtss2sd and cvtsd2ss
Sean Gillespie [Mon, 2 Oct 2017 20:27:31 +0000 (13:27 -0700)]
Fix a jump over variable initialization (#14286)
Viktor Hofer [Mon, 2 Oct 2017 19:54:19 +0000 (21:54 +0200)]
Merge pull request #14181 from ViktorHofer/MutexCodeCleanup
Mutex code cleanup and removal of unused types
Stephen Toub [Mon, 2 Oct 2017 19:17:58 +0000 (15:17 -0400)]
Workaround GetSystemTimePreciseAsFileTime inaccuracies (#14283)
* Workaround GetSystemTimePreciseAsFileTime inaccuracies
On misconfigured systems, GetSystemTimePreciseAsFileTime may drift quickly from GetSystemTimeAsFileTime. We want to use the former, though. As a workaround/heuristic, when checking whether we have GetSystemTimePreciseAsFileTime, invoke both and ensure they're "close", falling back to GetSystemTimeAsFileTime if it seems like the precise variant has run away.
* Update comment
José Rivero [Mon, 2 Oct 2017 16:53:20 +0000 (09:53 -0700)]
Small bug fixes on "perf.groovy" (#14259)
- `submission-metadata` option is `--user-email`, not `--user`
- We need to escape user input. On batch, " -> ""
tvass83 [Mon, 2 Oct 2017 13:27:48 +0000 (15:27 +0200)]
The !DumpArray sos command emits invalid DML for array elements (#13855)
Element Methodtable is reported correctly but for individual elements, the generated DML uses the MT of the array, not the element, thus giving incorrect results
Only value types are affected
0:007> !DumpArray /d
02b16574
Name: WindowsFormsApplication2_SOS_bug.Test[]
MethodTable:
011c82ec
EEClass:
011c8290
Size: 412(0x19c) bytes
Array: Rank 1, Number of elements 100, Type VALUETYPE
Element Methodtable:
011c824c
[0]
02b1657c => here is the problem
Ahson Ahmed Khan [Sat, 30 Sep 2017 01:56:42 +0000 (18:56 -0700)]
Adding a patch to fix coreclr build for VS 15.5 (using older SDKs). (#14272)
Fei Peng [Sat, 30 Sep 2017 00:35:34 +0000 (17:35 -0700)]
Fix VEX.vvvv for cvtss2sd and cvtsd2ss
Sergey [Fri, 29 Sep 2017 23:16:44 +0000 (02:16 +0300)]
StompWriteBarrier initialization path refactoring (#14105)
* refactored arm, arm64, amd64 and x86 to signal about icache flush and ee restarts
* refactored gc init stage to stomp write barrier (hence flush icache) only once
* review fixes, care taken of icache invalidation during StompResize
* fixed heap boundaries initialization bug introduced after refactoring gc.cpp
* stylistic review fixe
* global variable rename
* global variable rename once more
Mike McLaughlin [Fri, 29 Sep 2017 22:54:48 +0000 (15:54 -0700)]
Update build clang/llvm/lldb 3.9 (#14096)
Update build scripts, docs and build pipeline docker images to clang/llvm/lldb 3.9
Borislav Ivanov [Fri, 29 Sep 2017 22:52:46 +0000 (01:52 +0300)]
Fix spelling errors (#14218)
Fix some spelling errors and capitalization.
Mike McLaughlin [Fri, 29 Sep 2017 22:50:10 +0000 (15:50 -0700)]
Add info on loading core dumps in lldb. (#13955)
Fei Peng [Sun, 24 Sep 2017 17:54:56 +0000 (10:54 -0700)]
Enable hardware intrinsic in debug and reflection
Fei Peng [Fri, 15 Sep 2017 20:01:13 +0000 (13:01 -0700)]
Implement IsSuppoored for all ISA classes
Matt Galbraith [Fri, 29 Sep 2017 20:54:11 +0000 (13:54 -0700)]
Merge pull request #14265 from MattGal/build_def_updates
Build definition publishing behavior tweaks
Matt Galbraith [Fri, 29 Sep 2017 20:04:55 +0000 (13:04 -0700)]
Build definition publishing behavior tweaks
Hyung-Kyu Choi [Fri, 29 Sep 2017 19:01:16 +0000 (04:01 +0900)]
[RyuJIT/ARM32] hotfix for a regression (#14252)
Signed-off-by: Hyung-Kyu Choi <hk0110.choi@samsung.com>
Konstantin Baladurin [Fri, 29 Sep 2017 17:15:35 +0000 (20:15 +0300)]
[x86/Linux] Fix CopyREGDISPLAY for WIN64EXCEPTIONS (#14254)
When WIN64EXCEPTIONS is defined, fields pCurrentContextPointers,
pCallerContextPointers, pCurrentContext and pCallerContext of the
REGDISPLAY are used. So we need to fix their values after coping.
Konstantin Baladurin [Fri, 29 Sep 2017 14:03:17 +0000 (17:03 +0300)]
[x86/Linux][SOS] Fix DumpStack command output on x86 (#14189)
On x86 DumpStack command doesn't print symbol information for
caller and callee. This patch fixes it and make output the same
as on AMD64.
Steve MacLean [Fri, 29 Sep 2017 12:10:32 +0000 (08:10 -0400)]
Allow cross machine re-crossgen (#14241)
Konstantin Baladurin [Fri, 29 Sep 2017 08:08:01 +0000 (11:08 +0300)]
[x86/Linux] Fix assert in HelperMethodFrame::UpdateRegDisplay (#14235)
In some cases during execution of the SOS command 'clrstack -i'
portability assert in HelperMethodFrame::UpdateRegDisplay occurs.
This patch removes this assert and adds corresponding implementation.
Ahson Ahmed Khan [Fri, 29 Sep 2017 03:05:35 +0000 (20:05 -0700)]
Fixing Retain to return MemoryHandle with correct PinnedPointer (#14248)
* Fixing Retain to return MemoryHandle with correct PinnedPointer.
* Make MemoryHandle AddOffset internal.
Roman Artemev [Fri, 29 Sep 2017 02:30:36 +0000 (19:30 -0700)]
Merge pull request #14247 from rartemev/issue_13420
Fixed difference between produced code in CHK and REL modes
Kristian Hellang [Fri, 29 Sep 2017 01:12:24 +0000 (03:12 +0200)]
Added CopyToAsync overload using default buffer size (#14219)
* Added CopyToAsync overload using default buffer size
* Address feedback
* Added comment about overrides and argument validation
* Renamed helper method to GetCopyBufferSize
To convey that this method should only be used for
getting a buffer size to be passed to CopyTo{Async}.
Roman Artemev [Fri, 29 Sep 2017 00:22:08 +0000 (17:22 -0700)]
Fixed differenece between produced code in CHK and REL modes
Sergey Andreenko [Thu, 28 Sep 2017 23:16:06 +0000 (16:16 -0700)]
ignore GT_ARGPLACE before gtUseNum check. (#14233)
Sergey Andreenko [Thu, 28 Sep 2017 17:37:15 +0000 (10:37 -0700)]
Add the capability to force JIT options on the SPMI command line. (#14209)
expand the grammar for jit{,2}option to -jitoption [force] key=value
Konstantin Baladurin [Thu, 28 Sep 2017 16:26:39 +0000 (19:26 +0300)]
[x86/Linux] Fix typo in SetDebuggerREGDISPLAYFromREGDISPLAY (#14221)
Fix typo in SetDebuggerREGDISPLAYFromREGDISPLAY: Esi -> Eax.
Carol Eidt [Thu, 28 Sep 2017 16:00:16 +0000 (09:00 -0700)]
Merge pull request #14225 from fiigii/falsedependency
[RyuJIT] Fix bad VEX encoding to avoid false register dependency
Andy Ayers [Thu, 28 Sep 2017 14:56:24 +0000 (07:56 -0700)]
JIT: have gtClone handle long constants (#14201)
The `Enum.HasFlag` opt needs to clone the enum values, and they
can be long constants. Make sure `gtClone` handles this case.
Closes #14149.
Bruce Forstall [Thu, 28 Sep 2017 05:16:27 +0000 (22:16 -0700)]
Merge pull request #14232 from BruceForstall/Fix14196
Fix issue with HFA altjit api
Fei Peng [Wed, 27 Sep 2017 17:33:18 +0000 (10:33 -0700)]
fix bad VEX.vvvv to avoid false register dependency
Brian Sullivan [Thu, 28 Sep 2017 00:28:42 +0000 (17:28 -0700)]
Merge pull request #14192 from sdmaclea/PR-ARM64-JCMP
[Arm64] Add GT_JCMP node
Hanjoung Lee [Wed, 27 Sep 2017 11:04:03 +0000 (20:04 +0900)]
[RyuJIT/arm32] Code cleanup
- Add an assertion for double type arg regs for armel
- Merge two if statements that have same body
Viktor Hofer [Wed, 27 Sep 2017 23:10:40 +0000 (01:10 +0200)]
Merge pull request #14231 from fiigii/fixintrinsic
fix bugs from #14164
William Godbe [Wed, 27 Sep 2017 23:07:07 +0000 (16:07 -0700)]
Merge pull request #14234 from dotnet/ConditionLoc
Move Condition location in dotnet-trusted-publish
William Godbe [Wed, 27 Sep 2017 23:03:35 +0000 (16:03 -0700)]
Move Condition location in dotnet-trusted-publish
Viktor Hofer [Wed, 27 Sep 2017 22:52:49 +0000 (00:52 +0200)]
nit pr feedback
Bruce Forstall [Wed, 27 Sep 2017 21:42:04 +0000 (14:42 -0700)]
Fix issue with HFA altjit api
One case in the Interop\ArrayMarshalling\ByValArray\MarshalArrayByValTest\MarshalArrayByValTest.cmd
test marshals an array of strings as members of a struct. The !FEATURE_HFA
code for IsHFA() needs to check for value type before calling CheckForHFA(),
which will assert if it is not a value type.
Fixes #14196.
Steve MacLean [Wed, 27 Sep 2017 21:16:51 +0000 (17:16 -0400)]
[Arm64] Respond to feedback
Fei Peng [Wed, 27 Sep 2017 21:28:07 +0000 (14:28 -0700)]
fix bug from #14164
Ahson Ahmed Khan [Wed, 27 Sep 2017 21:21:28 +0000 (14:21 -0700)]
Adding {RO}Memory<T> debugger view (#14130)
* Adding memory debugger view and fixing ToArray impl.
* Addressing PR feedback and adding span debugger display string.
* Adding link to specific VSTS instance.
* Removing redundant info in comments.
William Godbe [Wed, 27 Sep 2017 21:14:40 +0000 (14:14 -0700)]
Merge pull request #14230 from dotnet/CondInjection
Condition Injection on SignType
William Godbe [Wed, 27 Sep 2017 21:13:27 +0000 (14:13 -0700)]
Condition Injection on SignType
William Godbe [Wed, 27 Sep 2017 20:44:39 +0000 (13:44 -0700)]
Merge pull request #14229 from dotnet/PB_Fix
Change PB_ConfigurationGroup to ConfigurationGroup
William Godbe [Wed, 27 Sep 2017 20:44:07 +0000 (13:44 -0700)]
Update DotNet-Trusted-Publish.json
Jan Kotas [Tue, 26 Sep 2017 00:17:20 +0000 (17:17 -0700)]
Fix modf and fmod casing for consistency
Signed-off-by: dotnet-bot <dotnet-bot@microsoft.com>
Sergey Andreenko [Wed, 27 Sep 2017 19:00:33 +0000 (12:00 -0700)]
[Jit] fix DevDiv_499435 (#14179)
fix DevDiv_499435
William Godbe [Wed, 27 Sep 2017 18:26:16 +0000 (11:26 -0700)]
Merge pull request #14226 from dotnet/SymbolPkgInject
Conditionally Inject signed symbol packages on SignType
William Godbe [Wed, 27 Sep 2017 18:12:04 +0000 (11:12 -0700)]
Conditionally Inject signed symbol packages on SignType
Steve MacLean [Wed, 27 Sep 2017 17:38:05 +0000 (13:38 -0400)]
[ARM64/Unix] Enable FEATURE_EVENT_TRACE (#14176)
* [ARM64/Unix] Enable FEATURE_EVENT_TRACE
* [Arm64] Remove _PlatformDoesNotSupportEventTrace
Sean Gillespie [Wed, 27 Sep 2017 17:17:38 +0000 (10:17 -0700)]
Additional parameter validation for StartNoGCRegion (#14088)
* Additional parameter validation for StartNoGCRegion
* Fix the clang build by moving some defs before the first goto
* Guard against size_t overflow when scaling allocation budgets
* Move some parameter validation for managed code, throw better exceptions on parameter validation errors
* Remove stray comma
* Address code review feedback - unify code branches that branch to the failure case. Also keep data types as uint64_t as long as possible to avoid size_t overflow
* Fix the clang build
* Code review feedback:
1. Remove useless asserts
2. Remove a dead code path
3. Add a LocalGC TODO to comment
Jarret Shook [Wed, 27 Sep 2017 17:13:48 +0000 (10:13 -0700)]
Merge pull request #13897 from hseok-oh/ryujit/ftc_arg_count
Argument register & stack size calculation for fast tail call
Steve MacLean [Wed, 27 Sep 2017 16:41:52 +0000 (12:41 -0400)]
[Arm64] Add JCMP comments per review
Steve MacLean [Tue, 26 Sep 2017 23:31:18 +0000 (19:31 -0400)]
[Arm64] Fix JCMP lsra binding
Carol Eidt [Wed, 27 Sep 2017 15:49:42 +0000 (08:49 -0700)]
Merge pull request #14207 from CarolEidt/Fix14028
Handle GT_SIMD in GenTree::Compare
Bruce Forstall [Wed, 27 Sep 2017 15:46:19 +0000 (08:46 -0700)]
Merge pull request #14090 from BredPet/interface_dispatch_cell
ARM32: fix interface dispatch cell address transfer
Andy Ayers [Wed, 27 Sep 2017 14:15:04 +0000 (07:15 -0700)]
JIT: devirtualization support for EqualityComparer<T>.Default (#14125)
Mark `EqualityComparer<T>.Default`'s getter as `[Intrinsic]` so
the jit knows there is something special about it. Extend the jit's
named intrinsic recognizer to recognize this method.
Add a new jit interface method to determine the exact type returned
by `EqualityComparer<T>.Default`, given `T`. Compute the return type by
mirroring the logic used in the actual implementation. Bail out when
`T` is not final as those cases won't simplify down much and lead to
code bloat.
Invoke this interface method when trying to devirtualize calls where
the 'this' object in the call comes from `EqualityComparer<T>.Default`.
The devirtualized methods can then be inlined. Since the specific comparer
`Equal` and `GetHashCode` methods look more complicated in IL than they
really are, mark them with AggressiveInlining attributes.
If devirtualization and inlining happen, it is quite likely that the value
of the comparer object itself is not used in the body of the comparer. This
value comes from a static field cache on the comparer helper.
When the comparer value is ignored, the jit removes the field access since it
is non-faulting. It also removes the the class init helper that is there to
ensure that the (no-longer accessed) field is properly initialized. This helper
has relatively high overhead even in the fast case where the class has been
initialized aready.
Add a perf test.
Closes #6688.
Igor Kulaychuk [Wed, 27 Sep 2017 13:32:39 +0000 (16:32 +0300)]
[GDBJIT] Provide full file names in generated DWARF (#14172)
* Fix compile unit info
Provide full path to source in SequencePoints for GDBJIT
Use source file and directory path for compile unit info in DWARF instead of module name.
* Add a class for building Directory Table and File Table
* Fix code inconsistencies and add comments
Stephen Toub [Wed, 27 Sep 2017 12:32:54 +0000 (08:32 -0400)]
Merge pull request #14214 from stephentoub/quwi_preferlocal
Add ThreadPool.QueueUserWorkItem(..., bool preferLocal)
Petr Bred [Wed, 20 Sep 2017 17:52:05 +0000 (20:52 +0300)]
ARM32: fix interface dispatch cell address transfer
Signed-off-by: Petr Bred <bredpetr@gmail.com>
Jonghyun Park [Wed, 27 Sep 2017 08:55:30 +0000 (17:55 +0900)]
Use FCDECL2_VI instead of FCDECL_VV (#14215)
Jonghyun Park [Wed, 27 Sep 2017 08:54:51 +0000 (17:54 +0900)]
Permit to disable FEATURE_EVENT_TRACE on Tizen (#14217)
Hyeongseok Oh [Wed, 20 Sep 2017 06:22:09 +0000 (15:22 +0900)]
Remove useless variable
Remove compArgRegCount and compFlatArgRegCount in Info struct
Hyeongseok Oh [Tue, 12 Sep 2017 00:47:37 +0000 (09:47 +0900)]
Fix typo
Fix typo in lclvars.cpp and register_arg_convention.h
Hyeongseok Oh [Mon, 11 Sep 2017 11:21:05 +0000 (20:21 +0900)]
Enhancement caller register & stack calculation for fast tail call
Save caller register count & stack size using argument varDsc initialization
It remove duplicate calculation for register count
and add stack size count in varDsc initialization
Hyeongseok Oh [Wed, 27 Sep 2017 04:20:06 +0000 (13:20 +0900)]
[RyuJIT/ARM32] Fast tail call: Init LSRA to use R12 to save jump target (#14184)
* [RyuJIT/ARM32] Fast tail call: use R12 to save jump target
To save jump target of fast tail call on ARM32, we use r12.
* Use pre-defined mask and fix comment
Use pre-defined mask: RBM_R12
fix comment: mov pc -> br
Stephen Toub [Wed, 27 Sep 2017 03:10:46 +0000 (23:10 -0400)]
Add ThreadPool.QueueUserWorkItem(..., bool preferLocal)
Stephen Toub [Wed, 27 Sep 2017 02:39:38 +0000 (22:39 -0400)]
Merge pull request #14178 from stephentoub/async_avoid_delegate
Avoid async method delegate allocation
Roman Artemev [Wed, 27 Sep 2017 02:25:13 +0000 (19:25 -0700)]
Merge pull request #14197 from rartemev/fixed_test_build_restore
Fixed Linux test build
Carol Eidt [Wed, 27 Sep 2017 00:19:35 +0000 (17:19 -0700)]
Handle GT_SIMD in GenTree::Compare
Fix #14028
Xiangyang (Mark) Guo [Wed, 27 Sep 2017 00:11:55 +0000 (17:11 -0700)]
Add SetThreadIdealProcessorEx PAL API (#13606)
* add SetThreadIdealProcessorEx PAL API
* fix lpPreviousIdealProcessor
Brian Robbins [Tue, 26 Sep 2017 23:47:12 +0000 (16:47 -0700)]
Update linux-performance-tracing.md (#14194)
Add documentation on how to resolve framework symbols on Linux performance traces.
Viktor Hofer [Tue, 26 Sep 2017 00:02:01 +0000 (02:02 +0200)]
Mutex code cleanup and removal of unused types
Dmitri-Botcharnikov [Tue, 26 Sep 2017 22:57:20 +0000 (01:57 +0300)]
Enable event tracing for Tizen. (#14137)
Sergey Andreenko [Tue, 26 Sep 2017 22:35:01 +0000 (15:35 -0700)]
Fix for a special CoreRT helper CORINFO_HELP_JIT_PINVOKE_BEGIN (#14147)
William Godbe [Tue, 26 Sep 2017 22:25:20 +0000 (15:25 -0700)]
Merge pull request #14202 from wtgodbe/SigningDisableInstall
Install signing plugin with Real signing
wtgodbe [Tue, 26 Sep 2017 22:25:02 +0000 (15:25 -0700)]
Install signing plugin with Real signing
Steve MacLean [Tue, 26 Sep 2017 21:04:24 +0000 (17:04 -0400)]
[Arm64] Fix GT_JCMP lsra
Dan Moseley [Tue, 26 Sep 2017 21:19:16 +0000 (14:19 -0700)]
Replace Contract.Assumes and Contract.Assert with Debug.Assert/Debug.Fail (#14136)
* Remove use of Contract.Assert and Contract.Assumes in favor of Debug.xx
* Remove dead IA64 blocks
* Remove use of Contract.Requires in favor of Debug.Assert
* Remove Contract.EndContractBlock()
* Dead comments
* Straggler EndcontractBlock
* Remove all Contract.Ensures
* Remove [Pure] attribute and using statements
* Remove using statements for M.D.Contracts.Internal.Contract
* Rmove CA suppressions for Contracts
* Remove M.D.Contracts.Internal stub
* Comments and extra using
* Revert accidentallly removed #if
* Unix build
* Merge Math*
* Fix assert not updated since desktop
* Asserts add no value: remove
* Avoid infinite recursion in StringBuilder assert
* Remove asserts that should be public parameter validation
* Fix comment
* Remove blank line after open curly
Roman Art [Sat, 23 Sep 2017 00:09:42 +0000 (17:09 -0700)]
Fixed Linux test build
William Godbe [Tue, 26 Sep 2017 21:06:06 +0000 (14:06 -0700)]
Merge pull request #14195 from wtgodbe/SignType
Use Real signType to install plugin
wtgodbe [Tue, 26 Sep 2017 21:04:57 +0000 (14:04 -0700)]
Use Real signType to install plugin
William Godbe [Tue, 26 Sep 2017 20:34:37 +0000 (13:34 -0700)]
Merge pull request #14193 from wtgodbe/SigningInfra
Update publish infra to parameterize PB_SignType
wtgodbe [Tue, 26 Sep 2017 20:16:49 +0000 (13:16 -0700)]
Update publish infra to parameterize PB_SignType
Koundinya Veluri [Tue, 26 Sep 2017 20:14:53 +0000 (13:14 -0700)]
Remove Monitor asm helpers (#14146)
- Removed asm helpers on Windows and used portable C++ helpers instead
- Rearranged fast path code to improve them a bit and match the asm more closely
Perf:
- The asm helpers are a bit faster. The code generated for the portable helpers is almost the same now, the remaining differences are:
- There were some layout issues where hot paths were in the wrong place and return paths were not cloned. Instrumenting some of the tests below with PGO on x64 resolved all of the layout issues. I couldn't get PGO instrumentation to work on x86 but I imagine it would be the same there.
- Register usage
- x64: All of the Enter functions are using one or two (TryEnter is using two) callee-saved registers for no apparent reason, forcing them to be saved and restored. r10 and r11 seem to be available but they're not being used.
- x86: Similarly to x64, the compiled functions are pushing and popping 2-3 additional registers in the hottest fast paths.
- I believe this is the main remaining gap and PGO is not helping with this
- On Linux, perf is >= before for the most part
- Perf tests used for below are updated in PR https://github.com/dotnet/coreclr/pull/13670
Steve MacLean [Fri, 22 Sep 2017 16:07:43 +0000 (12:07 -0400)]
[Arm64] Add GT_JCMP node
Create new node type GT_JCMP to represent a
fused Relop + JTrue which does not set flags
Add lowering code to create GT_JCMP when
Arm64 could use cbz, cbnz, tbz, or tbnz
Carol Eidt [Tue, 26 Sep 2017 14:55:29 +0000 (07:55 -0700)]
Merge pull request #14171 from wateret/ryu-arm-putarg-bitcast
[RyuJIT/armarch] Put arguments with GT_BITCAST
Hanjoung Lee [Mon, 25 Sep 2017 11:50:27 +0000 (20:50 +0900)]
[RyuJIT/armarch] Put arguments with GT_BITCAST
Put arguments with GT_BITCAST instead of GT_COPY for arm32/arm64
Fix #14008
Stephen Toub [Mon, 25 Sep 2017 16:02:10 +0000 (12:02 -0400)]
Avoid async method delegate allocation
Previously when a task-returning async method would yield for the first time, there would be four allocations: the task, the state machine object boxed to the heap, a context "runner" object, and a delegate that points to the boxed state machine's MoveNext method. A recent PR changed this to avoid the separate box object and the runner, but that still left the task and the delegate.
This PR avoids the delegate as well in a common case. For async methods that only ever await Task/Task`1, that aren't using a custom sync context/scheduler, and for which tracing isn't enabled, we know the inner workings of both the builder and the awaiter and can thus bypass the awaiter's pattern APIs; instead of creating the delegate that gets passed to the awaiter and then stored in the wrapped task's continuation slot/list, we can instead just store the boxed state machine directly in the slot/list.