Russell C Hadley [Mon, 21 Nov 2016 20:54:46 +0000 (12:54 -0800)]
Merge pull request dotnet/coreclr#8106 from mikedn/magic-div
Move magic division optimization from morph to lowering
Commit migrated from https://github.com/dotnet/coreclr/commit/
d92a1ce6f6e76a431263b4acf1d152664d0d8703
Michelle McDaniel [Mon, 21 Nov 2016 18:48:05 +0000 (10:48 -0800)]
Merge pull request dotnet/coreclr#8208 from adiaaida/fixShiftDecomp
Fix ordering of operands on GT_RSZ
Commit migrated from https://github.com/dotnet/coreclr/commit/
2586931da13c1c30100f999905ae356d6fd6cfa1
Stephen Toub [Mon, 21 Nov 2016 16:09:16 +0000 (11:09 -0500)]
Merge pull request dotnet/coreclr#8216 from stephentoub/asynclocal_allocs
Improve AsyncLocal throughput and memory usage
Commit migrated from https://github.com/dotnet/coreclr/commit/
71f3a03cf9019b03d1c69438a034e3bfb426cb41
Jan Vorlicek [Mon, 21 Nov 2016 15:22:45 +0000 (16:22 +0100)]
Remove unsafe banned functions (dotnet/coreclr#8162)
This change removes _snwprintf, _snprintf and _vsnwprintf usage from CoreCLR and
their implementations from PAL.
PAL exposes their secure variants instead and CoreCLR now uses those instead.
I have also removed the StringCchPrintfA/W, StringCchVPrintfA/W, StringCbVPrintfA/W,
StringCbPrintfA/W, StringCbPrintfExA/W, StringCchVPrintfExA/W, StringCbVPrintfExA/W
and StringCchPrintfExA/W replaced their usage by the secure variants of the sprintf
functions, since they were used at only few places and implementing all of the variants
using the secure sprintf variants would be a hassle.
I also needed to fix a missing support for size modifiers for %p formatting character
and for wide characters / strings in the secure sprintf functions that was revealed
by the PAL tests.
I have also removed a bunch of PAL tests that were using %n formatting character which
was not implemented since it is considered unsafe and translated PAL tests that were using
the removed functions to use the safe variants of those.
Commit migrated from https://github.com/dotnet/coreclr/commit/
716cb7ea87e40abb4b106df55af7ff4666170296
Stephen Toub [Mon, 21 Nov 2016 12:36:15 +0000 (07:36 -0500)]
Address PR feedback
- Delete !FEATURE_CORECLR code from ExecutionContext
- Add support for downgrading between map types when values are set to null
- Change ManyElementAsyncLocalValueMap.Set to size the dictionary based on whether the key is in the existing map
Commit migrated from https://github.com/dotnet/coreclr/commit/
bc8d6117d76d6e359aaaecad99415c8d96576e3d
mikedn [Mon, 21 Nov 2016 02:08:45 +0000 (06:08 +0400)]
Fix "method has no body, 'ret' emitted" warning (dotnet/coreclr#8212)
Commit migrated from https://github.com/dotnet/coreclr/commit/
3c3ab1a269a48b81c2a57e55da76b7e5f0f24eb9
Carol Eidt [Mon, 21 Nov 2016 02:07:10 +0000 (18:07 -0800)]
Merge pull request dotnet/coreclr#8057 from CarolEidt/StructOpts2
Enable optimization of structs
Commit migrated from https://github.com/dotnet/coreclr/commit/
c51e3e7f4c0c4175906ecff3811a230f21f3d613
Stephen Toub [Sun, 20 Nov 2016 22:25:47 +0000 (17:25 -0500)]
Improve AsyncLocal throughput and memory usage
ExecutionContext stores an immutable dictionary used to hold the values of all AsyncLocal instances associated with that context. Reading an AsyncLocal.Value looks up a value in the dictionary, keyed by the AsyncLocal instance. Writing an AsyncLocal.Value creates a new dictionary with the contents of the old one and then sets the new pair into it. For small numbers of AsyncLocal instances, this adds a lot of overhead.
This commit adds a new internal IAsyncLocalValueMap interface that's used instead of Dictionary. It then provides several concrete implementations of that interface, for 1 pair, 2 pairs, 3 pairs, up to 16 pairs, and then up to any number of pairs. The first three implementations are optimized for those sizes, while the one for up to 16 uses an array, and the one for beyond that is just a Dictionary.
Commit migrated from https://github.com/dotnet/coreclr/commit/
29b13d32fc84d040e0771bd391a4d99503a0d7bc
Peter Marcu [Sun, 20 Nov 2016 07:37:51 +0000 (23:37 -0800)]
Fixing arm subsystem version (dotnet/coreclr#8211)
Commit migrated from https://github.com/dotnet/coreclr/commit/
fc3607f054a595e2c1a2ddea1171cbadb39b0a3a
Dan Moseley [Sat, 19 Nov 2016 18:24:21 +0000 (10:24 -0800)]
Generic Dictionary - add constructor that accepts IEnumerable
Generic Dictionary - add constructor that accepts IEnumerable
Commit migrated from https://github.com/dotnet/coreclr/commit/
198bdf53c0590bda08b9b8e1ede1270fc9a8afc1
Robert Matusewicz [Thu, 17 Nov 2016 09:37:43 +0000 (09:37 +0000)]
Add System.Collections.Generic.Dictionary constructor that accepts
IEnumerable<KeyValyePair<TKey, TValue>> to initialize dictionary
Commit migrated from https://github.com/dotnet/coreclr/commit/
e08c2d4bdaf5e211a31303f271a4f11b2223ad7a
Carol Eidt [Wed, 9 Nov 2016 17:09:49 +0000 (09:09 -0800)]
Reinstate the struct optimization changes:
Remove many of the restrictions on structs that were added to preserve behavior of the old IR form.
Change the init block representation to not require changing the parent when a copy block is changed to an init.
In addition, fix the bug that was causing the corefx ValueTuple tests to fail. This was a bug in assertion prop where it was not invaliding the assertions about the parent struct when a field is modified. Add a repro test case for that bug.
Incorporate the fix to dotnet/coreclr#7954, which was encountered after the earlier version of these changes. This was a case where we reused a struct temp, and then it wound up eventually getting assigned the value it originally contained, so we had V09 = V09. This hit the assert in liveness where it wasn't expecting to find a struct assignment with the same lclVar on the lhs and rhs. This assert should have been eliminated with the IR change to struct assignments, but when this situation arises we may run into issues if we call a helper that doesn't expect the lhs and rhs to be the same. So, change morph to eliminate such assignments.
Commit migrated from https://github.com/dotnet/coreclr/commit/
aa676e8b01b29942e82c58011b0e183f923ff2bc
Michelle McDaniel [Fri, 18 Nov 2016 22:12:30 +0000 (14:12 -0800)]
Fix ordering of operands on GT_RSZ
By removing hiOp1 and loOp1 from LIR and then putting them back in, we
inadvertantly reversed the order of operations for high and lo. This is an
issue when op1 is a long add or sub where the order of operations is
important.
Fixes 8171.
Commit migrated from https://github.com/dotnet/coreclr/commit/
781cfb16ea8dfddd77953cdc107cee9e7dd50d79
Jarret Shook [Fri, 18 Nov 2016 21:28:31 +0000 (13:28 -0800)]
Merge pull request dotnet/coreclr#8180 from jashook/arm64_lst_update
Update the lst file to exclude failing tests.
Commit migrated from https://github.com/dotnet/coreclr/commit/
f4b527dfb2ed02e268e4f1d5318fa79053ede064
Pat Gavlin [Fri, 18 Nov 2016 21:19:29 +0000 (13:19 -0800)]
Merge pull request dotnet/coreclr#8097 from pgavlin/VSO279396
Do not fold (ind (addr (lclVar))) in certain cases.
Commit migrated from https://github.com/dotnet/coreclr/commit/
2c53985424e578b2f5b011d354f6ccb971e81c73
Jan Kotas [Fri, 18 Nov 2016 21:03:01 +0000 (13:03 -0800)]
Delete dead files (dotnet/coreclr#8202)
Commit migrated from https://github.com/dotnet/coreclr/commit/
13ee34fc2c5cdff0bf8effb04fe870ac82c46ff1
Sean Gillespie [Fri, 18 Nov 2016 20:57:38 +0000 (12:57 -0800)]
Add CI job and build.cmd command for building with FEATURE_STANDALONE_GC (dotnet/coreclr#8183)
* Add CI job and build.cmd command for building with FEATURE_STANDALONE_GC
* Add missed case
* Correct a condition
* Accidental fallthrough in switch
* Only run on x64
Commit migrated from https://github.com/dotnet/coreclr/commit/
ecc468cf683513a2c3e1635f7abcdb06101eec38
jashook [Thu, 17 Nov 2016 18:18:24 +0000 (10:18 -0800)]
Update the lst file to exclude failing tests.
These are new regressions that were introduced during CI downtime.
Commit migrated from https://github.com/dotnet/coreclr/commit/
aaead2060f01165a29c92b1f5d30e7ead2d05cd6
José Rivero [Fri, 18 Nov 2016 19:24:07 +0000 (11:24 -0800)]
Organizing the perflab tests under a common namespace. (dotnet/coreclr#8184)
- These changes adds a hierarchy to the perflab tests under BenchView.
Commit migrated from https://github.com/dotnet/coreclr/commit/
c48d0320f6bccc9da93b5aefb576f0ac2692c446
Pat Gavlin [Fri, 18 Nov 2016 18:46:46 +0000 (10:46 -0800)]
Merge pull request dotnet/coreclr#8198 from pgavlin/GH8170
Fix codegen for `(umod (gt_long) (const int))`.
Commit migrated from https://github.com/dotnet/coreclr/commit/
4807a27422964b3ae7fca2deca2afb3d1b383594
Pat Gavlin [Fri, 18 Nov 2016 06:37:17 +0000 (22:37 -0800)]
Fix codegen for `(umod (gt_long) (const int))`.
When targeting x86, we opt not to use a helper call to implement the
64-bit unsigned modulus operator if we have a tree of either of the
following forms:
- `(umod ulong (x ulong) (cast ulong (const int const_val)))`
- `(umod ulong (x ulong) (const ulong const_val))`
where `const_val` falls in the range `[2, 0x3fffffff]`.
We eventually decompose this into `(umod uint (gt_long lo hi) (const int const_val))`.
This was then emitted as:
mov eax, lo
mov edx, hi
mov reg, const_val
div edx:eax reg
Unfortunately, this generated code does not take into account the fact
that the result of the modulus may not fit into 32 bits. This can cause
an overflow exception at runtime despite the fact that the modulus
originally produced a 64-bit result.
This change fixes the code generation to check for overflow before
performing the modulus and perform a 64-bit division if the result would
overflow. This results in generated code like the following:
mov eax, lo
mov edx, hi
mov reg, const_val
cmp edx, reg
jb noOverflow
mov temp, eax
mov edx, eax
xor edx, edx
div edx:eax, const_val
mov eax, temp
noOverflow:
div edx:eax, const_val
Which is identical to the code produced by JIT32 and the legacy backend.
Commit migrated from https://github.com/dotnet/coreclr/commit/
7e00ee6be9590670d060117fd3932808bd7a86e6
Pat Gavlin [Fri, 18 Nov 2016 16:02:12 +0000 (08:02 -0800)]
Merge pull request dotnet/coreclr#8194 from AndyAyersMS/FixMismatchTests
Revise mismatch tests so they don't rely on undefined behavior
Commit migrated from https://github.com/dotnet/coreclr/commit/
4f8ba1e05e53e40a52fd66d7660efa8a992da9a9
mikedn [Fri, 18 Nov 2016 14:19:12 +0000 (18:19 +0400)]
Add missing Arg_BadDecimal resource string (dotnet/coreclr#8197)
Commit migrated from https://github.com/dotnet/coreclr/commit/
85b73ed0ea01d487b9458548082ae613c95f7ddd
Russ Keldorph [Fri, 18 Nov 2016 11:11:09 +0000 (03:11 -0800)]
Merge pull request dotnet/coreclr#8178 from adiaaida/excludeHeapVerify
Exclude tests that timeout with HeapVerify
Commit migrated from https://github.com/dotnet/coreclr/commit/
c173ac0bbb0d7c3518541334d72ecd42619915a9
Pat Gavlin [Fri, 18 Nov 2016 04:37:50 +0000 (20:37 -0800)]
Merge pull request dotnet/coreclr#8187 from pgavlin/gh8150
Fix the transformation of `(call ARRADDR_ST x, y, null)`.
Commit migrated from https://github.com/dotnet/coreclr/commit/
f261bb509b615a80215f59d26277ed50b877c8fc
Dan Moseley [Fri, 18 Nov 2016 03:39:43 +0000 (19:39 -0800)]
Type sigs (dotnet/coreclr#8191)
Commit migrated from https://github.com/dotnet/coreclr/commit/
51ccb89389d0fd314e9090ec1d9108670041494a
Sivarv [Fri, 18 Nov 2016 03:24:12 +0000 (19:24 -0800)]
Merge pull request dotnet/coreclr#8182 from mikedn/x86-cmp-long-linqmax
Fix x86 long compares that produce a result
Commit migrated from https://github.com/dotnet/coreclr/commit/
eb4920aeb75f40ee5029c5ad1c30545a02006ee3
Pat Gavlin [Fri, 18 Nov 2016 02:58:06 +0000 (18:58 -0800)]
Format code.
Commit migrated from https://github.com/dotnet/coreclr/commit/
2ae5c001a1c3bd99e7c81796da1e63f76d4163cd
Andy Ayers [Fri, 18 Nov 2016 00:06:46 +0000 (16:06 -0800)]
Revise mismatch tests so they don't rely on undefined behavior
The mismatch32 and mismatch64 tests ensure that the jit will avoid
inlining in cases where there are bad type mismatches at call sites.
This change modifies the tests so that by default the call with the
bad type mismatch is not hit at runtime, since execution of this code
exposes undefined behavior that can be arch or jit specific (eg failing
on x86 and passing on other architectures).
The problematic call can still be hit at runtime by passing at least one
command line argument.
Remove the associated test exclusions for x86.
Fixes dotnet/coreclr#8152.
Commit migrated from https://github.com/dotnet/coreclr/commit/
021f775b3a7aae7557304dae80496519bb50fb55
Pat Gavlin [Thu, 17 Nov 2016 23:49:49 +0000 (15:49 -0800)]
Fix the transformation of `(call ARRADDR_ST x, y, null)`.
`fgMorphCall` transforms `(call ARRADDR_ST x, y, null)` into
`(assign (arrindex x y) null)`. The transformation was not taking into
account the fact that the operands to the call might have been spilled
to temps, and was therefore silently dropping code in the case that they
had been.
This change collects all argument setup nodes in `gtCallArgs` in a
sequence of comma nodes if any exist and attaches the assignment
expression as the ultimate LHS of the comma tree.
Fixes dotnet/coreclr#8150.
Commit migrated from https://github.com/dotnet/coreclr/commit/
f997866be19aa7086e75def295392cc69a76fd4d
Michelle McDaniel [Thu, 17 Nov 2016 17:16:28 +0000 (09:16 -0800)]
Exclude tests that timeout with HeapVerify
Commit migrated from https://github.com/dotnet/coreclr/commit/
4193615add8777e351893ae81e321af93dee2035
Jeremy Kuhne [Thu, 17 Nov 2016 21:51:43 +0000 (13:51 -0800)]
Use CoreFX Path code (dotnet/coreclr#8132)
* Use CoreFX Path code
This is to address consistency and perf issues by moving the Path
code down to CoreCLR. It is more of an issue with Windows as
normalization requires complicated logic and costly platform calls.
* Delete unused files and avoid Unix crypto lib
* Address feedback, fix bug
Remove Unix crypto files and ifdef out usages completely.
Fix issue with static initialization of PathInternal.
* Use TriState to initialize case sensitivity
Commit migrated from https://github.com/dotnet/coreclr/commit/
204f6e8859e3676114c85f49b8d2c311458ac715
Mike Danes [Thu, 17 Nov 2016 21:15:26 +0000 (23:15 +0200)]
Fix x86 long compares that produce a result
Remove the duplicate genProduceReg call. Also remove an unnecessary movzx.
Commit migrated from https://github.com/dotnet/coreclr/commit/
fca7e09e50bd20ed1917fd88dff390ad8c8acafc
Andy Ayers [Thu, 17 Nov 2016 18:52:06 +0000 (10:52 -0800)]
Inliner: updates to RandomPolicy (dotnet/coreclr#8128)
Fix issues with RandomPolicy setup in release builds with -DINLINE_DATA.
Reparent RandomPolicy on top of DiscretionaryPolicy to enable inline
data dumps from random inline runs. Remove some now-unneeded overrides.
Add a full dump mode to JitInlineDumpData that reports the inliner-visible
data for all inlines, as opposed to inliner-visible and post-inline
data for just the most recent inline. Small mods to the dumper code to
adjust comma placement for this new mode.
Have the RandomPolicy make the full set of profitability observations
for each accepted inline so they can be dumped.
Commit migrated from https://github.com/dotnet/coreclr/commit/
db81622ed195624591e2151c4f2a009ddffef29e
Sivarv [Thu, 17 Nov 2016 18:19:11 +0000 (10:19 -0800)]
Merge pull request dotnet/coreclr#8138 from sivarv/rmwFix
Do not generate "inc/dec [mem]" when asked to generate debuggable code.
Commit migrated from https://github.com/dotnet/coreclr/commit/
ae29fa880afb6a0043941800c2b29b2a1024d137
Dan Moseley [Thu, 17 Nov 2016 17:27:09 +0000 (09:27 -0800)]
Tweak params of Console
This isn't the implementation of Console we ship, apparently it's only here for CLR tests, or maybe shouldn't be at all. Just tweaking the param names to match what we ship so it doesn't show up in the diffs.
Commit migrated from https://github.com/dotnet/coreclr/commit/
d6e198c266d68dce6296572e51a20289f8164c84
Pat Gavlin [Thu, 17 Nov 2016 16:47:27 +0000 (08:47 -0800)]
Address PR feedback.
Commit migrated from https://github.com/dotnet/coreclr/commit/
c30cd2b84608cc855cf0603c268fb126665b42a4
Michelle McDaniel [Thu, 17 Nov 2016 16:36:21 +0000 (08:36 -0800)]
Merge pull request dotnet/coreclr#8151 from adiaaida/enableTests
Remove test exclusions for tests that now pass
Commit migrated from https://github.com/dotnet/coreclr/commit/
13f1598437a42a2abec1be6bc4e0776ef4d00147
Dan Moseley [Thu, 17 Nov 2016 04:21:12 +0000 (20:21 -0800)]
Add RuntimeHelpers.Equals
Fix dotnet/corefxdotnet/coreclr#13692
We added this to the ref in 19fa781 but it was not present in the impl. The tools didn't flag this perhaps because Equals is available on Object, although since this is a new it really ought to know it wasn't referring to the Object one.
Commit migrated from https://github.com/dotnet/coreclr/commit/
24ff0527361b6aa5026e6b7f8d4a189d3f595c65
danmosemsft [Thu, 17 Nov 2016 01:36:03 +0000 (17:36 -0800)]
Add RuntimeHelpers.Equals
Commit migrated from https://github.com/dotnet/coreclr/commit/
42e882cf4fcf2cf2689b142cccf5b91bdb95502e
danmosemsft [Thu, 17 Nov 2016 01:08:56 +0000 (17:08 -0800)]
Tweak params
Commit migrated from https://github.com/dotnet/coreclr/commit/
21002f6cc2d8ddec21797b71e73f72ebec7c783a
Tarek Mahmoud Sayed [Thu, 17 Nov 2016 01:08:45 +0000 (17:08 -0800)]
Add the missing implementation of IdnMapping.GetAscii (dotnet/coreclr#8149)
* Add the missing implementation of IdnMapping.GetAsccii
we should have this implementation in place but no idea why got removed in the first place
* Use nameof
Commit migrated from https://github.com/dotnet/coreclr/commit/
529a9d25ba4f0869ac2e3a5a4259623af12f57de
Michelle McDaniel [Thu, 17 Nov 2016 00:04:40 +0000 (16:04 -0800)]
Remove test exclusions for tests that now pass
This change removes tests that have been fixed for x86 RyuJIT. It also
updates the Issues for the remaining tests with additional details.
Commit migrated from https://github.com/dotnet/coreclr/commit/
7d88885b72f4f632b289d472c2bcd659452eb478
Jarret Shook [Wed, 16 Nov 2016 23:59:57 +0000 (15:59 -0800)]
Merge pull request dotnet/coreclr#8146 from jashook/test_update_arm64
Update arm64 tests used by the CI
Commit migrated from https://github.com/dotnet/coreclr/commit/
7f46e5ddd7d8803f533efb3e62c246bb0003cd91
Rahul Kumar [Wed, 16 Nov 2016 23:42:56 +0000 (15:42 -0800)]
Merge pull request dotnet/coreclr#8147 from rahku/reflection
Expose MethodBase.IsSecuritySafeCritical
Commit migrated from https://github.com/dotnet/coreclr/commit/
e1a6a4de6c484bfaf443d9e5a6f40107c3f44b36
sivarv [Wed, 16 Nov 2016 22:20:10 +0000 (14:20 -0800)]
Don't generate inc/dec [mem] while generating debuggable code.
Commit migrated from https://github.com/dotnet/coreclr/commit/
d7dc0295e2fd7f0bb178972340a3b27465396579
Rahul Kumar [Wed, 16 Nov 2016 21:38:38 +0000 (13:38 -0800)]
Expose MethodBase.IsSecuritySafeCritical
Commit migrated from https://github.com/dotnet/coreclr/commit/
e40a56feb2b2fb0e14bf57c9d249e361cb80811d
Pat Gavlin [Wed, 16 Nov 2016 21:35:06 +0000 (13:35 -0800)]
Format code.
Commit migrated from https://github.com/dotnet/coreclr/commit/
0ccd73a224b9d474986bd02feaa45db1d95280d7
Pat Gavlin [Fri, 11 Nov 2016 21:41:09 +0000 (13:41 -0800)]
Do not fold (ind (addr (lclVar))) in certain cases.
Specifically, do not fold these trees into (lclFld) or (lclVar) if the
size of the access is larger than the size of the lclVar. Furthermore,
mark the lclVar as unenregisterable, as the indirection requires the
lclVar to be in memory.
Commit migrated from https://github.com/dotnet/coreclr/commit/
52670d32714a2b1f09422d9ca08aab653158a1d6
Dan Moseley [Wed, 16 Nov 2016 21:13:22 +0000 (13:13 -0800)]
Update IssuesFeedbackEngagement.md
Commit migrated from https://github.com/dotnet/coreclr/commit/
124754f2f5382f2781db8f132e3c89d21b56600b
Koundinya Veluri [Wed, 16 Nov 2016 20:55:53 +0000 (12:55 -0800)]
Expose a member of StrongNameKeyPair, fix bug in SynchronizationContext (dotnet/coreclr#8142)
Related to dotnet/corefxdotnet/coreclr#11636
Related to dotnet/corefxdotnet/coreclr#11808
Commit migrated from https://github.com/dotnet/coreclr/commit/
3baf3a71dfa8a1504efd54973fe7ae5aedef0e13
Dan Moseley [Wed, 16 Nov 2016 20:55:45 +0000 (12:55 -0800)]
Fixed string Join method
Fixed string Join(string separator, params object[] values) method.
Calling string.Join(",", null, 1, 2, 3); return empty string but should ",1,2,3".
Commit migrated from https://github.com/dotnet/coreclr/commit/
b6e5a7fd2deaf73cb45ad82474b9e4beee7883a4
jashook [Wed, 16 Nov 2016 19:00:30 +0000 (11:00 -0800)]
Update arm64 tests used by the CI.
Commit migrated from https://github.com/dotnet/coreclr/commit/
0546743b83506e5d048a4996014df3c8fdccc2c0
Michelle McDaniel [Wed, 16 Nov 2016 17:48:23 +0000 (09:48 -0800)]
Merge pull request dotnet/coreclr#8144 from adiaaida/formatArtifacts
Fix the path to build artifacts for formatting
Commit migrated from https://github.com/dotnet/coreclr/commit/
60254333e47e432691734ff8f14a8799842d5357
Michelle McDaniel [Wed, 16 Nov 2016 17:45:49 +0000 (09:45 -0800)]
Fix the path to build artifacts for formatting
Commit migrated from https://github.com/dotnet/coreclr/commit/
967f4598f1ba31a4208253ce93f1d700abd950b0
Sean Gillespie [Wed, 16 Nov 2016 17:34:57 +0000 (09:34 -0800)]
Enable GCToOSInterface to be defined on the GC side of the GC interface (dotnet/coreclr#8121)
* Re-introduce changes lost in a merge conflict
* Enable GCToOSInterface to be defined behind the GC interface
when building the GC in standalone mode. Provide a skeleton Windows
implementation and the framework for a Unix implementation.
* Address code review feedback
Commit migrated from https://github.com/dotnet/coreclr/commit/
bb9f30e4658342f83bb3b5639ae24ec92e0a1d2a
Tarek Mahmoud Sayed [Wed, 16 Nov 2016 01:35:36 +0000 (17:35 -0800)]
Full support of idn mapping (dotnet/coreclr#8134)
* Enable full implementation of IdnMapping in corelib
* Add missing resources
Commit migrated from https://github.com/dotnet/coreclr/commit/
2c0a2c05ba82460a8d8a4b1e2d98e908e59d5d54
Pat Gavlin [Wed, 16 Nov 2016 01:00:10 +0000 (17:00 -0800)]
Merge pull request dotnet/coreclr#8135 from pgavlin/fixExtendPtrVN
Fix value numbering for FieldSeqStore::NotAField.
Commit migrated from https://github.com/dotnet/coreclr/commit/
c917228c41b812e10ae7c9610570c205e17e13cf
Pat Gavlin [Wed, 16 Nov 2016 00:19:57 +0000 (16:19 -0800)]
Format code.
Commit migrated from https://github.com/dotnet/coreclr/commit/
b4d13d5f8b2676c8bc07a80bc422ef9c30d747a3
jorive [Tue, 15 Nov 2016 23:25:52 +0000 (15:25 -0800)]
Changing JIT perf test names to fix how they are organized on BenchView (dotnet/coreclr#8083)
* Changing JIT performance tests' names to fix how tests are organized on BenchView.
* Adding changes based on PR suggestions.
- Add double quotes on cmd script
- Keep name casing consistent for the Benchstone benchmarks.
* Updating datacontractxml value to match new class name.
* Removing an extra / on the xmlns string.
* Making sure we are getting latest BenchView tools.
- Changed where BenchView tools are installed to (from C:\tools to %WORKSPACE%)
- Check if the tools already exist, if so, delete them and download them again.
Commit migrated from https://github.com/dotnet/coreclr/commit/
164b3f568209bdbe3ae40477decfb8c2e0e22382
Bruce Forstall [Tue, 15 Nov 2016 23:25:05 +0000 (15:25 -0800)]
Merge pull request dotnet/coreclr#8110 from BruceForstall/FixLIRCallArgDumping
Fix the arg name/number dumping for call args in LIR
Commit migrated from https://github.com/dotnet/coreclr/commit/
fd16499452a87cf75dbc1d64f3cc746a7ddcad9a
Pat Gavlin [Tue, 15 Nov 2016 22:28:30 +0000 (14:28 -0800)]
Fix value numbering for FieldSeqStore::NotAField.
Before this change, value numbering produced the same value number for
each occurrence of `FieldSeqStore::NotAField`. This semantics is not
logically consistent with the semantics of `NotAField`, however:
`NotAField` indicates that we cannot reason about the address expression
that it annotates, therefore we cannot reason about the value stored at
the corresponding location. A recent change to admit the VN for
`NotAField` in `ExtendPtrVN` exposed SBCG due to this mismatch in
semantics: distinct array elements were assigned the same value number
because each had the same base coupled with the `NotAField` VN.
This change revises the representation of `NotAField` during value
numbering: instead of reusing the same value number for each
occurrence of `NotAField`, each occurrence is instead assigned a new,
unique value number. These value numbers are represented using a new
chunk attribute to retain the ability to decide whether or not a value
number represents `NotAField` without the use of a more heavyweight map
(e.g. a `VNMap`).
Fixes dotnet/coreclr#8133.
Commit migrated from https://github.com/dotnet/coreclr/commit/
cfc122c62f1f00dafb2950d103275839f0dcb3a1
Stephen Toub [Tue, 15 Nov 2016 22:22:53 +0000 (17:22 -0500)]
Merge pull request dotnet/coreclr#8125 from stephentoub/divrem_perf
Improve Math.DivRem performance
Commit migrated from https://github.com/dotnet/coreclr/commit/
68e3e94374906bfef85de4881967aa313e9c6a6c
Koundinya Veluri [Tue, 15 Nov 2016 21:08:41 +0000 (13:08 -0800)]
Expose members of ExecutionContext and AsyncFlowControl (dotnet/coreclr#8107)
Expose members of ExecutionContext and AsyncFlowControl
- Fix ExecutionContext.Capture and AsyncFlowControl.Undo when flow is suppressed
- Expose deserialization constructor for ExecutionContext
Commit migrated from https://github.com/dotnet/coreclr/commit/
2246c1ff94cbd84df83e5308c81a1d1018c3f154
John Chen [Tue, 15 Nov 2016 20:44:10 +0000 (12:44 -0800)]
Merge pull request dotnet/coreclr#8131 from JohnChen0/xmm
Fix XMM register count in CONTEXT_SetThreadContextOnPort in PAL
Commit migrated from https://github.com/dotnet/coreclr/commit/
f4c1915a833fadbf4e47c2bb31b425049d048343
Dan Moseley [Tue, 15 Nov 2016 20:00:13 +0000 (12:00 -0800)]
Merge pull request dotnet/coreclr#8124 from martijnhoekstra/doc-aggex
fix grammar for AggregateException.Flatten
Commit migrated from https://github.com/dotnet/coreclr/commit/
59c9e61eb49aad0f5a1306d13e08731b7669fcbe
John Chen (CLR) [Tue, 15 Nov 2016 19:09:20 +0000 (11:09 -0800)]
Fix XMM register count in CONTEXT_SetThreadContextOnPort in PAL
Commit migrated from https://github.com/dotnet/coreclr/commit/
e88fc98866433eb053160f50684ca26208953875
Jarret Shook [Tue, 15 Nov 2016 18:10:11 +0000 (10:10 -0800)]
Merge pull request dotnet/coreclr#8127 from jashook/arm64_post_build_script
Change over from the old arm64 scripting.
Commit migrated from https://github.com/dotnet/coreclr/commit/
ecc88a6a4d8fe7cba1905f8f548c5a1eef603db0
jashook [Tue, 15 Nov 2016 01:48:56 +0000 (17:48 -0800)]
Change over from the old ar64 scripting.
This change moves away from hosting all of scripts on the Z:\ drive.
The share that used to be shared between the x64 machines and the
arm64 devices. It removes all the old scripting for one python script
arm64_post_build.py, which is responsible for setup of dotnet and
launching
the x64_client.
Commit migrated from https://github.com/dotnet/coreclr/commit/
896858eb63b455588976d8d35ee8b4e750db420b
Michelle McDaniel [Tue, 15 Nov 2016 15:59:56 +0000 (07:59 -0800)]
Merge pull request dotnet/coreclr#8120 from adiaaida/fixDebuggerVarargs
Add special handling of varargs for x86 debugger
Commit migrated from https://github.com/dotnet/coreclr/commit/
294bb94d18cc8f9d13ae69f51e002f31224d4bdd
Igor Kulaychuk [Tue, 15 Nov 2016 14:55:53 +0000 (17:55 +0300)]
Fix crash in FunctionMemberPtrArrayHolder destructor (dotnet/coreclr#8113)
Some elements in FunctionMember array might not be initialized
and contain garbage. This leads to crash when elements are being deleted.
Move array allocation inside FunctionMemberPtrArrayHolder class
and initialize all array elements to nullptr.
Commit migrated from https://github.com/dotnet/coreclr/commit/
de9e159ce0b1abad260100d447071c3377d2f34c
SaeHie Park [Tue, 15 Nov 2016 14:49:02 +0000 (23:49 +0900)]
clean build-roofs and add lldb option (dotnet/coreclr#8123)
- clean unused __MachineTriple
- add indents to case
- add lld 3.6 or 3.8 as option
Commit migrated from https://github.com/dotnet/coreclr/commit/
301ec423beaf8f31fe6172a846ec552c2cb9a14e
Stephen Toub [Tue, 15 Nov 2016 14:36:38 +0000 (09:36 -0500)]
Use Math.DivRem in another place in mscorlib
Went through all uses of % looking for places DivRem could be used. This looks like it's the only one of note.
Commit migrated from https://github.com/dotnet/coreclr/commit/
64edfc9b668d2f4af8c32d7dda2e64e776b40af1
Stephen Toub [Tue, 15 Nov 2016 12:28:20 +0000 (07:28 -0500)]
Improve Math.DivRem performance
Until the JIT is able to eliminate one of the two idiv operations, using a multiplication and subtraction is measurably faster than an extra division.
Commit migrated from https://github.com/dotnet/coreclr/commit/
bd1f21d17c439481d7bc2a5219779e2474419a96
Martijn Hoekstra [Tue, 15 Nov 2016 12:24:05 +0000 (13:24 +0100)]
fix grammar for AggregateException.Flatten
The old phrasing wasn't gramatically correct. It's somewhat
difficult to find a concise summary
Commit migrated from https://github.com/dotnet/coreclr/commit/
463aca61eb527ac86f111d6e2e6c5519c84db850
Mike Danes [Sun, 13 Nov 2016 09:56:46 +0000 (11:56 +0200)]
Fix GT_MULHI register requirements
We only care about the upper 32 bits of the 64 bit result and those are
in EDX. It doesn't make sense to set the destination candidate to EAX,
most of the time this will result in a useless `mov eax, edx` being
generated.
Also, genCodeForMulHi needs to check if the implicit operand is in EAX
rather than targetReg.
Commit migrated from https://github.com/dotnet/coreclr/commit/
0822b57867aaae098239022e7ebaef745588b8a4
Mike Danes [Sun, 13 Nov 2016 14:49:31 +0000 (16:49 +0200)]
Morph GT_MOD to GT_DIV in some cases
Doing magic division in morph did have one positive effect. For code like
`x = a / 10; y = a % 10;` some (not all due to an assignment) of the common
code was CSEd.
To preserve this optimization we transform `a % b` to `a - (a / b) * b` if we
know that lowering will do magic division. If a redundant `a / b` exists
then CSE can pick it up.
Commit migrated from https://github.com/dotnet/coreclr/commit/
8b3f1fa4a3ede03cbc690d336dc74145976a60fe
Mike Danes [Sun, 13 Nov 2016 10:24:17 +0000 (12:24 +0200)]
Remove magic division optimization from morph
This is no longer needed, lowering does this now.
Commit migrated from https://github.com/dotnet/coreclr/commit/
d45da457c03957ba8ffe1337d406b2cac73be839
Mike Danes [Sun, 13 Nov 2016 09:16:41 +0000 (11:16 +0200)]
Do magic division optimization in lowering
Currently this optimization is done during global morph. Global morph
takes place very early so cases that rely on constant propagation and
folding (e.g "int d = 3; return n / d;") aren't handled.
Also, the IR generated during morph is complex and unlikely to enable
further optimizations. Quite the contrary, the presence of GT_ASG and
GT_MULHI nodes blocks other optimizations (CSE, LICM currently).
The generated code is identical to the code generated by the morph
implementation with one exception: when 2 shifts are needed
(e.g. for x / 7) they are now computed independently:
mov eax, edx
sar eax, 2
shr edx, 31
add eax, edx
instead of:
mov eax, edx
sar eax, 2
mov edx, eax
shr edx, 31
add eax, edx
This results in shorter code and avoids creating an additional temp.
Commit migrated from https://github.com/dotnet/coreclr/commit/
bc4e600a838ba7daba7161806689a419aeef2f76
Mike Danes [Sun, 13 Nov 2016 08:48:15 +0000 (10:48 +0200)]
Copy GetSignedMagicNumberForDivide to lower.cpp
No actual code changes.
Commit migrated from https://github.com/dotnet/coreclr/commit/
67e8bd89504b7abd0ff8132680f9b160ff9211c4
Dan Moseley [Mon, 14 Nov 2016 23:47:55 +0000 (15:47 -0800)]
Reduce variable scope (dotnet/coreclr#8021)
Commit migrated from https://github.com/dotnet/coreclr/commit/
7bd7335b34b3e4ee650b5db4991d922e3fbc56ea
chcosta [Mon, 14 Nov 2016 23:17:54 +0000 (15:17 -0800)]
Merge pull request dotnet/coreclr#8073 from dotnet/enablebinclash
Enable binclash logger
Commit migrated from https://github.com/dotnet/coreclr/commit/
41f042f71c6d70d08813a9d5068b0a1918176a2d
Pat Gavlin [Mon, 14 Nov 2016 23:15:34 +0000 (15:15 -0800)]
Merge pull request dotnet/coreclr#8086 from pgavlin/VSO278523
Admit more dest addresses in block assign value-numbering.
Commit migrated from https://github.com/dotnet/coreclr/commit/
a5638a742043e2698a050e7970d4917b5de5bff3
Pat Gavlin [Fri, 11 Nov 2016 18:20:59 +0000 (10:20 -0800)]
Admit more dest addresses in block assign value-numbering.
Internal testing revealed an assertion when computing the value number
for block assignments: the VN framework expected any block assignments
to a tracked lclVar to have a destination address of the form
`(addr (lclVar))` or `(addr (lclFld))`. However, the check that it
uses to determine whether or not a block assignment targets a lclVar
also admits addresses formed by some combination of adds of constants
to these patterns (e.g. `(add (const 4) (add (addr lclVar) (const 4)))`.
This fix admits these additional patterns in value numbering by allowing
`ExtendPtrVN(GenTree*, GenTree*)` to supply `NotAField` to
`ExtendPtrVN(GenTree*, FieldSeqNode*)`.
Commit migrated from https://github.com/dotnet/coreclr/commit/
f6eded26022145c80bf6309e59313a85d8a09f8d
Michelle McDaniel [Mon, 14 Nov 2016 21:44:06 +0000 (13:44 -0800)]
Add special handling of varargs for x86 debugger
On x86, stack arguments must be accessed via the varargs cookie for
varargs. Since the functions would be identical, this change moves the
code from codegenlinear to codegencommon to fix vararg argument
handling in the debugger.
Fixes VSO 284774.
Commit migrated from https://github.com/dotnet/coreclr/commit/
3941d170a53c5d63c5da35c123f9d22cc62f4616
Bruce Forstall [Mon, 14 Nov 2016 03:17:36 +0000 (19:17 -0800)]
Fix the arg name/number dumping for call args in LIR
Use the arg number in the arg info table. Before this, I saw cases
where the args were named: arg0, arg1, arg1, arg3, instead of:
arg0, arg2, arg1, arg3, for example.
Commit migrated from https://github.com/dotnet/coreclr/commit/
4535df67481edeeefbed21efcaceaf4a504ebcc9
Bruce Forstall [Mon, 14 Nov 2016 21:44:06 +0000 (13:44 -0800)]
Merge pull request dotnet/coreclr#8111 from BruceForstall/FixTestNewlines
Don't generate explicit newlines in SIMD tests
Commit migrated from https://github.com/dotnet/coreclr/commit/
152550bd09144a061dcb1d0675a9859923032aa5
chcosta [Mon, 14 Nov 2016 21:40:51 +0000 (13:40 -0800)]
Merge pull request dotnet/coreclr#8115 from chcosta/updatebuildtools
Update buildtools to version 01008-01
Commit migrated from https://github.com/dotnet/coreclr/commit/
e4a36d27e4ea7ce177af7400b5727f68fcbcb90d
Pat Gavlin [Mon, 14 Nov 2016 21:10:52 +0000 (13:10 -0800)]
Merge pull request dotnet/coreclr#8031 from pgavlin/VSO283795
Do not fold `(x + null)` in certain cases.
Commit migrated from https://github.com/dotnet/coreclr/commit/
8914cb0fb1b512e77343c3006a95dd1b7eef4197
Sivarv [Mon, 14 Nov 2016 19:07:36 +0000 (11:07 -0800)]
Merge pull request dotnet/coreclr#8101 from sivarv/rmwOpt
Generate "inc/dec [mem]" instead of "add/sub [mem], 1" for Read-Modify-Write (RMW) operations.
Commit migrated from https://github.com/dotnet/coreclr/commit/
1f227ce8f53882520fba9ad383f5740e5daecc0a
Pat Gavlin [Mon, 14 Nov 2016 19:02:12 +0000 (11:02 -0800)]
Fix test exclusions.
The new regression test should only be disabled for builds that use the
legacy backend.
Commit migrated from https://github.com/dotnet/coreclr/commit/
62f116de0a4752046ab951312b5d242aed16f12d
Rahul Kumar [Mon, 14 Nov 2016 18:17:28 +0000 (10:17 -0800)]
Merge pull request dotnet/coreclr#8100 from rahku/reflection
Expose Assembly::GetFile(s) apis
Commit migrated from https://github.com/dotnet/coreclr/commit/
d67e1627158ff5c973b21faf9fd03ebbb49f4679
Christopher Costa [Mon, 14 Nov 2016 16:40:16 +0000 (08:40 -0800)]
Update buildtools to version 01008-01
Commit migrated from https://github.com/dotnet/coreclr/commit/
b30be6971ce58f87fd15478fc62b0f581cf4cae4
Alexander Radchenko [Mon, 14 Nov 2016 15:58:58 +0000 (22:58 +0700)]
Fixed string Join method
Fixed string Join(string separator, params object[] values) method.
Calling string.Join(",", null, 1, 2, 3); return empty string but should ",1,2,3".
Commit migrated from https://github.com/dotnet/coreclr/commit/
976519d243e28ced430efddbfc932390f3b37528
Gaurav Khanna [Mon, 14 Nov 2016 05:21:07 +0000 (21:21 -0800)]
Merge pull request dotnet/coreclr#8108 from gkhanna79/Arm32Test
Enable WinArm32 P1 Test Build
Commit migrated from https://github.com/dotnet/coreclr/commit/
32fa4911074bf95a30f7fa1828701fb920af91c6
Bruce Forstall [Mon, 14 Nov 2016 03:20:55 +0000 (19:20 -0800)]
Don't generate explicit newlines in SIMD tests
Use Console.WriteLine() instead.
Commit migrated from https://github.com/dotnet/coreclr/commit/
ba0ed89958b2c1185b4dc6aba75598d9b542f90e
Gaurav Khanna [Sun, 13 Nov 2016 23:47:11 +0000 (15:47 -0800)]
Enable WinArm32 P1 Test Build
Commit migrated from https://github.com/dotnet/coreclr/commit/
ec01f8b6cc44b3fb89933dc1008bfb6a0217727c
Andy Ayers [Sun, 13 Nov 2016 22:15:14 +0000 (14:15 -0800)]
Inliner: ensure all statements have an inline context (dotnet/coreclr#8064)
* JIT: Retype fgMorphStmt and related variables
There are quite a few variables typed as `GenTreePtr` that must point
at statements -- for instance `fgMorphStmt`. Retype these as `GenTreeStmt*`.
Cleanup dereferences which no longer require a `gtStmt`.
* Inliner: ensure all statements have an inline context
We would previously allow some statements inserted by the inliner
"between" the caller and callee to have a null inline context. This
lack of context could lead to incomplete or misleading inline trees
if the inserted code included calls. In particular some failed inlines
might not show up in the trees.
Set the context for these inserted statements to be the context for the
call being inlined (thus they logically "belong" to the caller).
Commit migrated from https://github.com/dotnet/coreclr/commit/
445405d84034564a6433074e0f920f74105ba499
Rahul Kumar [Sun, 13 Nov 2016 17:34:58 +0000 (09:34 -0800)]
Add implementation for AssemblyName::EscapedCodeBase (dotnet/coreclr#8072)
Commit migrated from https://github.com/dotnet/coreclr/commit/
b28f557ee79d70a83e299d6c83a2c803139edba2
John Chen [Sun, 13 Nov 2016 00:20:14 +0000 (16:20 -0800)]
Remove conflicting proj files (dotnet/coreclr#8090)
Some test cases have both .ilproj and .csproj files, resulting
in a race condition during build. Removing the .csproj files,
as the MSIL versions appear to be the intended ones.
Commit migrated from https://github.com/dotnet/coreclr/commit/
dfd0e4b4e20d00a02fdd412251f6146a639ae33c