Rahul Kumar [Mon, 8 Aug 2016 21:35:40 +0000 (14:35 -0700)]
Fix compiler warnings
Jonghyun Park [Mon, 8 Aug 2016 01:35:54 +0000 (10:35 +0900)]
Check PAL_VirtualUnwind failure during GC (#6598)
As discussed in #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.
James Ko [Sun, 7 Aug 2016 15:21:30 +0000 (11:21 -0400)]
Don't overwrite crossgen log in build.cmd script (#6639)
Guo Xiao [Sun, 7 Aug 2016 15:20:52 +0000 (10:20 -0500)]
Fix compile error (#6641)
error: cannot initialize return object of type 'void *' with an lvalue
of type 'void ()'
Bruce Forstall [Sat, 6 Aug 2016 17:39:06 +0000 (10:39 -0700)]
Merge pull request #6619 from BruceForstall/Fix6517
Fix #6517
Gaurav Khanna [Sat, 6 Aug 2016 02:33:50 +0000 (19:33 -0700)]
Merge pull request #6630 from dotnet-bot/UpdateDependencies20160805073043
Updating External dependencies to beta-24405-00
Eugene Rozenfeld [Sat, 6 Aug 2016 02:09:04 +0000 (19:09 -0700)]
Merge pull request #6631 from erozenfeld/NullCheckFolding
Null check folding.
James Ko [Sat, 6 Aug 2016 02:06:59 +0000 (22:06 -0400)]
Decrease writes to local variables in Buffer.MemoryCopy (#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.)
Andy Ayers [Sat, 6 Aug 2016 02:03:53 +0000 (19:03 -0700)]
Merge pull request #6636 from AndyAyersMS/MoreObservations
Inliner: add a few more observations
Bruce Forstall [Fri, 5 Aug 2016 06:52:25 +0000 (23:52 -0700)]
Fix #6517
My previous change #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.
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.
Swaroop Sridhar [Fri, 5 Aug 2016 22:48:42 +0000 (15:48 -0700)]
Merge pull request #6522 from swaroop-sridhar/gcinfov2
Implement GcInfo v2
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 #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.
Swaroop Sridhar [Wed, 20 Jul 2016 23:50:22 +0000 (16:50 -0700)]
Implement GcInfo v2
Ref #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 #6494 for ARM64.
No measurable change in JIT throughput, performance or native-image
size from this change.
Joseph Tremoulet [Fri, 5 Aug 2016 20:06:09 +0000 (16:06 -0400)]
Merge pull request #6629 from JosephTremoulet/DeadFlag
Remove GTF_REDINDEX_CHECK
dotnet-bot [Fri, 5 Aug 2016 19:30:43 +0000 (19:30 +0000)]
Updating External dependencies to beta-24405-00
Vance Morrison [Fri, 5 Aug 2016 18:53:13 +0000 (11:53 -0700)]
Merge pull request #6628 from vancem/WCF_ExplictChannels
Wcf explict channels
Brian Sullivan [Fri, 5 Aug 2016 18:44:20 +0000 (11:44 -0700)]
Merge pull request #6495 from briansull/cleanup
Followup work from codereview feedback
Aditya Mandaleeka [Fri, 5 Aug 2016 18:04:45 +0000 (11:04 -0700)]
Merge pull request #6617 from adityamandaleeka/fix_sos
Fix bug in SymbolReader initialization in SOS
Aditya Mandaleeka [Fri, 5 Aug 2016 18:04:00 +0000 (11:04 -0700)]
Merge pull request #6620 from hqueue/fix/typo_20160805
Fix misleading comment in codegenlegacy.cpp
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.
Koundinya Veluri [Fri, 5 Aug 2016 17:37:02 +0000 (10:37 -0700)]
Merge pull request #6577 from lukasztomczyk/threadpool-spinwaitconfig
Expose ThreadPool_UnfairSemaphoreSpinLimit config
Andy Ayers [Fri, 5 Aug 2016 16:48:48 +0000 (09:48 -0700)]
Merge pull request #6609 from AndyAyersMS/InlineSummaryData
Inliner: gather summary stats and dump to Jit CSV log
Vance Morrison [Fri, 5 Aug 2016 16:28:06 +0000 (09:28 -0700)]
Fix typo/comments
Brian Sullivan [Fri, 5 Aug 2016 15:59:29 +0000 (08:59 -0700)]
Merge pull request #6618 from hseok-oh/struct8byte
disable pass/return struct(float, float) using register in 32bit arch
Jan Vorlicek [Fri, 5 Aug 2016 10:48:03 +0000 (12:48 +0200)]
Fix invalid checks for CONTEXT_XSTATE (#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.
Carol Eidt [Fri, 5 Aug 2016 08:38:44 +0000 (01:38 -0700)]
Fix Issue 6585: Add offset to struct field arg (#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.
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>
Hyeongseok Oh [Fri, 5 Aug 2016 03:42:52 +0000 (12:42 +0900)]
disable pass/return struct(float, float) using register in 32bit architecture
Aditya Mandaleeka [Fri, 5 Aug 2016 02:31:07 +0000 (19:31 -0700)]
Clean up some SOS code.
Aditya Mandaleeka [Fri, 5 Aug 2016 02:19:21 +0000 (19:19 -0700)]
Cache failure to initialize SymbolReader logic in SOS.
Andy Ayers [Fri, 5 Aug 2016 02:14:57 +0000 (19:14 -0700)]
Merge pull request #6103 from mikedn/nothrowinl
Do not inline methods that never return
Brian Sullivan [Thu, 28 Jul 2016 00:39:15 +0000 (17:39 -0700)]
Followup work from codereview feedback
For PR #6467 - Enable multireg returns on Arm64
Yi Zhang (CLR) [Fri, 5 Aug 2016 00:41:47 +0000 (17:41 -0700)]
Merge pull request #6597 from yizhang82/test-warnings
Fix warnings in interop tests
Joseph Tremoulet [Fri, 5 Aug 2016 00:31:03 +0000 (20:31 -0400)]
Merge pull request #6572 from JosephTremoulet/starg
Allow inlining when inlinee has `starg`
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 #6014.
Carol Eidt [Fri, 5 Aug 2016 00:04:15 +0000 (17:04 -0700)]
Merge pull request #6579 from CarolEidt/LessConservativeGtObj
Less Conservative GtObj
Aditya Mandaleeka [Thu, 4 Aug 2016 21:40:42 +0000 (14:40 -0700)]
Merge pull request #6608 from dotnet-bot/from-tfs
Merge changes from TFS
Aditya Mandaleeka [Thu, 4 Aug 2016 21:14:20 +0000 (14:14 -0700)]
Fix newly introduced typo in Documentation/README
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
Aditya Mandaleeka [Thu, 4 Aug 2016 21:05:50 +0000 (14:05 -0700)]
Fix link to all BotR chapters in table of contents
Vance Morrison [Thu, 4 Aug 2016 21:00:10 +0000 (14:00 -0700)]
Merge pull request #6612 from vancem/Doc_Add_BOTR_TOC
Add a table of contents to the book of the runtime
Vance Morrison [Thu, 4 Aug 2016 20:59:33 +0000 (13:59 -0700)]
Pull Request feedback
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)
Fadi Hanna [Thu, 4 Aug 2016 19:51:18 +0000 (12:51 -0700)]
Adding support to the following generic dictionary entry slots for R2R: (#6291)
DeclaringTypeHandleSlot
ConstrainedMethodEntrySlot
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]
Bryan P. Arant [Thu, 4 Aug 2016 19:17:53 +0000 (12:17 -0700)]
Merge pull request #6558 from bryanar/dumpling_ci2
Collect core dump URLs from dumpling service to raise up to CI.
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
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.
dotnet bot [Thu, 4 Aug 2016 18:36:43 +0000 (11:36 -0700)]
Updating External dependencies to beta-24404-00 (#6601)
Adam Speight [Thu, 4 Aug 2016 17:38:05 +0000 (18:38 +0100)]
Added additional comments to AppendFormatHelper to explain the parsing. (#1261)
* Added additional comments to AppendFormatHelper to explain the parsing.
* Create private static readonly properties for Index Limit and Width Limit.
Mike Danes [Tue, 5 Jul 2016 20:45:49 +0000 (23:45 +0300)]
Add a throw/inline benchmark
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).
Yi Zhang (CLR) [Thu, 4 Aug 2016 04:41:34 +0000 (21:41 -0700)]
Merge pull request #6596 from yizhang82/interop-api
Add more interop API into System.Runtime
Brian Sullivan [Thu, 4 Aug 2016 01:40:15 +0000 (18:40 -0700)]
Merge pull request #6589 from briansull/issue-5954
Fix for Issue 5954
Fadi Hanna [Thu, 4 Aug 2016 01:00:49 +0000 (18:00 -0700)]
Adding Support for FieldDescSlot generic dictionary entries for R2R generic code. (#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.
Yi Zhang [Wed, 3 Aug 2016 21:30:33 +0000 (14:30 -0700)]
Add more interop API into System.Runtime and update mscorlib.cs
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.
Lakshmi Priya [Wed, 3 Aug 2016 22:10:22 +0000 (15:10 -0700)]
Merge pull request #6592 from Priya91/runpath
Modify rebuild scenario.
Mariana Rios Flores [Wed, 3 Aug 2016 21:55:04 +0000 (14:55 -0700)]
Update documentation on how to build corefx (#6594)
Kyungwoo Lee [Wed, 3 Aug 2016 20:50:26 +0000 (13:50 -0700)]
Merge pull request #6586 from kyulee1/fixbuildtest
ARM64: Fix Build Test Break
Lakshmi Priya Sekar [Wed, 3 Aug 2016 20:31:06 +0000 (13:31 -0700)]
Modify rebuild scenario.
Russ Keldorph [Wed, 3 Aug 2016 19:40:25 +0000 (12:40 -0700)]
Merge pull request #6534 from RussKeldorph/fix6236
Fix build warnings in Vector3Interop test
Rahul Kumar [Wed, 3 Aug 2016 19:32:04 +0000 (12:32 -0700)]
Merge pull request #6578 from rahku/version
RC2 release used version 4.6.*. However RTM release started to use th…
Kyungwoo Lee [Wed, 3 Aug 2016 16:26:41 +0000 (09:26 -0700)]
ARM64: Fix Build Test Break
Kyungwoo Lee [Wed, 3 Aug 2016 05:32:06 +0000 (22:32 -0700)]
Merge pull request #6584 from kyulee1/distest
ARM64: Disable Two Tests
Joseph Tremoulet [Wed, 3 Aug 2016 03:15:19 +0000 (23:15 -0400)]
Merge pull request #6529 from JosephTremoulet/AssertionOrder
Optimize bounds checks with correct assertion set
Kyungwoo Lee [Wed, 3 Aug 2016 00:55:19 +0000 (17:55 -0700)]
ARM64: Disable Two Tests
https://github.com/dotnet/coreclr/issues/6583
Brian Sullivan [Wed, 3 Aug 2016 01:00:52 +0000 (18:00 -0700)]
Merge pull request #6576 from Priya91/runpath
Use absolute paths for specifying projects to build.
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 #5928
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
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.
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 #6318.
Lakshmi Priya [Tue, 2 Aug 2016 21:17:17 +0000 (14:17 -0700)]
Update cross-building.md
Lakshmi Priya [Tue, 2 Aug 2016 21:15:45 +0000 (14:15 -0700)]
Update windows-test-instructions.md
Lakshmi Priya [Tue, 2 Aug 2016 21:14:23 +0000 (14:14 -0700)]
Update unix-test-instructions.md
Russ Keldorph [Fri, 29 Jul 2016 22:19:39 +0000 (15:19 -0700)]
Fix build warnings in Vector3Interop test
Fixes #6236
Jan Vorlicek [Tue, 2 Aug 2016 20:35:06 +0000 (22:35 +0200)]
Swallow exception in gc_heap::fire_etw_allocation_event (#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.
Lakshmi Priya [Tue, 2 Aug 2016 20:13:43 +0000 (13:13 -0700)]
Update windows-instructions.md
Lakshmi Priya Sekar [Tue, 2 Aug 2016 19:18:47 +0000 (12:18 -0700)]
Use absolute paths for specifying projects to build.
Kyungwoo Lee [Tue, 2 Aug 2016 18:35:22 +0000 (11:35 -0700)]
Merge pull request #6564 from kyulee1/fixbuild
ARM64: Fix Build Break
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.
James Ko [Tue, 2 Aug 2016 07:02:41 +0000 (03:02 -0400)]
Slightly increase throughput of string.Concat(object[]) (#6547)
Lakshmi Priya [Tue, 2 Aug 2016 05:12:07 +0000 (22:12 -0700)]
Merge pull request #6566 from Priya91/run2
Change processing of args in build scripts to keep =.
Kyungwoo Lee [Mon, 1 Aug 2016 23:49:32 +0000 (16:49 -0700)]
ARM64: Fix Build Break
Evgeny Pavlov [Tue, 2 Aug 2016 01:53:15 +0000 (04:53 +0300)]
Change int return values to BOOL for coreclr delegates (#6551)
Jan Kotas [Tue, 2 Aug 2016 01:50:01 +0000 (18:50 -0700)]
Merge pull request #6560 from dotnet-bot/from-tfs
Merge changes from TFS
tijoytom [Tue, 2 Aug 2016 01:49:10 +0000 (18:49 -0700)]
Rename ZeroFreeMemoryUTF8 to ZeroFreeCoTaskMemUTF8 in ref (#6561)
Geunsik Lim [Tue, 2 Aug 2016 01:48:12 +0000 (10:48 +0900)]
Documentation: Additional optimization levels for ARM/Linux (#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:
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:
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:
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>
Lakshmi Priya [Tue, 2 Aug 2016 01:33:45 +0000 (18:33 -0700)]
Merge pull request #6565 from Priya91/checkrun
Add /m option for builds.
Lakshmi Priya Sekar [Tue, 2 Aug 2016 01:06:30 +0000 (18:06 -0700)]
Change processing of args in build scripts to keep =.
Pat Gavlin [Tue, 2 Aug 2016 00:24:22 +0000 (17:24 -0700)]
Merge pull request #6533 from pgavlin/LSRA
Replace the LSRA stack with a hash table.
Lakshmi Priya Sekar [Tue, 2 Aug 2016 00:11:40 +0000 (17:11 -0700)]
Add /m option for builds.
Pat Gavlin [Mon, 1 Aug 2016 23:44:01 +0000 (16:44 -0700)]
Merge pull request #6546 from pgavlin/LivenessCleanup
Refactor fgComputeLife.
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.
Lakshmi Priya [Mon, 1 Aug 2016 23:05:21 +0000 (16:05 -0700)]
Merge pull request #6557 from Priya91/runfix
Fix errors in build scripts from run tool update.
Pat Gavlin [Mon, 1 Aug 2016 22:36:23 +0000 (15:36 -0700)]
Merge pull request #6366 from pgavlin/RemoveEmbeddedStatementsPlan
Add the proposal for embedded statement removal.
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 #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.
Lakshmi Priya Sekar [Mon, 1 Aug 2016 20:26:14 +0000 (13:26 -0700)]
Add ExtraParameters to config.json to enable --.
Lakshmi Priya Sekar [Mon, 1 Aug 2016 19:02:24 +0000 (12:02 -0700)]
Fix errors in build scripts from run tool update.