Hyeongseok Oh [Tue, 23 Aug 2016 08:07:47 +0000 (17:07 +0900)]
fix for infinite and NaN double
Commit migrated from https://github.com/dotnet/coreclr/commit/
3ed59739b770dbafb494d06ea5a0a314974542b3
Hyeongseok Oh [Fri, 19 Aug 2016 02:06:52 +0000 (11:06 +0900)]
fix for correct conversion from negative double to unsigned long in ARM (modify helper)
Commit migrated from https://github.com/dotnet/coreclr/commit/
39302ecfa7a32bb39d30e299a1863d0af59c31c5
Hyeongseok Oh [Tue, 16 Aug 2016 10:22:06 +0000 (19:22 +0900)]
fix for correct conversion from negative double to unsigned long in ARM
Commit migrated from https://github.com/dotnet/coreclr/commit/
fdf58bc1b0e3906c5a3fba0017ea8f2f9887a892
Jonghyun Park [Mon, 8 Aug 2016 01:35:54 +0000 (10:35 +0900)]
Check PAL_VirtualUnwind failure during GC (dotnet/coreclr#6598)
As discussed in dotnet/coreclr#6525, PAL_VirtualUnwind sometimes fails during GC.
This GC failure leads to very unpredicatble behavior (which is very hard to
analyze).
This commit tries to stop the execution at the point where error
happens.
Commit migrated from https://github.com/dotnet/coreclr/commit/
deb00ad58acf627763b6c0a7833fa789e3bb1cd0
James Ko [Sun, 7 Aug 2016 15:21:30 +0000 (11:21 -0400)]
Don't overwrite crossgen log in build.cmd script (dotnet/coreclr#6639)
Commit migrated from https://github.com/dotnet/coreclr/commit/
5976ffa9a624bd05bbb0d67a742e89bc9f16d1dc
Guo Xiao [Sun, 7 Aug 2016 15:20:52 +0000 (10:20 -0500)]
Fix compile error (dotnet/coreclr#6641)
error: cannot initialize return object of type 'void *' with an lvalue
of type 'void ()'
Commit migrated from https://github.com/dotnet/coreclr/commit/
ab6bc52f502498d6f6380b8b58d3495a7bd84f35
Bruce Forstall [Sat, 6 Aug 2016 17:39:06 +0000 (10:39 -0700)]
Merge pull request dotnet/coreclr#6619 from BruceForstall/Fix6517
Fix dotnet/coreclr#6517
Commit migrated from https://github.com/dotnet/coreclr/commit/
5002de7f988c28602d90df2967cb056b1b16852f
Gaurav Khanna [Sat, 6 Aug 2016 02:33:50 +0000 (19:33 -0700)]
Merge pull request dotnet/coreclr#6630 from dotnet-bot/UpdateDependencies20160805073043
Updating External dependencies to beta-24405-00
Commit migrated from https://github.com/dotnet/coreclr/commit/
8596efa80c68bdc90f577aa80252406dec6bedb0
Eugene Rozenfeld [Sat, 6 Aug 2016 02:09:04 +0000 (19:09 -0700)]
Merge pull request dotnet/coreclr#6631 from erozenfeld/NullCheckFolding
Null check folding.
Commit migrated from https://github.com/dotnet/coreclr/commit/
14481976d4fc90e5bde78b0476eddcf0e6462ee0
James Ko [Sat, 6 Aug 2016 02:06:59 +0000 (22:06 -0400)]
Decrease writes to local variables in Buffer.MemoryCopy (dotnet/coreclr#6627)
In `Buffer.MemoryCopy` currently we are making 4 writes every time we copy some data; 1 to update `*dest`, 1 to update `dest`, 1 to update `src` and 1 to update `len`. I've decreased it to 2; one to update a new local variable `i`, which keeps track of how many bytes we are into the buffer. All writes are now made using
```cs
*(dest + i + x) = *(src + i + x)
```
which has no additional overhead since they're converted to using memory addressing operands by the jit.
Another change I made was to add a few extra cases for the switch-case at the beginning that does copying for small sizes without any branches. It now covers sizes 0-22. This is beneficial to the main codepath, since we can convert the unrolled loop to a `do..while` loop and save an extra branch at the beginning. (max 7 bytes for alignment, 16 for 1 iteration of the loop, so the min bytes we can copy without checking whether we should stop is 23.) This adds
This PR increases the performance of `MemoryCopy` by 10-20% for most buffer sizes on x86; you can see the performance test/results (and the generated assembly for each version) [here](https://gist.github.com/jamesqo/
337852c8ce09205a8289ce1f1b9b5382). (Note that this codepath is also used by `wstrcpy` at the moment, so this directly affects many common String operations.)
Commit migrated from https://github.com/dotnet/coreclr/commit/
32fe06348631c9e146832e5afac2ce97bb2df43e
Andy Ayers [Sat, 6 Aug 2016 02:03:53 +0000 (19:03 -0700)]
Merge pull request dotnet/coreclr#6636 from AndyAyersMS/MoreObservations
Inliner: add a few more observations
Commit migrated from https://github.com/dotnet/coreclr/commit/
f0997c5309f7a20c78d739c09e9c107291be814f
Bruce Forstall [Fri, 5 Aug 2016 06:52:25 +0000 (23:52 -0700)]
Fix dotnet/coreclr#6517
My previous change dotnet/coreclr#6342 to implement tailcall-via-helper for RyuJIT/x86
also changed non-x86 for Delegate Invoke calls, to avoid creating a
temp where we already had a local. However, this temp is needed if the
local is a field (with an offset). Even if it is not a field, I saw it
needed in a JitStressRegs case. So I'm returning it to the previous logic
for non-x86, non-tailcall cases. It is still required for tailcall cases
to preserve some delicate ordering constraints on the special tailcall
argument values.
Commit migrated from https://github.com/dotnet/coreclr/commit/
021a224809af2104a1c488da1d717d9d80f35cc8
Andy Ayers [Fri, 5 Aug 2016 21:49:02 +0000 (14:49 -0700)]
Inliner: add a few more observations
Now that we can trust `optMethodFlags`, note if the root caller has
newarr or newobj. We can't yet tell if these operations might feed
a particular call's arguments but their presence in the root method
alone might be enough to build correlations with performance changes.
Count number of returns in the callee. Note if callee has same this
as the (root) caller. Note when callee is a class constructor.
Add code to dump out the new observations. No policies act on these yet.
Commit migrated from https://github.com/dotnet/coreclr/commit/
8c034fb97caa20f5cd824711587dcd964dae6c45
Swaroop Sridhar [Fri, 5 Aug 2016 22:48:42 +0000 (15:48 -0700)]
Merge pull request dotnet/coreclr#6522 from swaroop-sridhar/gcinfov2
Implement GcInfo v2
Commit migrated from https://github.com/dotnet/coreclr/commit/
6bd955703e218f334ce941e3bdf5e0fc1aeedc35
Eugene Rozenfeld [Fri, 5 Aug 2016 20:14:58 +0000 (13:14 -0700)]
Null check folding.
1. Added a null check folding optimization to early prop. The optimization tries to fold
GT_NULLCHECK(y) nodes into GT_IND(x) nodes where x=y+const
in the same block (where const is sufficiently small). The algorithm uses SSA use-def info
to go from x to its def and then tries to match the pattern x = COMMA(NULLCHECK(y), ADD(y, const))).
If such a pattern is found, the algorithm checks the trees and statements that are between the use
and the def in execution order to see if they have unsafe side effects: calls, exception sources, and
assignments (all assignment if we are in a try and assignments to global memory if we are not).
If there are no nodes with unsafe side effects, the null check is removed.
2. Made several improvements to null check elimination in assertion propagation.
..* Added a new kind for op1: O1K_VALUE_NUMBER
..* Non-null assertions can now be made about arbitrary value numbers, not just locals
..* Fixed code that was trying to find a ref given a byref: the code now handles an arbitrary number of
offsets and checks whether the total offsetof is small enough.
..* Added similar code that tries to find a ref VN given a byref VN
This addresses part of the suboptimal code generated for dotnet/coreclr#1226: null check is no longer emitted.
Correctness: ran full desktop and CoreCLR testing.
Throughput: no measurable throughput impact (verified by running internal CQNgenTP several times).
Code size in CoreCLR:
Framework assemblies:
Total bytes of diff: -805 (-0.01 % of base)
diff is an improvement.
Total byte diff includes 0 bytes from reconciling methods
Base had 0 unique methods, 0 unique bytes
Diff had 0 unique methods, 0 unique bytes
Top file improvements by size (bytes):
-352 : System.Private.CoreLib.dasm (-0.01 % of base)
-306 : Microsoft.CodeAnalysis.CSharp.dasm (-0.01 % of base)
-58 : Microsoft.CodeAnalysis.dasm (-0.01 % of base)
-48 : System.Numerics.Vectors.dasm (-0.08 % of base)
-14 : System.Xml.XmlDocument.dasm (-0.01 % of base)
7 total files with size differences.
Top method improvements by size (bytes):
-30 : System.Numerics.Vectors.dasm - System.Numerics.Matrix4x4:ToString():ref:this
-30 : System.Private.CoreLib.dasm - System.DateTimeParse:ParseByFormat(byref,byref,byref,ref,byref):bool
-24 : Microsoft.CodeAnalysis.CSharp.dasm - <GetMethodsToEmit>d__68:MoveNext():bool:this
-18 : System.Private.CoreLib.dasm - System.DateTimeParse:Lex(int,byref,byref,byref,byref,byref,int):bool
-18 : System.Private.CoreLib.dasm - System.DateTimeParse:ProcessDateTimeSuffix(byref,byref,byref):bool
243 total methods with size differences.
JIT Code quality benchmarks in CoreCLR:
Total bytes of diff: -29 (-0.01 % of base)
diff is an improvement.
Total byte diff includes 0 bytes from reconciling methods
Base had 0 unique methods, 0 unique bytes
Diff had 0 unique methods, 0 unique bytes
Top file improvements by size (bytes):
-25 : Bytemark\Bytemark\Bytemark.dasm (-0.03 % of base)
-4 : BenchmarksGame\pidigits\pi-digits\pi-digits.dasm (-0.21 % of base)
2 total files with size differences.
Top method improvements by size (bytes):
-9 : Bytemark\Bytemark\Bytemark.dasm - AssignJagged:second_assignments(ref,ref)
-6 : Bytemark\Bytemark\Bytemark.dasm - EMFloat:MultiplyInternalFPF(byref,byref,byref)
-4 : Bytemark\Bytemark\Bytemark.dasm - EMFloat:AddSubInternalFPF(ubyte,byref,byref,byref)
-2 : Bytemark\Bytemark\Bytemark.dasm - EMFloat:denormalize(byref,int)
-2 : Bytemark\Bytemark\Bytemark.dasm - EMFloat:DivideInternalFPF(byref,byref,byref)
8 total methods with size differences.
In internal SPMI:
3915 methods with diffs, almost everything -- code size improvements
13,715 bytes code size reduction overall 0.51% on affected methods
CQ_Perf: 85 methods with diffs, 84 code size improvements, no regressions
Benchmarks with code size diffs:
Roslyn 59
TrueTypeBench 19
mono-pi-digits 2
mono-chameneos-redux 2
ByteMark\assign_jagged 1
Json_Serialize 1
SharpChess 1
BenchI\mulmtx 1
Internal CQPerf didn't report any runtime wins for these benchmarks.
Commit migrated from https://github.com/dotnet/coreclr/commit/
47eec64cdd246244a7dee1e7edd054e9e579be02
Swaroop Sridhar [Wed, 20 Jul 2016 23:50:22 +0000 (16:50 -0700)]
Implement GcInfo v2
Ref dotnet/coreclr#4379
This change implements GcInfo version 2 for all platforms that use the
GcInfo library (all architectures other than X86).
Changes are:
1) Defines ReturnKind enumeration for all platforms
2) Change the GcInfo encoder library to encode the ReturnKind and ReversePInvokeFrame slot
3) Change the CM's GcInfo decoder to encode the ReturnKind and ReversePInvokeFrame slot for GCINFO_VERSION 2
4) Some corrections to GCINFO_MEASUREments
5) Changes to RYU Jit to provide the correct information to the encoder
6) Changes to the VM to use the ReturnKind information while hijacking a thread
- If ReturnKind is available from GcInfo, new hijack routines are used
- Otherwise, fall back to old method (for compatibility)
7) Rework and simplify the thread hijack routines by scanning HijackFrames directly for gcroots
8) Supporting code to implement the above features.
Returning Structs in multiple registers
Hijacking for StructInRegs is currently only implemented for
Unix SystemV ABI Multi-reg struct returns. However, the hijack-workers that use
ReturnKind are ready to handle other platforms (ex: ARM/ARM64 Windows)
once the corresponding HijackTripThread() assembly routines are defined.
The New feature flag: FEATURE_MULTIREG_RETURN is set for platforms where a struct value
can be returned in multiple registers [ex: Windows/Unix ARM/ARM64, Unix-AMD64]
FEATURE_UNIX_AMD64_STRUCT_PASSING is a specific kind of FEATURE_MULTIREG_RETURN
specified by SystemV ABI for AMD64
Compatibility with other JITs
- All new GCInfo generated by RYU Jit is in GcInfo version 2
- All Ngen images must be regenerated with the new GcInfo version.
- Ready-to-run images with old GcInfo will continue to work.
- Jit64/X64 uses the GcInfo library, so it generates GcInfo version 2.
However, it doesn't (yet) provide the data to encode the correct ReturnKind
Similar is the case for ARM32 code running on JIT32, and any other JITs
that may be using GcInfo library but not yet modified to use the new API.
So, compatibility is achived using RT_Unset flag.
When ReturnKind is RT_Unset, it means that the JIT did not set
the ReturnKind in the GCInfo, and therefore the VM cannot rely on it,
and must use other mechanisms (similar to GcInfo ver 1) to determine
the Return type's GC information.
Implement GC root scanning for Hijack-frames
This change implements GCScanRoots() method for Hijacke-frames
based on the ReturnKind information available from the GcInfo.
If the exact ReturnKind is not available in the GcInfo, the
thread-suspension logic will compute the ReturnKind based on
the method-signature.
As a result of this change, several hijack-helpers in the VM
are cleaned up. There's only one implementation of HijackWorker()
to handle all returnKinds.
This change also simplifies the thread-hijack logic by using a
single assembly helper OnHijackTripThread() in most cases.
The only other helper used is for X86 floating point return values
for save/restoring the top of the FP stack.
ARM64
Only GcIndfo v2 is reliably supported for ARM64 platform.
The changes to thread-hijack mechanism fixes dotnet/coreclr#6494 for ARM64.
No measurable change in JIT throughput, performance or native-image
size from this change.
Commit migrated from https://github.com/dotnet/coreclr/commit/
d302e64bcb4ea445f6702c529f8a964df20ab494
Joseph Tremoulet [Fri, 5 Aug 2016 20:06:09 +0000 (16:06 -0400)]
Merge pull request dotnet/coreclr#6629 from JosephTremoulet/DeadFlag
Remove GTF_REDINDEX_CHECK
Commit migrated from https://github.com/dotnet/coreclr/commit/
409fe37d3463210d74e0513b9c7041f8c0a924a4
dotnet-bot [Fri, 5 Aug 2016 19:30:43 +0000 (19:30 +0000)]
Updating External dependencies to beta-24405-00
Commit migrated from https://github.com/dotnet/coreclr/commit/
24947cee108fedce1c42bfff390aba1793ed1418
Vance Morrison [Fri, 5 Aug 2016 18:53:13 +0000 (11:53 -0700)]
Merge pull request dotnet/coreclr#6628 from vancem/WCF_ExplictChannels
Wcf explict channels
Commit migrated from https://github.com/dotnet/coreclr/commit/
d9971e6e98dbc148bc82cca661adfca2cec9faa2
Brian Sullivan [Fri, 5 Aug 2016 18:44:20 +0000 (11:44 -0700)]
Merge pull request dotnet/coreclr#6495 from briansull/cleanup
Followup work from codereview feedback
Commit migrated from https://github.com/dotnet/coreclr/commit/
5d8f4bc19fe2cec9d5bfdf9fdb5303a99359e416
Aditya Mandaleeka [Fri, 5 Aug 2016 18:04:45 +0000 (11:04 -0700)]
Merge pull request dotnet/coreclr#6617 from adityamandaleeka/fix_sos
Fix bug in SymbolReader initialization in SOS
Commit migrated from https://github.com/dotnet/coreclr/commit/
26f3863d3414d68e05a4891f849ff8e0a8e88b60
Aditya Mandaleeka [Fri, 5 Aug 2016 18:04:00 +0000 (11:04 -0700)]
Merge pull request dotnet/coreclr#6620 from hqueue/fix/typo_20160805
Fix misleading comment in codegenlegacy.cpp
Commit migrated from https://github.com/dotnet/coreclr/commit/
a52b08c1a07e035e41641d657719866950ba2dae
Joseph Tremoulet [Fri, 5 Aug 2016 17:41:30 +0000 (13:41 -0400)]
Remove GTF_REDINDEX_CHECK
This flag is unused. Its description also sounds like it's redundant with
the GTF_ARR_BOUND_INBND flag, so the latter flag could be used if a new
need to convey this information arises in the future.
Preserving GTF_ARR_BOUND_INBND and removing GTF_REDINDEX_CHECK makes more
sense than the other way around since GTF_ARR_BOUND_INBND is specific to
the relevant opcode.
Commit migrated from https://github.com/dotnet/coreclr/commit/
cf73aa234f482a78037cdd678c497c29b4d12393
Koundinya Veluri [Fri, 5 Aug 2016 17:37:02 +0000 (10:37 -0700)]
Merge pull request dotnet/coreclr#6577 from lukasztomczyk/threadpool-spinwaitconfig
Expose ThreadPool_UnfairSemaphoreSpinLimit config
Commit migrated from https://github.com/dotnet/coreclr/commit/
1dd88149bc96fe42f6b7db192c4c6cd14e632f66
Andy Ayers [Fri, 5 Aug 2016 16:48:48 +0000 (09:48 -0700)]
Merge pull request dotnet/coreclr#6609 from AndyAyersMS/InlineSummaryData
Inliner: gather summary stats and dump to Jit CSV log
Commit migrated from https://github.com/dotnet/coreclr/commit/
895f19191123cfc3646053c51eef6635727b0b2e
Vance Morrison [Fri, 5 Aug 2016 16:28:06 +0000 (09:28 -0700)]
Fix typo/comments
Commit migrated from https://github.com/dotnet/coreclr/commit/
e6b35d41246a701a473b801801b2cf90ea9d19eb
Brian Sullivan [Fri, 5 Aug 2016 15:59:29 +0000 (08:59 -0700)]
Merge pull request dotnet/coreclr#6618 from hseok-oh/struct8byte
disable pass/return struct(float, float) using register in 32bit arch
Commit migrated from https://github.com/dotnet/coreclr/commit/
9e5bd5bcbcb9cddec086228556d3f7494c1334af
Jan Vorlicek [Fri, 5 Aug 2016 10:48:03 +0000 (12:48 +0200)]
Fix invalid checks for CONTEXT_XSTATE (dotnet/coreclr#6621)
Checks for context flags containing CONTEXT_XSTATE were incorrect at two places.
The issue was that CONTEXT_XSTATE is not a single bit flag, but contains two
bits set - it is CONTEXT_AMD64 | 0x40. So testing the flag using
(contextFlags & CONTEXT_XSTATE) != 0 was always true, since context flags
on AMD64 always contain CONTEXT_AMD64 and so the `&` result is always non-zero.
Commit migrated from https://github.com/dotnet/coreclr/commit/
a95820d7a3b968d25cdfd71266924b39727777e6
Carol Eidt [Fri, 5 Aug 2016 08:38:44 +0000 (01:38 -0700)]
Fix Issue 6585: Add offset to struct field arg (dotnet/coreclr#6616)
When the child of a GT_OBJ is a lclFldAddr, genConsumePutStructArgStk()
was not adding the offset of the struct field to the base address of
the local.
Commit migrated from https://github.com/dotnet/coreclr/commit/
1608c2c68af836736cbeff81cdd10212666a17cd
Hyung-Kyu Choi [Fri, 5 Aug 2016 07:30:08 +0000 (16:30 +0900)]
Fix misleading comment in codegenlegacy.cpp
Signed-off-by: Hyung-Kyu Choi <hk0110.choi@samsung.com>
Commit migrated from https://github.com/dotnet/coreclr/commit/
077a1ea93a6b210ca9f3b113c9707b3e019a014c
Hyeongseok Oh [Fri, 5 Aug 2016 03:42:52 +0000 (12:42 +0900)]
disable pass/return struct(float, float) using register in 32bit architecture
Commit migrated from https://github.com/dotnet/coreclr/commit/
25b8225bd44d3ffa9da045a422eddbe606c9a93e
Aditya Mandaleeka [Fri, 5 Aug 2016 02:31:07 +0000 (19:31 -0700)]
Clean up some SOS code.
Commit migrated from https://github.com/dotnet/coreclr/commit/
ef7ce476fde19f75a0be8fc29fe64cff2fc3a06b
Aditya Mandaleeka [Fri, 5 Aug 2016 02:19:21 +0000 (19:19 -0700)]
Cache failure to initialize SymbolReader logic in SOS.
Commit migrated from https://github.com/dotnet/coreclr/commit/
7115ac4ed22fe19909fcfa5cab9b2d2a4d46cfa3
Andy Ayers [Fri, 5 Aug 2016 02:14:57 +0000 (19:14 -0700)]
Merge pull request dotnet/coreclr#6103 from mikedn/nothrowinl
Do not inline methods that never return
Commit migrated from https://github.com/dotnet/coreclr/commit/
c4da56ed917793ec1c5100841541d7e17a18f02a
Brian Sullivan [Thu, 28 Jul 2016 00:39:15 +0000 (17:39 -0700)]
Followup work from codereview feedback
For PR dotnet/coreclr#6467 - Enable multireg returns on Arm64
Commit migrated from https://github.com/dotnet/coreclr/commit/
6b19180ca62a81cf60434bc4e976630c91365aea
Yi Zhang (CLR) [Fri, 5 Aug 2016 00:41:47 +0000 (17:41 -0700)]
Merge pull request dotnet/coreclr#6597 from yizhang82/test-warnings
Fix warnings in interop tests
Commit migrated from https://github.com/dotnet/coreclr/commit/
400ea0243af9b83d2d506b58effd9cf49176fe23
Joseph Tremoulet [Fri, 5 Aug 2016 00:31:03 +0000 (20:31 -0400)]
Merge pull request dotnet/coreclr#6572 from JosephTremoulet/starg
Allow inlining when inlinee has `starg`
Commit migrated from https://github.com/dotnet/coreclr/commit/
8505731804b4712102326d87df21f232166d178d
Joseph Tremoulet [Fri, 29 Jul 2016 17:54:37 +0000 (13:54 -0400)]
Allow inlining when inlinee has `starg`
The inliner's restriction that methods that make use of the `starg` opcode
cannot be inlined is somewhat artificial. The comments indicate that the
reason for this excluion is because the inliner forward-substitutes
argument expressions in place of parameter references, but the codepaths
required to force evaluating an argument expression at the callsite and
reference that result in place of parameter references is already in place
to handle `ldarga` and complex argument expressions.
This change
- adds an `argHasStargOp` flag to the `inlArgInfo` type, similar
to the existing `argHasLdargaOp` flag
- removes the `CALLEE_STORES_TO_ARGUMENT` inline observation and instead
sets the new flag for `starg` cases
- updates `impInlineFetchArg` to force evaluation to a temp for arguments
that are marked `argHasStargOp`
- updates `starg` processing in the importer to store to the
corresponding temp when importing for an inlinee
Resolves dotnet/coreclr#6014.
Commit migrated from https://github.com/dotnet/coreclr/commit/
6fe08a80542d496e657eaed4902bd33ebce4c6f8
Carol Eidt [Fri, 5 Aug 2016 00:04:15 +0000 (17:04 -0700)]
Merge pull request dotnet/coreclr#6579 from CarolEidt/LessConservativeGtObj
Less Conservative GtObj
Commit migrated from https://github.com/dotnet/coreclr/commit/
b22acc19ca99add1c3d7fa2fd6294a42ba1b00c4
Aditya Mandaleeka [Thu, 4 Aug 2016 21:40:42 +0000 (14:40 -0700)]
Merge pull request dotnet/coreclr#6608 from dotnet-bot/from-tfs
Merge changes from TFS
Commit migrated from https://github.com/dotnet/coreclr/commit/
aa1b532a49ded2966e56211c8cc2075cb307617f
Aditya Mandaleeka [Thu, 4 Aug 2016 21:14:20 +0000 (14:14 -0700)]
Fix newly introduced typo in Documentation/README
Commit migrated from https://github.com/dotnet/coreclr/commit/
70c6851628149e5408ad260fc61f277a8748e7fd
Yi Zhang [Thu, 4 Aug 2016 05:03:53 +0000 (22:03 -0700)]
Fix warnings in interop tests and disable IsComObject(null) scenario as it is failing in non-Windows
Commit migrated from https://github.com/dotnet/coreclr/commit/
c71a30805870a7e34d82445d59a0ab536232e383
Aditya Mandaleeka [Thu, 4 Aug 2016 21:05:50 +0000 (14:05 -0700)]
Fix link to all BotR chapters in table of contents
Commit migrated from https://github.com/dotnet/coreclr/commit/
693e50c57d9b6c910985efdd601a3d7637ba7aec
Vance Morrison [Thu, 4 Aug 2016 21:00:10 +0000 (14:00 -0700)]
Merge pull request dotnet/coreclr#6612 from vancem/Doc_Add_BOTR_TOC
Add a table of contents to the book of the runtime
Commit migrated from https://github.com/dotnet/coreclr/commit/
4974ff6a7deeadb46db3180a3c3efaa322757649
Vance Morrison [Thu, 4 Aug 2016 20:59:33 +0000 (13:59 -0700)]
Pull Request feedback
Commit migrated from https://github.com/dotnet/coreclr/commit/
75cf5b733ababfac4476aa24d3f8293f7d4ea7a5
Vance Morrison [Thu, 4 Aug 2016 20:13:19 +0000 (13:13 -0700)]
Add a table of contents to the book of the runtime
(so you have one link to go to that represents the entire book)
Commit migrated from https://github.com/dotnet/coreclr/commit/
e03a2e34e14db3b74abe7382d830127199e20dc1
Fadi Hanna [Thu, 4 Aug 2016 19:51:18 +0000 (12:51 -0700)]
Adding support to the following generic dictionary entry slots for R2R: (dotnet/coreclr#6291)
DeclaringTypeHandleSlot
ConstrainedMethodEntrySlot
Commit migrated from https://github.com/dotnet/coreclr/commit/
010f42a541f9d1e787774a538d9b923a506ea8f2
Fadi Hanna [Thu, 4 Aug 2016 19:21:28 +0000 (12:21 -0700)]
Fix contract violation (violation caused by a copy/paste bug in PR 6200
[tfs-changeset: 1620960]
Commit migrated from https://github.com/dotnet/coreclr/commit/
4008759c62493129573f220374cab3e76c5197b8
Bryan P. Arant [Thu, 4 Aug 2016 19:17:53 +0000 (12:17 -0700)]
Merge pull request dotnet/coreclr#6558 from bryanar/dumpling_ci2
Collect core dump URLs from dumpling service to raise up to CI.
Commit migrated from https://github.com/dotnet/coreclr/commit/
c166c0ec0156e905c722889a84c815e802b47cbd
Bryan Arant [Mon, 1 Aug 2016 20:25:57 +0000 (13:25 -0700)]
on fail: create local_dumplings.txt with the url of the uploaded core dump file if dumpling is enabled. After, concatenate all of the local_dumplings.txt in to $(PWD)/dumplings.txt
Commit migrated from https://github.com/dotnet/coreclr/commit/
85358db35ac3f37d5c3eb541984fe3a27b7a1175
Andy Ayers [Wed, 3 Aug 2016 22:37:32 +0000 (15:37 -0700)]
Inliner: gather summary stats and dump to Jit CSV log
Collect per-method summary stats about inlining: number of calls,
number of candidates, etc.
Commit migrated from https://github.com/dotnet/coreclr/commit/
da5693edb3223adb36aa4088ba7113d7cd065c22
dotnet bot [Thu, 4 Aug 2016 18:36:43 +0000 (11:36 -0700)]
Updating External dependencies to beta-24404-00 (dotnet/coreclr#6601)
Commit migrated from https://github.com/dotnet/coreclr/commit/
0bb191de71be783382dfcd0e27b769a0625f31ec
Adam Speight [Thu, 4 Aug 2016 17:38:05 +0000 (18:38 +0100)]
Added additional comments to AppendFormatHelper to explain the parsing. (dotnet/coreclr#1261)
* Added additional comments to AppendFormatHelper to explain the parsing.
* Create private static readonly properties for Index Limit and Width Limit.
Commit migrated from https://github.com/dotnet/coreclr/commit/
a3f63f80cef912bb1e0a26b2e965ad74eaa28d73
Mike Danes [Tue, 5 Jul 2016 20:45:49 +0000 (23:45 +0300)]
Add a throw/inline benchmark
Commit migrated from https://github.com/dotnet/coreclr/commit/
e3c3330339630f967bdb27c6bcde089e787b2aeb
Mike Danes [Wed, 3 Aug 2016 19:51:36 +0000 (22:51 +0300)]
Do not inline methods that never return
Methods that do not contain return blocks can't ever exit normally, they either throw or loop indefinitely. Inlining is not beneficial in such cases as it increases the code size without providing any speed benefits. In the particular case of throws the inlined code can easily be 10 times larger than the call site.
The call to fgMoreThanOneReturnBlock has been replaced with code that does the same thing but also detects the existence of at least one return block. This avoids walking the basic block list twice.
Note that BBJ_RETURN blocks are also generated for CEE_JMP. Methods exiting via CEE_JMP instead of CEE_RET will continue to be inlined (assuming they were inlined before this change).
Commit migrated from https://github.com/dotnet/coreclr/commit/
e62cc0ac118ade0a35905e164334c97d9d63bb38
Yi Zhang (CLR) [Thu, 4 Aug 2016 04:41:34 +0000 (21:41 -0700)]
Merge pull request dotnet/coreclr#6596 from yizhang82/interop-api
Add more interop API into System.Runtime
Commit migrated from https://github.com/dotnet/coreclr/commit/
3931929b53f1fb01d9d137a04906c3047e61d4ba
Brian Sullivan [Thu, 4 Aug 2016 01:40:15 +0000 (18:40 -0700)]
Merge pull request dotnet/coreclr#6589 from briansull/issue-5954
Fix for Issue 5954
Commit migrated from https://github.com/dotnet/coreclr/commit/
5b0953d50e9d0c6e388643210476d6a95a55a247
Fadi Hanna [Thu, 4 Aug 2016 01:00:49 +0000 (18:00 -0700)]
Adding Support for FieldDescSlot generic dictionary entries for R2R generic code. (dotnet/coreclr#6200)
This enables generic code with ldtoken instructions for fields on generic types to be compiled into R2R.
This change makes newer versions of the runtime compatible with older version R2R images,
but not vice-versa. Therefore, the major version is increased to 2 with this change.
This change adds more encodings to a R2R image without changing the format of any previously encoded
entity, and is backwards compatible.
Commit migrated from https://github.com/dotnet/coreclr/commit/
693fff99049bc7d63459b2c444237ca532036b47
Yi Zhang [Wed, 3 Aug 2016 21:30:33 +0000 (14:30 -0700)]
Add more interop API into System.Runtime and update mscorlib.cs
Commit migrated from https://github.com/dotnet/coreclr/commit/
4c4ace1fcb362f8fa9b93bcfe443ba6eadaa43d8
Brian Sullivan [Tue, 2 Aug 2016 18:24:10 +0000 (11:24 -0700)]
Fix for issue 5954 - Assert 'fieldSeq != FieldSeqStore::NotAField()'
Added new method GenTree:OperIsLocalField()
Fixes DefinesLocalAddress to properly update pIsEntire when we have a LocalField node type
Fixed fgValueNumberBlockAssignment to handle a GT_COPYBLK or GT_COPYOBJ operation
where we have an incomplete field sequence for the Dst/LHS node.
We already were handling an incomplete field sequence for the Src/RHS node.
Update the dump to properly print "new uniq" whenever we issue a conservative value number.
Commit migrated from https://github.com/dotnet/coreclr/commit/
7611127a4f7757952ff0433ec386d8bb3d55d8f1
Lakshmi Priya [Wed, 3 Aug 2016 22:10:22 +0000 (15:10 -0700)]
Merge pull request dotnet/coreclr#6592 from Priya91/runpath
Modify rebuild scenario.
Commit migrated from https://github.com/dotnet/coreclr/commit/
d18ddfda61efdfe4521d2dce816fa01021bf26a8
Mariana Rios Flores [Wed, 3 Aug 2016 21:55:04 +0000 (14:55 -0700)]
Update documentation on how to build corefx (dotnet/coreclr#6594)
Commit migrated from https://github.com/dotnet/coreclr/commit/
95a00b2819049fcdfc32f010f120d0b69c301f19
Kyungwoo Lee [Wed, 3 Aug 2016 20:50:26 +0000 (13:50 -0700)]
Merge pull request dotnet/coreclr#6586 from kyulee1/fixbuildtest
ARM64: Fix Build Test Break
Commit migrated from https://github.com/dotnet/coreclr/commit/
e444d65d03b11a2b81616a37e370453ad9bd8f08
Lakshmi Priya Sekar [Wed, 3 Aug 2016 20:31:06 +0000 (13:31 -0700)]
Modify rebuild scenario.
Commit migrated from https://github.com/dotnet/coreclr/commit/
2336d418e962c9a83c765caf71a9b7298ea61c49
Russ Keldorph [Wed, 3 Aug 2016 19:40:25 +0000 (12:40 -0700)]
Merge pull request dotnet/coreclr#6534 from RussKeldorph/fix6236
Fix build warnings in Vector3Interop test
Commit migrated from https://github.com/dotnet/coreclr/commit/
a8c8bea5ccbb25f79805d260103e656c459b8be6
Rahul Kumar [Wed, 3 Aug 2016 19:32:04 +0000 (12:32 -0700)]
Merge pull request dotnet/coreclr#6578 from rahku/version
RC2 release used version 4.6.*. However RTM release started to use th…
Commit migrated from https://github.com/dotnet/coreclr/commit/
26ad8f21d0deac4fb1f2ee1ec39078c31ee0b895
Kyungwoo Lee [Wed, 3 Aug 2016 16:26:41 +0000 (09:26 -0700)]
ARM64: Fix Build Test Break
Commit migrated from https://github.com/dotnet/coreclr/commit/
dc2b3556e5611e19a1a6271e80f050aa1a5619cd
Kyungwoo Lee [Wed, 3 Aug 2016 05:32:06 +0000 (22:32 -0700)]
Merge pull request dotnet/coreclr#6584 from kyulee1/distest
ARM64: Disable Two Tests
Commit migrated from https://github.com/dotnet/coreclr/commit/
2b191fa038802f22451640b3eac13cf87355e643
Joseph Tremoulet [Wed, 3 Aug 2016 03:15:19 +0000 (23:15 -0400)]
Merge pull request dotnet/coreclr#6529 from JosephTremoulet/AssertionOrder
Optimize bounds checks with correct assertion set
Commit migrated from https://github.com/dotnet/coreclr/commit/
b1b343708687d1417467faeff58384a2ddcc8767
Kyungwoo Lee [Wed, 3 Aug 2016 00:55:19 +0000 (17:55 -0700)]
ARM64: Disable Two Tests
https://github.com/dotnet/coreclr/issues/6583
Commit migrated from https://github.com/dotnet/coreclr/commit/
84c9ed848c5ffa58403a7b235c4bbe6d170e9e30
Brian Sullivan [Wed, 3 Aug 2016 01:00:52 +0000 (18:00 -0700)]
Merge pull request dotnet/coreclr#6576 from Priya91/runpath
Use absolute paths for specifying projects to build.
Commit migrated from https://github.com/dotnet/coreclr/commit/
8a022520402ffbf41b740120d7f054a7827cce3e
Lukasz Tomczyk [Mon, 18 Jul 2016 16:28:12 +0000 (09:28 -0700)]
Expose ThreadPool_UnfairSemaphoreSpinLimit config
Spin-wait in ThreadpoolMgr::UnfairSemaphore::Wait can cause significant
CPU usage, which is unnecessary in some scenarios, where threadpool
receives work in bursts. Use of the above parameter will allow fine tuning
of the threadpool behavior based on the workload expectation.
Fix dotnet/coreclr#5928
Commit migrated from https://github.com/dotnet/coreclr/commit/
0504bf7c2d8003e81b0c5ad6392831f36781470a
Rahul Kumar [Tue, 2 Aug 2016 22:40:23 +0000 (15:40 -0700)]
RC2 release used version 4.6.*. However RTM release started to use the default values of 1.0.* by mistake. Revert back to using 4.6 as major & minor version number
Commit migrated from https://github.com/dotnet/coreclr/commit/
bb8759ee5e5fb737709eb26963680b3b5a97f3ed
Carol Eidt [Tue, 2 Aug 2016 22:05:10 +0000 (15:05 -0700)]
Less Conservative GtObj
Don't mark GT_OBJ with GTF_EXCEPT or GTF_GLOB_REF if it is a local struct.
Also, fix changes needed in arm register allocation and code generation to handle the case where a struct argument is promoted, which appears to be code that was never exercised.
These changes are in preparation for further changes for First Class Structs. I am working to replace block ops with assignments, and was attempting to get to zero diffs, but it is quite difficult to do so given some inconsistencies in the treatment of GT_OBJs of locals.
Commit migrated from https://github.com/dotnet/coreclr/commit/
74b27523b5a150e4cac25d43b37efbbcad008020
Joseph Tremoulet [Mon, 18 Jul 2016 16:56:37 +0000 (12:56 -0400)]
Optimize bounds checks with correct assertion set
Assertion prop defers removing redundant bounds checks until processing
the parent comma, because the rewrite involves the comma as well. The
code currently has a bug in that its check for whether the bounds check
is redundant also occurs when processing reaches the comma, which is wrong
because the assertion set may then include assertions generated by the RHS
of the comma (there is code to compensate for the assertion generated by
the bounds check itself, which is the LHS of the comma, but no compensation
for the RHS).
This change moves the analysis of whether bounds checks are redundant to
the proper spot in the processing order, and delays only the rewrite to
the processing of the comma; the redundancy of the bounds check is
communicated via a new opcode-specific flag: GTF_ARR_BOUND_INBND.
Fixes dotnet/coreclr#6318.
Commit migrated from https://github.com/dotnet/coreclr/commit/
16c65845eef41548c5653f14fede5a8c5c0be30f
Lakshmi Priya [Tue, 2 Aug 2016 21:17:17 +0000 (14:17 -0700)]
Update cross-building.md
Commit migrated from https://github.com/dotnet/coreclr/commit/
3de3ad5792922657efb9438ebdb87a501b5c457b
Lakshmi Priya [Tue, 2 Aug 2016 21:15:45 +0000 (14:15 -0700)]
Update windows-test-instructions.md
Commit migrated from https://github.com/dotnet/coreclr/commit/
f327cbfa24d1ed49650104a277631ca600fa8bb6
Lakshmi Priya [Tue, 2 Aug 2016 21:14:23 +0000 (14:14 -0700)]
Update unix-test-instructions.md
Commit migrated from https://github.com/dotnet/coreclr/commit/
a0d8423deb372c229d255831da47b333a739b83b
Russ Keldorph [Fri, 29 Jul 2016 22:19:39 +0000 (15:19 -0700)]
Fix build warnings in Vector3Interop test
Fixes dotnet/coreclr#6236
Commit migrated from https://github.com/dotnet/coreclr/commit/
13d8d8fbfb9d88dd3cbe7f1ed57d7c7a59a00bbf
Jan Vorlicek [Tue, 2 Aug 2016 20:35:06 +0000 (22:35 +0200)]
Swallow exception in gc_heap::fire_etw_allocation_event (dotnet/coreclr#6571)
The gc_heap::fire_etw_allocation_event calls TypeHandle::GetName that can throw
due to OOM. But we don't want failures to fire event cause a failure during the GC,
so such exception should be swallowed and no event fired in such case.
This was discovered as a contract failure during test runs with ETW logging enabled
when this function was transitively called from Thread::PerformPreemptiveGC which
was recently modified to have NOTHROW contract.
Interestingly, this was not detected by the static contract checker.
Commit migrated from https://github.com/dotnet/coreclr/commit/
d5030420e022efde193ec53de4d9c98252f32fc9
Lakshmi Priya [Tue, 2 Aug 2016 20:13:43 +0000 (13:13 -0700)]
Update windows-instructions.md
Commit migrated from https://github.com/dotnet/coreclr/commit/
03b0a5b5984f070d3a50770ebb8c1debdf07673a
Lakshmi Priya Sekar [Tue, 2 Aug 2016 19:18:47 +0000 (12:18 -0700)]
Use absolute paths for specifying projects to build.
Commit migrated from https://github.com/dotnet/coreclr/commit/
cf4fb6920876fc459f3492487f86319709bf1480
Kyungwoo Lee [Tue, 2 Aug 2016 18:35:22 +0000 (11:35 -0700)]
Merge pull request dotnet/coreclr#6564 from kyulee1/fixbuild
ARM64: Fix Build Break
Commit migrated from https://github.com/dotnet/coreclr/commit/
87fae7432a4398b3a29d8f04b02b09c57627a16b
Vance Morrison [Tue, 2 Aug 2016 18:31:48 +0000 (11:31 -0700)]
Change to allow WCF more explicit control over channels to mimic an existing manifest.
Commit migrated from https://github.com/dotnet/coreclr/commit/
044a6fa3342f1eefe45300b5c6e4dc96968478f9
James Ko [Tue, 2 Aug 2016 07:02:41 +0000 (03:02 -0400)]
Slightly increase throughput of string.Concat(object[]) (dotnet/coreclr#6547)
Commit migrated from https://github.com/dotnet/coreclr/commit/
6773ee18180157be465f11cefc706b46f9d6c5dc
Lakshmi Priya [Tue, 2 Aug 2016 05:12:07 +0000 (22:12 -0700)]
Merge pull request dotnet/coreclr#6566 from Priya91/run2
Change processing of args in build scripts to keep =.
Commit migrated from https://github.com/dotnet/coreclr/commit/
90cdf90d311d916fedee5873340d5838989e8d22
Kyungwoo Lee [Mon, 1 Aug 2016 23:49:32 +0000 (16:49 -0700)]
ARM64: Fix Build Break
Commit migrated from https://github.com/dotnet/coreclr/commit/
5112b2a29487ec5232bbe4bec04c74adb4385aac
Evgeny Pavlov [Tue, 2 Aug 2016 01:53:15 +0000 (04:53 +0300)]
Change int return values to BOOL for coreclr delegates (dotnet/coreclr#6551)
Commit migrated from https://github.com/dotnet/coreclr/commit/
3208afd28dc879f4de845d052ca90423a8bcb5ca
Jan Kotas [Tue, 2 Aug 2016 01:50:01 +0000 (18:50 -0700)]
Merge pull request dotnet/coreclr#6560 from dotnet-bot/from-tfs
Merge changes from TFS
Commit migrated from https://github.com/dotnet/coreclr/commit/
441538db8fdacd1267bee8b00676f57ea93e77ee
tijoytom [Tue, 2 Aug 2016 01:49:10 +0000 (18:49 -0700)]
Rename ZeroFreeMemoryUTF8 to ZeroFreeCoTaskMemUTF8 in ref (dotnet/coreclr#6561)
Commit migrated from https://github.com/dotnet/coreclr/commit/
309e00d273814e397530dd2ace3c8aa46335ab81
Geunsik Lim [Tue, 2 Aug 2016 01:48:12 +0000 (10:48 +0900)]
Documentation: Additional optimization levels for ARM/Linux (dotnet/coreclr#6548)
This instruction is to enable -Ofast or -Oz optimization level of clang on ARM/Linux.
Below is file-size comparison result of major components among -O3, -Ofast,
and -Oz on ARM/Linux-based Raspberry Pi2 board (Ubuntu/ARM 14.04 32bit).
* Linux/ARM: Release Build + O3(default): stripped , commit: dotnet/coreclr@
561b64d2c210b4d999de7f1ac55756704eaba784 (Jul-26-2016)
------------------------------------------------------------------------------------------------------------------
-rwxr-xr-x 1 leemgs leemgs 18,472 Jul 27 16:14 corerun
-rwxr-xr-x 1 leemgs leemgs 1,512,828 Jul 27 18:33 libclrjit.so
-rwxr-xr-x 1 leemgs leemgs 4,525,328 Jul 27 18:33 libcoreclr.so
-rwxr--r-- 1 leemgs leemgs 29,696 Jul 27 00:55 ./mscorlib.dll
-rwxr--r-- 1 leemgs leemgs 2,211,840 Jul 27 00:54 ./System.Private.CoreLib.dll
Total: 8,298,164 bytes
* Linux/ARM: Release Build + Ofast: stripped , commit: dotnet/coreclr@
561b64d2c210b4d999de7f1ac55756704eaba784 (Jul-26-2016)
-------------------------------------------------------------------------------------------------------------
-rwxr-xr-x 1 leemgs leemgs 18,496 Jul 26 05:00 ./corerun
-rwxr-xr-x 1 leemgs leemgs 1,512,844 Jul 26 04:59 ./libclrjit.so
-rwxr-xr-x 1 leemgs leemgs 4,525,360 Jul 26 04:59 ./libcoreclr.so
-rwxr--r-- 1 leemgs leemgs 29,696 Jul 26 00:49 ./mscorlib.dll
-rwxr--r-- 1 leemgs leemgs 2,211,840 Jul 26 00:48 ./System.Private.CoreLib.dll
Total: 8,298,236 bytes
* Linux/ARM: Release Build + Oz: stripped , commit: dotnet/coreclr@
561b64d2c210b4d999de7f1ac55756704eaba784 (Jul-26-2016)
---------------------------------------------------------------------------------------------------------
-rwxr-xr-x 1 leemgs leemgs 14,400 Jul 29 05:02 ./corerun
-rwxr-xr-x 1 leemgs leemgs 1,181,160 Jul 29 04:40 ./libclrjit.so
-rwxr-xr-x 1 leemgs leemgs 3,407,200 Jul 29 04:40 ./libcoreclr.so
-rwxr--r-- 1 leemgs leemgs 29,696 Jul 29 00:49 ./mscorlib.dll
-rwxr--r-- 1 leemgs leemgs 2,211,840 Jul 29 00:48 ./System.Private.CoreLib.dll
Total: 6,844,296 bytes
Signed-off-by: Geunsik Lim <geunsik.lim@samsung.com>
Commit migrated from https://github.com/dotnet/coreclr/commit/
22c9f9e5b36eccde23d4a2187eef8f7985aed4b3
Lakshmi Priya [Tue, 2 Aug 2016 01:33:45 +0000 (18:33 -0700)]
Merge pull request dotnet/coreclr#6565 from Priya91/checkrun
Add /m option for builds.
Commit migrated from https://github.com/dotnet/coreclr/commit/
6c38769dfef7b8555db76bc22fe9e9c34c0b0181
Lakshmi Priya Sekar [Tue, 2 Aug 2016 01:06:30 +0000 (18:06 -0700)]
Change processing of args in build scripts to keep =.
Commit migrated from https://github.com/dotnet/coreclr/commit/
8dea67f63f3f308c3423c3cc6eac5823ea8ae081
Pat Gavlin [Tue, 2 Aug 2016 00:24:22 +0000 (17:24 -0700)]
Merge pull request dotnet/coreclr#6533 from pgavlin/LSRA
Replace the LSRA stack with a hash table.
Commit migrated from https://github.com/dotnet/coreclr/commit/
d7ca197675ef4e17ad3d7eaa4f14f364557fa2a3
Lakshmi Priya Sekar [Tue, 2 Aug 2016 00:11:40 +0000 (17:11 -0700)]
Add /m option for builds.
Commit migrated from https://github.com/dotnet/coreclr/commit/
b775f2210974f3a9274075a94cfce26749ba9979
Pat Gavlin [Mon, 1 Aug 2016 23:44:01 +0000 (16:44 -0700)]
Merge pull request dotnet/coreclr#6546 from pgavlin/LivenessCleanup
Refactor fgComputeLife.
Commit migrated from https://github.com/dotnet/coreclr/commit/
e5dd7a7518460fbd80f1474c4b79b4c562dfbf2c
Pat Gavlin [Mon, 1 Aug 2016 23:42:15 +0000 (16:42 -0700)]
Add function headers for new liveness methods.
In particular, `Compiler::fgComputeLife{Call,Local}` now have function
headers.
Commit migrated from https://github.com/dotnet/coreclr/commit/
8ab671ec13b7f625ae57c46e60a79128be19fa86
Lakshmi Priya [Mon, 1 Aug 2016 23:05:21 +0000 (16:05 -0700)]
Merge pull request dotnet/coreclr#6557 from Priya91/runfix
Fix errors in build scripts from run tool update.
Commit migrated from https://github.com/dotnet/coreclr/commit/
28bbb381f9126be1a277ecb1289d2c416cdc34ab
Pat Gavlin [Mon, 1 Aug 2016 22:36:23 +0000 (15:36 -0700)]
Merge pull request dotnet/coreclr#6366 from pgavlin/RemoveEmbeddedStatementsPlan
Add the proposal for embedded statement removal.
Commit migrated from https://github.com/dotnet/coreclr/commit/
389e5d7b3cac20e4dd7446a41986669fc7385964
Pat Gavlin [Tue, 26 Jul 2016 13:27:06 +0000 (06:27 -0700)]
Replace the LSRA stack with a hash table.
LSRA currently uses a stack to find the `LocationInfo` for each register consumed
by a node. The changes in this stack's contents given a particular node are
governed by three factors:
- The number of registers the node consumes (`gtLsraInfo.srcCount`)
- The number of registers the node produces (`gtLstaInfo.dstCount`)
- Whether or not the node produces an unused value (`gtLsraInfo.isLocalDefUse`)
In all cases, `gtLsraInfo.srcCount` values are popped off of the stack in the
order in which they were pushed (i.e. in FIFO rather than LIFO order). If the
node produces a value that will be used, `gtLsraInfo.dstCount` values are
then pushed onto the stack. If the node produces an unused value, nothing is
pushed onto the stack.
Naively, it would appear that the number of registers a node consumes would be
at least the count of the node's non-leaf operands (to put it differently, one
might assume that any non-leaf operator that produces a value would define at
least one register). However, contained nodes complicate the situation: because
a contained node's execution is subsumed by its user, the contained node's
sources become sources for its user and the contained node does not define any
registers. As a result, both the number of registers consumed and the number of
registers produced by a contained node are 0. Thus, contained nodes do not
update the stack, and the node's parent (if it is not also contained) will
pop the values produced by the contained node's operands. Logically speaking,
it is as if a contained node defines the transitive closure of the registers
defined by its own non-contained operands.
The use of the stack relies on the property that even in linear order the
JIT's IR is still tree ordered. That is to say, given an operator and its
operands, any nodes that execute between any two operands do not produce
SDSU temps that are consumed after the second operand. IR with such a
shape would unbalance the stack.
The planned move to the LIR design given in dotnet/coreclr#6366 removes the tree order
constraint in order to simplify understanding and manipulating the IR in the
backend. Because LIR may not be tree ordered, LSRA may no longer use a stack
to find the `LocationInfo` for a node's operands. This change replaces the
stack with a map from nodes to lists of `LocationInfo` values, each of
which describes a register that is logically defined (if not physically
defined) by that node. Only contained nodes logically define registers that
they do not physically define: contained nodes map to the list of
`LocationInfo` values logically defined by their operands. All non-contained
nodes map to the list of `LocationInfo` values that they physically define.
Non-contained nodes that do not define any registers are not inserted into
the map.
Commit migrated from https://github.com/dotnet/coreclr/commit/
41a1d0a422c8c444479809ab9acd3854d8bf66cc