Stephen Toub [Fri, 18 Aug 2017 14:16:35 +0000 (10:16 -0400)]
Reduce allocation when async methods yield
The first time a Task-based method yields, today there are four allocations:
- The Task returned from the method
- The state machine object boxed to the heap
- An Action delegate that'll be passed to awaiters
- A MoveNextRunner that stores state machine and the ExecutionContext, and has the method that the Action actually references
For a simple async method, e.g.
```C#
static async Task DoWorkAsync()
{
await Task.Yield();
}
```
when it yields the first time, we allocate four objects equaling 232 bytes (64-bit).
This PR changes the scheme to use fewer allocations and less memory. With the new version, there are only two allocations:
- A type derived from Task
- An Action delegate that'll be passed to awaiters
This doesn't obviate the need for the state machine, but rather than boxing the object normally, we simply store the state machine onto the Task-derived type, with the state machine strongly-typed in a property on the type. Further, the captured ExecutionContext is stored onto that same object, rather than requiring a separate MoveNextRunner to be allocated, and the delegate can point to that Task-derived type. This also makes the builder types thinner, and since the builders are stored in the state machine, that in turn makes the allocation smaller. With this new scheme and that same example from earlier, rather than costing 4 allocations and 232 bytes, it costs 2 allocations and 176 bytes.
It also helps further in another common case. Previously the Task and state machine object would only be allocated once, but the Action and MoveNextRunner would be allocated and then could only be reused for subsequent awaits if the current ExecutionContext was the default. If, however, the current ExecutionContext was not the default, every await would end up allocating another Action and MoveNextRunner, for 2 allocations and 56 bytes on each await. With the new design, those are eliminated, such that even if a non-default ExecutionContext is in play, and even if it changes on between awaits, the original allocations are still used.
There's also a small debugging benefit to this change: the resulting Task object now also contains the state machine data, which means if you have a reference to the Task, you can easily in the debugger see the state associated with the async method. Previously you would need to use a tool like sos to find the async state machine object that referenced the relevant task.
One hopefully minor downside to the change is that the Task object returned from an async method is now larger than it used to be, with all of the state machine's state on it. Generally this won't matter, as you await a Task and then drop it, so the extra memory pressure doesn't exist for longer than it used to. However, if you happen to hold on to that task for a prolonged period of time, you'll now be keeping alive a larger object than you previously were, including any objects lifted "local" variables in the async method referenced.
There is also a very corner case change in behavior: we no longer call SetStateMachine on the builder object. This was always infrastructure code and never meant to be used by end-user code directly. The implementation in .NET Native already doesn't call it.
Jarret Shook [Thu, 14 Sep 2017 19:25:47 +0000 (12:25 -0700)]
Merge pull request #13916 from pgodeq/PR-ARM64-WINDOWS-STELEM-REF-CORRECTED
[ARM64/Windows] Corrected stack overflow in JIT_Stelem_ref
Jarret Shook [Thu, 14 Sep 2017 19:23:57 +0000 (12:23 -0700)]
Merge pull request #13977 from jashook/add_arm64_user
Add pgodeq to the list of arm64 users
Daniel Podder [Thu, 14 Sep 2017 17:35:42 +0000 (10:35 -0700)]
PGI: Load pgort<ver>.dll from the VS native tools env; do not `install` it (#12581)
On Windows, PGO instrumented builds (build.cmd release <arch>
pgoinstrument) introduce a runtime dependency on pgort<ver>.dll for
instrumented binaries. This DLL is distributed alongside the C++
compiler, and is made available via the native tools environment that
ships with Visual Studio.
Previously, we were using cmake to find and "install" this binary
alongside the product when doing an instrumented build, so that the
resulting bin\Product drop is free of any added external dependencies.
However, this approach is fragile, and despite a best effort to make the
implementation work across multiple VS releases, it already broke with
VS 2017.
To fix support for pgoinstrument on VS 2017, and to harden the
implementation for future releases of VS, I'm removing the custom cmake
install logic for the pgort DLL. Instead, we fall back to the officially
supported method: load the correct (native tools) environment before
invoking any command that uses an instrumented binary. This happens in
one place in the build today--loading the JIT to crossgen
System.Private.CoreLib.dll.
Note that there's still an existing CLI/Setup bug that requires copying
the pgort DLL. We're now doing it from within build.cmd, which is not
nearly as fragile for this as cmake is. The workaround is also isolated,
so when the referenced issue is fixed, the workaround (as documented)
can simply be removed.
Fixes #12347.
Victor "Nate" Graf [Thu, 14 Sep 2017 16:30:07 +0000 (09:30 -0700)]
EventPipeProvider destructor hardening (#13958)
* Take lock before manipulating list in desctructor
* Add NULL checks for provider list
* Remove asserts that duplicate conditional check
jashook [Thu, 14 Sep 2017 16:17:35 +0000 (09:17 -0700)]
Add pgodeq to the list of arm64 users
Stephen Toub [Thu, 14 Sep 2017 15:37:49 +0000 (08:37 -0700)]
Merge pull request #13971 from dotnet-maestro-bot/master-UpdateDependencies
Update PgoData to master-
20170914-0028 (master)
Jan Vorlicek [Thu, 14 Sep 2017 14:43:13 +0000 (16:43 +0200)]
Fix crossgen memory mappings (#13972)
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.
Jarret Shook [Thu, 14 Sep 2017 14:04:34 +0000 (07:04 -0700)]
Merge pull request #13954 from jashook/disable_arm_tests
Disable tests based on 13952
Pankaj Gode [Thu, 14 Sep 2017 14:01:32 +0000 (19:31 +0530)]
[ARM64/Windows] Corrected the address used to push fp,lr in JIT_Stelem_Ref
tvass83 [Thu, 14 Sep 2017 12:05:29 +0000 (14:05 +0200)]
The !heapstat sos command emits difficult to read output as the "Percentage" column is not aligned properly (#13856)
dotnet-maestro-bot [Thu, 14 Sep 2017 07:49:08 +0000 (00:49 -0700)]
Update PgoData to master-
20170914-0028
Andy Ayers [Thu, 14 Sep 2017 06:13:25 +0000 (23:13 -0700)]
JIT: mark part of runtime lookup tree as nonfaulting and invariant (#13953)
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.
Stephen Toub [Thu, 14 Sep 2017 05:24:08 +0000 (22:24 -0700)]
Merge pull request #13934 from dotnet-maestro-bot/master-UpdateDependencies
Update BuildTools, CoreClr, PgoData to prerelease-02014-02, preview1-25714-01, master-
20170913-0045, respectively (master)
Jan Kotas [Thu, 14 Sep 2017 01:07:51 +0000 (18:07 -0700)]
Delete JitHelpers.UnsafeCast
Jan Kotas [Wed, 13 Sep 2017 22:59:37 +0000 (15:59 -0700)]
Replace JitHelpers.UnsafeCast with Unsafe.As
Both methods to the same, but the latter one is the offficial public name for the functionality
Joseph Tremoulet [Thu, 14 Sep 2017 03:49:38 +0000 (23:49 -0400)]
Undo more JIT layout workarounds (#13961)
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.
Joseph Tremoulet [Thu, 14 Sep 2017 03:21:07 +0000 (23:21 -0400)]
Merge pull request #13957 from JosephTremoulet/LoopNestFix
Renumber blocks before computing loop nest
Jan Kotas [Wed, 13 Sep 2017 23:36:57 +0000 (16:36 -0700)]
Call the fast generic impl from the non-generic one where possible
Jan Kotas [Wed, 13 Sep 2017 22:53:18 +0000 (15:53 -0700)]
Make Array.Reverse faster
Array.Reverse showed up as hot method in profiles of real workloads (e.g. it is called from Json.NET frequently via List.Reverse)
Jan Vorlicek [Thu, 14 Sep 2017 02:52:39 +0000 (04:52 +0200)]
Enable end to end Alpine build (#13966)
This change enables full end to end build of coreclr including
managed code on Alpine Linux.
Brian Sullivan [Thu, 14 Sep 2017 01:48:47 +0000 (18:48 -0700)]
Merge pull request #13967 from dotnet-bot/from-tfs
Merge changes from TFS
dotnet-maestro-bot [Thu, 14 Sep 2017 00:55:54 +0000 (17:55 -0700)]
Update BuildTools, CoreClr, PgoData to prerelease-02014-02, preview1-25714-01, master-
20170913-0045, respectively
Carol Eidt [Thu, 14 Sep 2017 00:36:55 +0000 (17:36 -0700)]
Merge pull request #13626 from mikedn/test-bt
Lower TEST(x, LSH(1, y)) to BT(x, y)
Brian Sullivan [Thu, 14 Sep 2017 00:09:33 +0000 (17:09 -0700)]
Fix potentially unused variable in lb arm
[tfs-changeset: 1674030]
Victor "Nate" Graf [Wed, 13 Sep 2017 21:51:46 +0000 (14:51 -0700)]
Eliminate double delete in EventPipeProvider cleanup (#13833)
* Eliminate double delete in EventProvider cleanup
* Fix access after deletion error
* Simplify control flow
Joseph Tremoulet [Wed, 13 Sep 2017 18:29:05 +0000 (14:29 -0400)]
Renumber blocks before computing loop nest
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.
Jan Vorlicek [Wed, 13 Sep 2017 21:33:55 +0000 (23:33 +0200)]
Fix setting PAX options for crossgen (#13950)
In my previous PR that added marking executables with paxctl, I've made
a mistake in the order of calling _add_library and add_dependencies.
But that was hidden due to the fact that we have yet another copy of the
add_library_clr and add_executable_clr functions in src/CMakeLists.txt.
I have no idea how that happened.
This one has overriden the other, which has hidden the problem, but also
caused the crossgen to not to be modified by the paxctl.
So I am fixing the order and removing the extra definitions of those
functions.
jashook [Wed, 13 Sep 2017 20:00:12 +0000 (13:00 -0700)]
Disable tests based on 13952
Jarret Shook [Wed, 13 Sep 2017 19:50:12 +0000 (12:50 -0700)]
Merge pull request #13943 from jashook/fix_lb_build_break
Fix potentially unused variable in lb arm
Jan Kotas [Wed, 13 Sep 2017 19:49:24 +0000 (12:49 -0700)]
Fix ARM build break (#13932)
jashook [Wed, 13 Sep 2017 17:54:48 +0000 (10:54 -0700)]
Fix potentially unused variable in lb arm
Jan Vorlicek [Wed, 13 Sep 2017 17:19:20 +0000 (19:19 +0200)]
Disable PAX mprotect for native executables (#13940)
This change adds marking native executables that coreclr build produces
(corerun, coreconsole, crossgen, ilasm, ildasm, crashdump) to using the
paxctl tool to allow them running on systems with PAX configured so that
creating executable memory mappings by applications is prohibited.
Jan Kotas [Wed, 13 Sep 2017 03:32:08 +0000 (20:32 -0700)]
Fix AV in corerun on invalid filename
Before this fix, corerun would AV on certain invalid paths e.g.: corerun test.exe\
Jan Kotas [Wed, 13 Sep 2017 03:30:30 +0000 (20:30 -0700)]
Mark Span.Length as non-versionable
This allows inlining Span.Length accross versioning boundaries in R2R images. We are leaking the Span implementation details already because the Span indexer is treated as intrinsic. Marking a few more trivial methods as non-versionable should not do any future harm.
Carol Eidt [Wed, 13 Sep 2017 16:30:46 +0000 (09:30 -0700)]
Merge pull request #13806 from hqueue/arm/ryujit/issue_13739_jitstress_NYI_addr
[RyuJIT/ARM32] Add ADDR and fixup return type correctly
Tarek Mahmoud Sayed [Wed, 13 Sep 2017 15:20:46 +0000 (08:20 -0700)]
Fix Hebrew date parsing (#13929)
This fix when parsing Hevrew dat e string formatted as dd/MM/yy. we didn't encounter the same on Windows before because default short date pattern on Windows is dd MMM yyyy which we can parse it successfully.
Mike Danes [Mon, 28 Aug 2017 17:28:56 +0000 (20:28 +0300)]
Lower TEST(x, LSH(1, y)) to BT(x, y)
Mike Danes [Sat, 29 Apr 2017 10:49:20 +0000 (13:49 +0300)]
Add GT_BT
Mike Danes [Sat, 29 Apr 2017 10:12:21 +0000 (13:12 +0300)]
Add INS_bt
Joseph Tremoulet [Wed, 13 Sep 2017 13:04:04 +0000 (09:04 -0400)]
Merge pull request #13903 from JosephTremoulet/PlaceReturns
Improve const return block placement
Joseph Tremoulet [Wed, 13 Sep 2017 13:03:13 +0000 (09:03 -0400)]
Merge pull request #13835 from sdmaclea/PR-ARM64-GT_MULHI
[Arm64] Add GT_MULHI
Joseph Tremoulet [Wed, 13 Sep 2017 12:58:31 +0000 (08:58 -0400)]
Merge pull request #13799 from sdmaclea/PR-ARM64-Transform-AND-CMP
[Arm64] Transform AND-CMP to TST
Konstantin Baladurin [Wed, 13 Sep 2017 12:17:55 +0000 (15:17 +0300)]
Introduce FEATURE_GDBJIT_SYMTAB (#13567)
* Introduce FEATURE_GDBJIT_SYMTAB
This commit adds new feature FEATURE_GDBJIT_SYMTAB. When it's set
ELF file with symtab section will be generated for all JITed methods.
It helps lldb and gdb correctly unwind frames of JITed methods as they
can use assembly language inspection to determine location of saved
registers on stack.
* gdbjit symtab feature: use different symbols for each function in JITed code
Jarret Shook [Wed, 13 Sep 2017 08:43:06 +0000 (01:43 -0700)]
Change how numProc is derived on Linux (#13909)
Before the decision for numProcs to run in parallel for runtests.sh
was based on _NPROCESSORS_ONLN which harware which attempts to save
power (eg arm(64)) this number may be < numProcs.
dotnet-maestro-bot [Wed, 13 Sep 2017 02:49:01 +0000 (19:49 -0700)]
Update BuildTools, CoreClr, CoreFx, PgoData to prerelease-02012-02, preview1-25713-01, preview1-25712-02, master-
20170912-0038, respectively (#13928)
Jim Ma [Wed, 13 Sep 2017 01:33:40 +0000 (09:33 +0800)]
Re-implemented the ecvt function. (#12894)
* Re-implemented the ecvt function.
Instead of leveraging snprintf, re-implement the ecvt function according to the paper: https://www.cs.indiana.edu/~dyb/pubs/FP-Printing-PLDI96.pdf
Note:
1. This commit won't fix any existing bug.
2. This is a raw implementation of the paper. The performance on Linux only gain 10%. We could tune the performance further.
Fix #10651
* Resolve a cross platform header file issue.
Fix #10651
* Fixed a minor bug. Improved the performance.
Fix #10651
* Modified code according to code review feedback.
This commit fixed most of the issue found in code review. However, some of the feedback may not be involved due to either little performance improvement or need a POC.
Fix #10651
* Try to fix constexpr compile error on Windows.
Fix #10651
* Fixed a potential overflow bug in BigNum::Compare.
Fix #10651
* Improved multiply 10 operation.
Use shift and add operation to replace actual multiply operation.
Fix #10651
* Remove old _ecvt function.
Fix #10651
* Documented the reason why we do not need m+ and m-.
Fix #10651
* Changed exp > 0 to exp != 0 to remove any confusion.
exp should fall in 1 ~ 2046 for normalized value. Denormalized value has exp = 0.
Fix #10651
* Disable the _ecvt tests.
Fix #10651
* Removed _ecvt tests.
Fix #10651
* Re-implemented LogBase2.
Fix #10651
* Use DWORD and DWORD64 for _BitScanReverse and _BitScanReverse64
Fix #10651
* Fixed x86 compile issue for _BitScanReverse64
x86 does not support _BitScanReverse64 so we have to add additional shift operations to handle it.
Fix #10651
* Implemented BitScanReverse64 and BitScanReverse in pal.h
Fix #10651
* Remove the confusion comment which is unrelated to BitScanReverse.
Fix #10651
* Introduced wmemset to enhance the perf for 0.0
Fix #10651
* Improved the performance of converting 0.0.
Fix #10651
* Renamed ecvt to DoubleToNumberWorker.
Fix #10651
* Updated code according to the code review feedback.
Fix #10651
Alex Ghiondea [Wed, 13 Sep 2017 01:30:20 +0000 (18:30 -0700)]
Update the third party notices file to reference the floating point number algorithm (#13920)
Sujin Kim [Wed, 13 Sep 2017 00:55:55 +0000 (09:55 +0900)]
[RyuJIT/ARM32] Implement CreateDictionaryLookupHelper only via helper (#13733)
* [RyuJIT/ARM32] Implement CreateDictionaryLookupHelper only via run-time helper
Implement CreateDictionaryLookupHelper only via run-time helper
* Add assertion for checking CORINFO_USEHELPER
Jan Vorlicek [Wed, 13 Sep 2017 00:30:55 +0000 (02:30 +0200)]
Fix ARM32 secure delegate bug (#13922)
This change fixes a bug that causes crashes when secure delegate is
invoked on ARM32 with legacy codegen. Register R4 was loaded with
indirection slot address and immediatelly marked as trashed, so the JIT
compiler reused it before the call that was supposed to have that value
in R4.
The fix was to move the reg trashing after the call.
There was also an incorrect marking of that address as EA_PTRSIZE
while it should be EA_BYREF, so I've fixed that too.
Ahson Ahmed Khan [Wed, 13 Sep 2017 00:29:14 +0000 (17:29 -0700)]
Make dangerous Span APIs less discoverable. (#13927)
Eugene Rozenfeld [Wed, 13 Sep 2017 00:15:08 +0000 (17:15 -0700)]
Remove redundant zero-initialization of struct temps with GC fields. (#13868)
Remove redundant zero-initialization of struct temps with GC fields.
Structs with GC pointer fields are fully zero-initialized in the prolog if compInitMem is true.
Therefore, we don't need to insert zero-initialization for the result of newobj or for inlinee locals
when they are structs with GC pointer fields and the basic bock is not in a loop.
Andy Ayers [Tue, 12 Sep 2017 22:02:54 +0000 (15:02 -0700)]
JIT: optimize case where box feeds GetType (#13710)
If the only use of a box is in a call to Type:GetType, remove the box and
obtain the type directly. Get the handle needed for obtaining the type from
the newobj call in the original box, via a new box removal option.
Also add some logging to the type optimizations done in morph.
Closes #13187.
Jarret Shook [Tue, 12 Sep 2017 20:49:13 +0000 (13:49 -0700)]
Merge pull request #13819 from sdmaclea/PR-ARM64-MOD-AND-TRANSFORM
[Arm64] Allow a%b to a&(b-1) transform
Sergey Andreenko [Tue, 12 Sep 2017 20:11:29 +0000 (13:11 -0700)]
fix stack depth in DevDiv_278523 test source code(#13912)
Mike McLaughlin [Tue, 12 Sep 2017 19:41:14 +0000 (12:41 -0700)]
Fix core dump generation on Centos. (#13887)
Fix core dump generation on Centos.
Issue #13764
Michelle McDaniel [Tue, 12 Sep 2017 18:02:12 +0000 (11:02 -0700)]
Merge pull request #13918 from adiaaida/unifyPerfConfigs
Add OptLevel and JitName configurations
Carol Eidt [Tue, 12 Sep 2017 17:26:49 +0000 (10:26 -0700)]
Merge pull request #13715 from CarolEidt/LsraInfoInLsra
Do TreeNodeInfoInit in buildIntervals
Michelle McDaniel [Tue, 12 Sep 2017 16:56:30 +0000 (09:56 -0700)]
Add OptLevel and JitName configurations
To unify the configuration names in benchview, add OptLevel and JitName
configurations in run-xunit-perf.sh. This change does not add min_opts
to perf.groovy.
Viktor Hofer [Tue, 12 Sep 2017 16:45:42 +0000 (18:45 +0200)]
Merge pull request #13242 from ViktorHofer/BinarySerializationCleanup
Binary serialization unused methods and attributes cleanup and misc code cleanup
Steve MacLean [Tue, 12 Sep 2017 15:54:11 +0000 (11:54 -0400)]
Fix formatting
Steve MacLean [Tue, 12 Sep 2017 15:44:47 +0000 (11:44 -0400)]
noway_assert to assert per review
Steve MacLean [Tue, 12 Sep 2017 15:32:26 +0000 (11:32 -0400)]
Fix formatting
Steve MacLean [Tue, 12 Sep 2017 15:22:51 +0000 (11:22 -0400)]
Simplify divisorValue calculation
Steve MacLean [Tue, 12 Sep 2017 15:15:26 +0000 (11:15 -0400)]
Add comments per review
José Rivero [Tue, 12 Sep 2017 15:15:37 +0000 (08:15 -0700)]
Fixing archiving of Linux perf artifacts. (#13911)
- Previous change did not fix archiving artifacts
Viktor Hofer [Tue, 12 Sep 2017 09:09:40 +0000 (11:09 +0200)]
ResourceSet
Viktor Hofer [Thu, 7 Sep 2017 19:21:45 +0000 (21:21 +0200)]
TextInfo
Viktor Hofer [Thu, 7 Sep 2017 17:28:18 +0000 (19:28 +0200)]
Reflection
Viktor Hofer [Thu, 24 Aug 2017 16:29:57 +0000 (18:29 +0200)]
IO
Pankaj Gode [Tue, 12 Sep 2017 14:32:49 +0000 (20:02 +0530)]
[ARM64/Windows] Corrected stack overflow in JIT_Stelem_ref
Konstantin Baladurin [Tue, 12 Sep 2017 10:44:24 +0000 (13:44 +0300)]
[GDBJIT] Specify C# language in DWARF debug information (#13720)
* [GDBJIT] Specify C# language in DWARF debug information
To correctly support C# language in lldb DWARF debug information
should contain correct information about language.
Now we use 0x9e57 constant for specify C# language.
* [GDBJIT] Introduce FEATURE_GDBJIT_LANGID_CS
If this feature is set gdbjit will use 0x9e57 as c# lang id,
otherwise it will use DW_LANG_C89.
Stephen Toub [Tue, 12 Sep 2017 06:49:53 +0000 (23:49 -0700)]
Merge pull request #13907 from stephentoub/valuetask_astask_caching
Use AsyncTaskCache in ValueTask.AsTask()
dotnet bot [Tue, 12 Sep 2017 02:54:33 +0000 (19:54 -0700)]
Merge changes from TFS (#13884)
Add new GetMethodNameFromMetadata interface member to ILGEN.
Also fix warning in the build.
[tfs-changeset: 1673078]
[Hand edited to fix break in SPMI]
Joseph Tremoulet [Mon, 11 Sep 2017 18:56:16 +0000 (14:56 -0400)]
Improve const return block placement
Tweak a few things so that generated constant return blocks get laid out
more optimally:
- Don't set BBF_DONT_REMOVE on them; it's ok to move them around, and
if all references to them get dropped, it's fine to eliminate them.
- Insert them immediately after their lexically-last predecessor when
generating them; this increases the likelihood of using fallthrough
rather than gotos to target them in the face of fgReorderBlocks'
reticence to reorder code that we don't have IBC data for and that
hasn't been marked rare.
- Make fgReorderBlocks slightly more aggressive for a pattern that now
shows up somewhat routinely for returning compound conditionals from
predicate functions.
Stephen Toub [Mon, 11 Sep 2017 21:40:57 +0000 (14:40 -0700)]
Use AsyncTaskCache in ValueTask.AsTask()
We can avoid task allocations for common values by using the same task cache that async methods do. This is important to avoid allocations in certain cases when switching from Task-returning to ValueTask-returning methods. If at some point we change Task.FromResult to use the same cache, this can be reverted.
William Godbe [Mon, 11 Sep 2017 18:49:57 +0000 (11:49 -0700)]
Merge pull request #13875 from wtgodbe/RevertLabel
Revert PreReleaseLabel to preview1
Andy Ayers [Mon, 11 Sep 2017 18:12:45 +0000 (11:12 -0700)]
JIT: optimize Enum.HasFlag (#13748)
Check for calls to `Enum.HasFlag` using the new named intrinsic support
introduced in #13815. Implement a simple recognizer for these named
intrinsics (currently just recognizing `Enum.HasFlag`).
When the call is recognized, optimize if both operands are boxes with
compatible types and both boxes can be removed. The optimization changes the
call to a simple and/compare tree on the underlying enum values.
To accomplish this, generalize the behavior of `gtTryRemoveBoxUpstreamEffects`
to add a "trial removal" mode and to optionally suppress narrowing of the
copy source.
Invoke the optimization during importation (which will catch most cases) and
again during morph (to get the post-inline cases).
Added test cases. Suprisingly there were almost no uses of HasFlag in the
current CoreCLR test suite.
Closes #5626.
Konstantin Baladurin [Mon, 11 Sep 2017 17:23:16 +0000 (20:23 +0300)]
[GDBJIT] Fix calculation of debuginfo's size. (#13899)
Information about each type is dumped once but during debuginfo's
size calculation it was taken into account several time. Due to it
size of debuginfo section could be in several times bigger than
needed that in some cases leaded to OOM.
Eric Erhardt [Mon, 11 Sep 2017 16:30:56 +0000 (11:30 -0500)]
Merge pull request #13876 from eerhardt/UpdateBuildTools
Update BuildTools automatically when new versions are available.
José Rivero [Mon, 11 Sep 2017 16:10:02 +0000 (09:10 -0700)]
Ubuntu runs are not archiving perf results because rsync does not create destination folder (#13858)
Eric Erhardt [Mon, 11 Sep 2017 14:52:39 +0000 (09:52 -0500)]
Merge branch 'master' into UpdateBuildTools
Alfred Myers [Mon, 11 Sep 2017 14:51:58 +0000 (11:51 -0300)]
fixed minor typo (#13898)
Konstantin Baladurin [Mon, 11 Sep 2017 14:48:01 +0000 (17:48 +0300)]
Fix building of rootfs for Tizen armel (#13854)
Now there isn't arm buildtarget in tizen-base repository.
Use standard one to fetch packages for rootfs.
Kevin Gosse [Mon, 11 Sep 2017 14:14:11 +0000 (16:14 +0200)]
Make order of elements consistent (#13892)
When the cache is only partially populated, MemberInfoCache.Insert will
insert the new members into the cache. But then, it will return the
original list. In subsequent calls, it will return the cached list.
However, the order of elements can be different, which can cause issues
with methods that rely on the order of elements returned by
Type.GetFields (for instance, Attribute.GetHashCode)
Stephen Toub [Mon, 11 Sep 2017 14:09:31 +0000 (10:09 -0400)]
Merge pull request #13894 from dotnet-maestro-bot/master-UpdateDependencies
Update PgoData to master-
20170911-0041 (master)
Eric Erhardt [Mon, 11 Sep 2017 14:02:42 +0000 (09:02 -0500)]
Merge branch 'master' into UpdateBuildTools
dotnet-maestro-bot [Mon, 11 Sep 2017 07:57:00 +0000 (00:57 -0700)]
Update PgoData to master-
20170911-0041
Stephen Toub [Mon, 11 Sep 2017 06:55:58 +0000 (02:55 -0400)]
Merge pull request #13893 from dotnet-maestro-bot/master-UpdateDependencies
Update CoreClr to preview2-25711-01 (master)
dotnet-maestro-bot [Mon, 11 Sep 2017 00:15:37 +0000 (17:15 -0700)]
Update CoreClr to preview2-25711-01
Eric Erhardt [Sun, 10 Sep 2017 20:36:19 +0000 (15:36 -0500)]
Merge branch 'master' into UpdateBuildTools
Eric Erhardt [Sun, 10 Sep 2017 20:35:25 +0000 (15:35 -0500)]
Merge branch 'master' into UpdateBuildTools
Stephen Toub [Sun, 10 Sep 2017 13:20:14 +0000 (09:20 -0400)]
Merge pull request #13847 from dotnet-maestro-bot/master-UpdateDependencies
Update CoreClr, PgoData to preview2-25709-04, master-
20170910-0049, respectively (master)
dotnet-maestro-bot [Sun, 10 Sep 2017 08:06:00 +0000 (01:06 -0700)]
Update CoreClr, PgoData to preview2-25709-04, master-
20170910-0049, respectively
Stephen Toub [Sun, 10 Sep 2017 03:25:18 +0000 (23:25 -0400)]
Merge pull request #13849 from stephentoub/string_create
Add String.Create span-based method
Jan Kotas [Sun, 10 Sep 2017 01:48:20 +0000 (18:48 -0700)]
Merge pull request #13888 from jkotas/corelib-mirror
Mirror changes from dotnet/corert
Stephen Toub [Sat, 9 Sep 2017 23:44:19 +0000 (19:44 -0400)]
Merge pull request #13886 from ahsonkhan/SpanReadOnlyStruct
Marking {ReadOnly}Span with IsReadOnly attribute
Jan Kotas [Sat, 9 Sep 2017 23:32:23 +0000 (16:32 -0700)]
Finish moving files to shared CoreLib partition
Jan Kotas [Sat, 9 Sep 2017 22:51:05 +0000 (15:51 -0700)]
Move PInvoke interop related attributes to shared CoreLib partition
[tfs-changeset: 1673253]
Jan Kotas [Sat, 9 Sep 2017 16:06:21 +0000 (09:06 -0700)]
Finish moving files to shared partition