platform/upstream/coreclr.git
6 years agoFix dir.props BuildVersionFile override
Davis Goodin [Tue, 29 Aug 2017 02:07:57 +0000 (21:07 -0500)]
Fix dir.props BuildVersionFile override

The override needs to be before the Build.Common.props import, because BuildVersion.targets is in Build.Common.props and it's what's responsible for importing BuildVersionFile if it exists.

6 years agoMerge pull request #13643 from dotnet-bot/from-tfs
Brian Sullivan [Tue, 29 Aug 2017 00:53:06 +0000 (17:53 -0700)]
Merge pull request #13643 from dotnet-bot/from-tfs

Merge changes from TFS

6 years agoMerge pull request #13627 from pgavlin/TagPri1Lst
Pat Gavlin [Tue, 29 Aug 2017 00:21:56 +0000 (17:21 -0700)]
Merge pull request #13627 from pgavlin/TagPri1Lst

Tag Pri1+ tests as such in the ARM32/64 LST files.

6 years agoFix for clang-format issue with previous Changeset
Brian Sullivan [Mon, 28 Aug 2017 23:31:08 +0000 (16:31 -0700)]
Fix for clang-format issue with previous Changeset
(previous CS  is #1672052)

[tfs-changeset: 1672055]

6 years agoFixes VSO 469476 - Check for the MARSHAL_BYREF class attribute before performing...
Brian Sullivan [Mon, 28 Aug 2017 23:00:53 +0000 (16:00 -0700)]
Fixes VSO 469476 - Check for the MARSHAL_BYREF class attribute before performing tail recursion optimization

[tfs-changeset: 1672052]

6 years agoMerge pull request #13638 from adiaaida/updatePerfUser
Michelle McDaniel [Mon, 28 Aug 2017 22:21:16 +0000 (15:21 -0700)]
Merge pull request #13638 from adiaaida/updatePerfUser

User the PR trigger email for benchview submit

6 years agoUse the PR trigger email for benchview submit
Michelle McDaniel [Mon, 28 Aug 2017 21:41:27 +0000 (14:41 -0700)]
Use the PR trigger email for benchview submit

When users trigger perf runs for PRs, the alias used to submit in
submission-metadata.json should be that user's email. We should only
use dotnet-bot for official runs.

6 years agoFix build breaks - delete parse tests that are redundant with CoreFX
Jan Kotas [Mon, 28 Aug 2017 20:04:24 +0000 (13:04 -0700)]
Fix build breaks - delete parse tests that are redundant with CoreFX

6 years agoUpdate CoreClr, CoreFx to preview2-25628-01, preview2-25628-01, respectively
dotnet-maestro-bot [Mon, 28 Aug 2017 01:29:24 +0000 (18:29 -0700)]
Update CoreClr, CoreFx to preview2-25628-01, preview2-25628-01, respectively

6 years agoRemove "Pri0" tags.
Pat Gavlin [Mon, 28 Aug 2017 21:23:32 +0000 (14:23 -0700)]
Remove "Pri0" tags.

6 years agoRemove FreeBSD 10.1 (#13633)
Matt Mitchell [Mon, 28 Aug 2017 21:13:31 +0000 (14:13 -0700)]
Remove FreeBSD 10.1 (#13633)

10.1 has been EOL'd, and the image is not upgradeable.  This image will become unusable in newer versions of Jenkins.  Eliminating from CI.  If needed, new versions of BSD could be prepped and re-added to CI.

6 years agoMerge pull request #13616 from KooKiz/binaryreader_span
Stephen Toub [Mon, 28 Aug 2017 20:36:03 +0000 (16:36 -0400)]
Merge pull request #13616 from KooKiz/binaryreader_span

Add BinaryReader Span-based APIs

6 years agoMerge pull request #13619 from stephentoub/timespan_span
Stephen Toub [Mon, 28 Aug 2017 20:35:39 +0000 (16:35 -0400)]
Merge pull request #13619 from stephentoub/timespan_span

Add span-based TimeSpan {Try}Parse{Exact} and TryFormat methods

6 years agoTag Pri1+ tests as such in the ARM32/64 LST files.
Pat Gavlin [Mon, 28 Aug 2017 19:09:07 +0000 (12:09 -0700)]
Tag Pri1+ tests as such in the ARM32/64 LST files.

Just what it says on the tin.

6 years agoEventPipe: fix memory leaks (#12476)
Konstantin Baladurin [Mon, 28 Aug 2017 19:02:12 +0000 (22:02 +0300)]
EventPipe: fix memory leaks (#12476)

6 years agoDelete dead PAL functions (#13613)
Justin Van Patten [Mon, 28 Aug 2017 18:01:42 +0000 (11:01 -0700)]
Delete dead PAL functions (#13613)

* Remove duplicate define

* Remove unused wincon.h defines

* Delete unused LockFile/UnlockFile

* Remove unused WszCryptGetDefaultProvider define

* Remove unused defines

* Remove unused defines

* Delete unused GetDiskFreeSpace

* Delete unused RegisterEventSource\DeregisterEventSource\ReportEvent

* Remove unused defines

* Delete unused AreFileApisANSI

* Delete unused MoveFileW

* Delete unused SetFileTime

* Delete unused GetFileTime

* Delete unused FileTimeToDosDateTime

* Delete unused GetFileType

* Delete unused GetConsoleCP

* Delete unused GetExitCodeThread

* Delete unused FlushViewOfFile

* Delete unused RtlZeroMemory

* Delete unused MoveFileA

6 years agoFix bad cast morphing (#13429)
mikedn [Mon, 28 Aug 2017 17:59:02 +0000 (20:59 +0300)]
Fix bad cast morphing (#13429)

fgMorphCast thinks that casting a i1 value to i2 via conv.ovf.i2.un is a widening conversion and removes the overflow check. But this is in fact a narrowing conversion because i1 is implicitly sign extended to i4 and then i4 is treated as u4. Going from i4 to u4 overflows for negative values so we can't treat the source type of the cast as i1, it has to be u4.

Of course, the existing code works fine if the source type is unsigned. Going from u1 to i4 and then to u4 never overflows so it's safe to treat the source type as u1.

6 years agoMerge pull request #13617 from CarolEidt/Fix13603
Carol Eidt [Mon, 28 Aug 2017 17:46:34 +0000 (10:46 -0700)]
Merge pull request #13617 from CarolEidt/Fix13603

An unused long needs to have dstCount of 0

6 years agoClean up code formatting as corert had done
Stephen Toub [Mon, 28 Aug 2017 15:37:29 +0000 (11:37 -0400)]
Clean up code formatting as corert had done

And some more beyond that.

6 years agoImplement an IntToString equivalent
Stephen Toub [Mon, 28 Aug 2017 13:17:23 +0000 (09:17 -0400)]
Implement an IntToString equivalent

corert doesn't have ParseNumbers, and both corert and coreclr were allocating a new string for the rendered Int32 (corert was also allocating a string of '0's).  Replace this with a non-allocating helper that works in both places just appends directly to the StringBuilder.

6 years agoMove TimeSpanFormat.cs and TimeSpanParse.cs to shared
Stephen Toub [Mon, 28 Aug 2017 13:07:07 +0000 (09:07 -0400)]
Move TimeSpanFormat.cs and TimeSpanParse.cs to shared

6 years agoCompensate for perf regressions in string-to-span parsing
Stephen Toub [Mon, 28 Aug 2017 04:26:45 +0000 (00:26 -0400)]
Compensate for perf regressions in string-to-span parsing

When changing the implementation of TimeSpan parsing from string-based to span-based, throughput of some parsing regressed upwards of 15%.  Some of this is due to more stack-based memory needing to be zero'd out, but it's not entirely clear to me at the moment where the rest went.  To compensate, I optimized various portions of the TimeSpan parsing implementation enough to fully counteract the regressions; while there's still more that can be optimized if desired, all of the inputs/formats I tested are now as fast or faster than they were before, and on top of that, the span-based implementation is allocation-free whereas the string-based implementation would allocate a non-trivial amount of memory per parsing operation.

Note that there was a fair bit of dead code, which I removed.  I think there's actually some more, but it was harder to prove, and so I left it as-is (the goal of this commit not being to clean up but to improve perf enough).

6 years agoAdd span-based TimeSpan {Try}Parse{Exact} and TryFormat methods
Stephen Toub [Mon, 28 Aug 2017 04:02:43 +0000 (00:02 -0400)]
Add span-based TimeSpan {Try}Parse{Exact} and TryFormat methods

The existing string-based {Try}Parse{Exact} methods are reimplemented in terms of spans and slices rather than strings and substrings, and then new span-based {Try}Parse{Exact} methods exposed on the same implementation.  The existing ToString implementation is based on StringBuilder, and that same implementation is reused to implement TryFormat, just copying the contents of the StringBuilder to the span rather than calling ToString on it.

6 years agoMerge pull request #13605 from BruceForstall/ScopeEnvSettings
Bruce Forstall [Mon, 28 Aug 2017 16:45:08 +0000 (09:45 -0700)]
Merge pull request #13605 from BruceForstall/ScopeEnvSettings

Scope build script environment variable setting

6 years agoMerge pull request #13624 from alpencolt/ryu-arm-fix-multireg-decl
Carol Eidt [Mon, 28 Aug 2017 15:11:39 +0000 (08:11 -0700)]
Merge pull request #13624 from alpencolt/ryu-arm-fix-multireg-decl

[RyuJIT/ARM32] Fix MultiRegOp declaration

6 years agoFix WinRT build breaks (dotnet/corert#4398)
Jan Kotas [Mon, 28 Aug 2017 06:29:23 +0000 (23:29 -0700)]
Fix WinRT build breaks (dotnet/corert#4398)

Signed-off-by: dotnet-bot <dotnet-bot@microsoft.com>
6 years ago[RyuJIT/ARM32] Fix MultiRegOp declaration
Alexander Soldatov [Mon, 28 Aug 2017 12:54:47 +0000 (15:54 +0300)]
[RyuJIT/ARM32] Fix MultiRegOp declaration

According to last changes in OperIsMultiRegOp() declaration of MultiRegOp
is needed of some changes.

6 years agoRemove always defined FEATURE_RANDOMIZE_STRING_HASHING define (#13491)
Dan Moseley [Mon, 28 Aug 2017 06:51:22 +0000 (23:51 -0700)]
Remove always defined FEATURE_RANDOMIZE_STRING_HASHING define (#13491)

* Remove always defined FEATURE_RANDOMIZE_STRING_HASHING

* Fully remove randomized hashing

* Leftovers

* Remove additionalEntropy from HashSortKey as it was always 0

* Remove additionalEntropy from HashString as it was always 0

* Change to private, as not in fact called by reflection in .NET Core

* Fix build break due to FCDECLn

* Revert removed QCALL

* Remove unused strlen parameter

6 years agoRemove dead HResults.cs (#13611)
Dan Moseley [Mon, 28 Aug 2017 06:41:56 +0000 (23:41 -0700)]
Remove dead HResults.cs (#13611)

* Fix old copy paste mistake

* Remove dead HResults.cs

* Rename __HResults to HResults

* Rename other two __HResults classes

* Combine into single HResults class, to match CoreRT

* Make hex consistently uppercase

* Sort HResults

6 years agoMerge pull request #13543 from hseok-oh/ryujit/fix_13451
Carol Eidt [Mon, 28 Aug 2017 03:48:39 +0000 (20:48 -0700)]
Merge pull request #13543 from hseok-oh/ryujit/fix_13451

[RyuJIT/ARM32] Simplify lowering long argument

6 years agoRefactor AsSpan to AsReadOnlySpan (#13608)
Adrian Godong [Mon, 28 Aug 2017 03:24:02 +0000 (20:24 -0700)]
Refactor AsSpan to AsReadOnlySpan (#13608)

* Refactor AsSpan to AsReadOnlySpan
* Updated usages.
* Renamed test methods.
* Bring back AsSpan as obsolete method.

6 years agoRemove SetContained for GT_FIELD_LIST
Hyeongseok Oh [Mon, 28 Aug 2017 01:03:07 +0000 (10:03 +0900)]
Remove SetContained for GT_FIELD_LIST

Remove SetContained for GT_FIELD_LIST: already set when it is generated
Add comment

6 years agoMerge pull request #13597 from CarolEidt/InfoLinearScan
Carol Eidt [Mon, 28 Aug 2017 00:31:09 +0000 (17:31 -0700)]
Merge pull request #13597 from CarolEidt/InfoLinearScan

Move TreeNodeInfoInit to LinearScan

6 years agoAn unused long needs to have dstCount of 0
Carol Eidt [Sun, 27 Aug 2017 23:49:18 +0000 (16:49 -0700)]
An unused long needs to have dstCount of 0

Fix #13603

6 years agoMerge pull request #13581 from noahfalk/fix_corefx_testing
Noah Falk [Sun, 27 Aug 2017 22:46:53 +0000 (15:46 -0700)]
Merge pull request #13581 from noahfalk/fix_corefx_testing

Fix running corefx tests

6 years agoAdd BinaryReader Span-based APIs
Kevin Gosse [Sun, 27 Aug 2017 14:22:58 +0000 (16:22 +0200)]
Add BinaryReader Span-based APIs

6 years agoMerge pull request #13411 from pgavlin/RepriTests
Pat Gavlin [Sat, 26 Aug 2017 17:34:40 +0000 (10:34 -0700)]
Merge pull request #13411 from pgavlin/RepriTests

Reprioritize tests to improve inner-loop throughput.

6 years agoUse CreateFile2 instead of CreateFile2FromApp (#13595) (#13607)
Santiago Fernandez Madero [Sat, 26 Aug 2017 04:39:19 +0000 (23:39 -0500)]
Use CreateFile2 instead of CreateFile2FromApp (#13595) (#13607)

* Use CreateFile2 instead of CreateFile2FromApp

* Feedback fixes

6 years agoScope environment variable setting
Bruce Forstall [Sat, 26 Aug 2017 00:12:07 +0000 (17:12 -0700)]
Scope environment variable setting

The product and test build scripts invoke Visual Studio environment
setting scripts several times during the build process. If doing a full
cross architecture build including test build, it's as many as five times.
These environment changes are cumulative. For the PATH variable, in
particular, they can lead to a failure by exceeding the variable
length limit. This seems to have been exacerbated by VS2017, which
has very long paths, and for which many things are added to the PATH.

Fix this by adding "setlocal" / "endlocal" around various sections
of the scripts, so that the multiple calls to the environment script
are not cumulative.

(There is still some cumulative environment setting, as build.cmd
calls VsDevCmd.bat, then if tests are being built, calls build-test.cmd,
which also calls VsDevCmd.bat, and then possibly in addition calls
vcvarsall.bat.)

In addition, I simplified the code that sets up the msbuild logging
parameters, so it is more readable, regular, and doesn't have so
much repeated text.

6 years agoMerge pull request #13579 from CarolEidt/RemoveDupLowerBlockStore
Carol Eidt [Sat, 26 Aug 2017 00:05:10 +0000 (17:05 -0700)]
Merge pull request #13579 from CarolEidt/RemoveDupLowerBlockStore

Arm Containment Cleanup

6 years agoDelete superfluous check in funceval.cpp (#13598)
Jan Kotas [Fri, 25 Aug 2017 23:51:45 +0000 (16:51 -0700)]
Delete superfluous check in funceval.cpp (#13598)

Func-eval'ing BCL methods with the DynamicSecurityMethod attribute causes an ArgumentException.

6 years agoMinor performance infrastructure changes. (#13557)
José Rivero [Fri, 25 Aug 2017 23:26:45 +0000 (16:26 -0700)]
Minor performance infrastructure changes. (#13557)

- IlLink scenario will run on a VM (currently it is only measuring MSIL size)
- Updated the patterns of files to search for on scenario runs
- Updated the JitBench commit hash being used ()
- Disable min_opt from the PR correctness mode.
- String was not being interpolated.

6 years agoFix generic context passed to resolved constrained method calls (#13577)
Michal Strehovský [Fri, 25 Aug 2017 23:09:47 +0000 (16:09 -0700)]
Fix generic context passed to resolved constrained method calls (#13577)

If the EE was able to resolve a constrained call, the instantiating
parameter to use is the type by which the call was constrained with. We
embed pConstrainedResolvedToken as the extra argument because
pResolvedToken is an interface method and interface types make a poor
generic context.

The CLR doesn't hit this path because these types of constrained method
calls go through an instantiating stub. We don't do instantiating stubs
in CoreRT.

6 years ago[Arm64/Unix] Add JIT_Stelem_Ref helper (#13588)
Steve MacLean [Fri, 25 Aug 2017 22:10:50 +0000 (18:10 -0400)]
[Arm64/Unix] Add JIT_Stelem_Ref helper (#13588)

6 years agoCreate deep-dive-blog-posts.md (#13336)
Matt Warren [Fri, 25 Aug 2017 21:46:55 +0000 (22:46 +0100)]
Create deep-dive-blog-posts.md (#13336)

6 years agoPR Feedback and formatting
Carol Eidt [Fri, 25 Aug 2017 21:33:49 +0000 (14:33 -0700)]
PR Feedback and formatting

6 years agoMove TreeNodeInfoInit to LinearScan
Carol Eidt [Fri, 25 Aug 2017 20:36:43 +0000 (13:36 -0700)]
Move TreeNodeInfoInit to LinearScan

In preparation for computing the TreeNodeInfo on the fly, move all the TreeNodeInfoInit and related methods to the LinearScan class.

6 years agoDon't multiply YieldProcessor count by proc count (#13556)
Koundinya Veluri [Fri, 25 Aug 2017 20:14:59 +0000 (13:14 -0700)]
Don't multiply YieldProcessor count by proc count (#13556)

Related to issue mentioned in https://github.com/dotnet/coreclr/issues/13388
- Multipying the YieldProcessor count by proc count can cause excessive delays that are not fruitful on machines with a large number of procs. Even on a 12-proc machine (6-core), the heuristics as they are without the multiply seem to perform much better.
- The issue above also mentions that the delay of PAUSE on Intel Skylake+ processors have a significantly larger delay (140 cycles vs 10 cycles). Simulating that by multiplying the YieldProcessor count by 14 shows that in both tests tested, it begins crawling at low thread counts.
- I did most of the testing on ManualResetEventSlim, and since Task is using the same spin heuristics, applied the same change there as well.

6 years agoPR Feedback
Carol Eidt [Fri, 25 Aug 2017 18:10:32 +0000 (11:10 -0700)]
PR Feedback

6 years agoRemove Span(T[], int) ctor (#13575)
Ahson Ahmed Khan [Fri, 25 Aug 2017 17:29:31 +0000 (10:29 -0700)]
Remove Span(T[], int) ctor (#13575)

* Remove Span(T[], int) ctor - from issue #23471

6 years agoUse Span-based TryParse in several globalization types (#13582)
Stephen Toub [Fri, 25 Aug 2017 17:28:19 +0000 (13:28 -0400)]
Use Span-based TryParse in several globalization types (#13582)

6 years agoMerge pull request #13586 from parjong/fix/ClrStack_full
Bruce Forstall [Fri, 25 Aug 2017 17:20:34 +0000 (10:20 -0700)]
Merge pull request #13586 from parjong/fix/ClrStack_full

[ARM/Linux] Enable clrstack -f

6 years agoDo not devirtualize indirect calls (#13561)
Michal Strehovský [Fri, 25 Aug 2017 16:28:21 +0000 (09:28 -0700)]
Do not devirtualize indirect calls (#13561)

I'm seeing the affected code take the `impDevirtualizeCall` code path
with `CT_INDIRECT` calls. `gtCallMethHnd` is a `GenTreePtr` in that case
(it's a union) and passing that as as `CORINFO_METHOD_HANDLE` leads
to bad things.

6 years agoMerge pull request #13245 from pgavlin/NoExpandIndex
Pat Gavlin [Fri, 25 Aug 2017 16:18:30 +0000 (09:18 -0700)]
Merge pull request #13245 from pgavlin/NoExpandIndex

Use a smaller expansion of GT_INDEX in MinOpts.

6 years agoArm Containment Cleanup
Carol Eidt [Thu, 24 Aug 2017 20:21:28 +0000 (13:21 -0700)]
Arm Containment Cleanup

- Fix a couple of issues with TreeNodeInfoInit for struct arguments
- Remove duplicate calls to LowerBlockStore from TreeNodeInfoInit for arm and arm64
- Eliminate duplicative isMultiReg method from GenTree and fix condition for OperIsMultiRegOp()

6 years agoMerge pull request #13584 from wateret/fix-armel-treenodeinfoinit
Carol Eidt [Fri, 25 Aug 2017 14:46:09 +0000 (07:46 -0700)]
Merge pull request #13584 from wateret/fix-armel-treenodeinfoinit

[RyuJIT/armel] Fix ifdef block in TreeNodeInfoInit

6 years agoEnable clrstack -f in ARM/Linux
Jonghyun Park [Fri, 25 Aug 2017 07:42:44 +0000 (16:42 +0900)]
Enable clrstack -f in ARM/Linux

6 years ago[RyuJIT/armel] Fix ifdef block in TreeNodeInfoInit
Hanjoung Lee [Fri, 25 Aug 2017 06:49:38 +0000 (15:49 +0900)]
[RyuJIT/armel] Fix ifdef block in TreeNodeInfoInit

6 years agoMerge pull request #13506 from mikedn/switch-un
Carol Eidt [Fri, 25 Aug 2017 04:54:56 +0000 (21:54 -0700)]
Merge pull request #13506 from mikedn/switch-un

Fix switch unsigned cast

6 years agoRemove uses of the {RO}Span ctor that takes an array and offset (#13578)
Ahson Ahmed Khan [Fri, 25 Aug 2017 04:46:45 +0000 (21:46 -0700)]
Remove uses of the {RO}Span ctor that takes an array and offset (#13578)

6 years agoFix running corefx tests
noahfalk [Fri, 25 Aug 2017 04:02:41 +0000 (21:02 -0700)]
Fix running corefx tests

Running CoreFX tests was supposed to use a batch file (env_script) to run CoreFX tests under different environment configurations. However due to subtlties in how the command line is parsed none of the environment variables set by this script would actually persist for the execution of the tests. As best I can tell prior to this fix specifying a env_script had no effect whatsoever on windows, and our CI corefx test stress scenarios weren't actually testing the scenario they claimed to be testing.

cmd /c "Set.bat&&Check.bat" will propagate env vars set in Set.bat so that they are visible in Check.bat because both batch files execute within the context of the newly invoked cmd.exe process. However cmd /c Set.bat&&Check.bat (no quotes) will run Set.bat in its own cmd.exe process, then exit that process and run Check.bat in the parent shell process. The parent process does not have any environment variable changes that were made by Set.bat.

6 years agoRemove clearing regnum in LowerArg
Hyeongseok Oh [Fri, 25 Aug 2017 02:35:53 +0000 (11:35 +0900)]
Remove clearing regnum in LowerArg

Remove clearing regnum in LowerArg
Revert changing in gentree.h

6 years agoRemove unnecessary buffer copy from EventPipe::WriteEvent pipeline (#13347)
Victor "Nate" Graf [Thu, 24 Aug 2017 22:13:49 +0000 (15:13 -0700)]
Remove unnecessary buffer copy from EventPipe::WriteEvent pipeline (#13347)

* [WIP] Eliminate extra buffer copy with new api path

* Copy blobs to a flat buffer is Rundown is on

* Refactor to use payload class and dedupe code

* Add contracts

* Fix many small errors

* Make names unambiguous

* Add EventPipe::WriteEventBlob to ecalllist.h

* Address code review

* Add test and fix a buffer copy bug

* Copy data instead of data pointer

* Add optional output file arg to tests

* Change failure return code

* Renamed variables for clarity

6 years agoMerge pull request #13573 from noahfalk/add_ci_logging
Noah Falk [Thu, 24 Aug 2017 21:47:18 +0000 (14:47 -0700)]
Merge pull request #13573 from noahfalk/add_ci_logging

Makes sure the CI archiving runs even on failure

6 years agoMakes sure the archiving runs even on failure
noahfalk [Thu, 24 Aug 2017 21:19:45 +0000 (14:19 -0700)]
Makes sure the archiving runs even on failure

6 years agoFix switch unsigned cast
Mike Danes [Mon, 21 Aug 2017 20:21:52 +0000 (23:21 +0300)]
Fix switch unsigned cast

6 years agoAddress PR feedback.
Pat Gavlin [Thu, 24 Aug 2017 19:25:08 +0000 (12:25 -0700)]
Address PR feedback.

6 years agomscorlib cache padding for 128 byte lines (#13102)
Steve MacLean [Thu, 24 Aug 2017 17:54:37 +0000 (13:54 -0400)]
mscorlib cache padding for 128 byte lines (#13102)

* mscorlib ConcurrentQueue pad for 128B cache lines

* Add Padding.cs

6 years agoMerge pull request #11589 from mikedn/gen-am
Carol Eidt [Thu, 24 Aug 2017 13:15:45 +0000 (06:15 -0700)]
Merge pull request #11589 from mikedn/gen-am

Fix improper handling of GenTreeAddrMode offset

6 years agoFix regeression with Containment
Hyeongseok Oh [Thu, 24 Aug 2017 01:27:18 +0000 (10:27 +0900)]
Fix regeression with Containment

- SetContained for GT_FIELD_LIST
- OperIsMultiRegOp return true for armel only
- Simplify lowering long argument and fix type

6 years agoMerge pull request #13470 from CarolEidt/Fix13451
Carol Eidt [Thu, 24 Aug 2017 07:28:58 +0000 (00:28 -0700)]
Merge pull request #13470 from CarolEidt/Fix13451

Fix ARM issues with Containment

6 years agoFix improper handling of GenTreeAddrMode offset
Mike Danes [Sat, 10 Jun 2017 07:39:41 +0000 (10:39 +0300)]
Fix improper handling of GenTreeAddrMode offset

For unknown reasons GenTreeAddrMode::gtOffset is unsigned rather than
int. On 32 bit hosts this doesn't really matter but on 64 bit hosts we
end up zero extending instead of sign extending it, GetTreeIndir::Offset()
does that by casting from unsigned to size_t.

It doesn't appear possible for this to cause correctness issues (because
the address mode displacement is 32 bit anyway) but it's confusing and
hurts CQ because the emitter can't recognize small negative displacements
that can be encoded in a single byte.

It's worth noting that CodeGen::genCreateAddrMode uses ssize_t internally
to represent the offset but then returns it as unsigned the emitter works
with either int or ssize_t displacements (e.g. emitIns_R_ARX & co. have
int disp arguments, emitNewInstrAmd has ssize_t dsp argument).

Change steps:

Access GenTreeAddrMode's gtOffset via Offset() - Offset() returns the correct
type - int instead of unsigned. All non-legacy uses of gtOffset were replaced
with Offset() and casts were added where necessary. gtOffset was made private
in non-legacy builds to ensure it is not used directly.

Rename GenTreeIndir's Offset() to Address() - This function is problematic,
it returns size_t which is suitable for representing addresses but not
offsets. Rename it and then figure out where offsets are needed and where
addresses are needed.

Add back Offset() with the correct return type - All usages of
GenTreeIndir::Address() (e.g. emitNewInstrAmd) expect ssize_t, not size_t.

Fix the bug - GenTreeIndir::Offset() return ssize_t and
GenTreeAddrMode::Offset() returns int. It doesn't make sense to have a
cast to unsigned.

Fix ARM's handling of GenTreeAddrMode offset - Various pieces of code
(e.g. emitIns_valid_imm_for_ldst_offset) already treat the offset as
signed, they use int, INT64, ssize_t. More importantly, emitarm64's
emitInsLoadStoreOp treats the offset as signed while TreeNodeInfoInitIndir
treates it as unsigned. The later is wrong.

6 years agoAdd unwind info to core dumps. (#13547)
Mike McLaughlin [Thu, 24 Aug 2017 04:13:36 +0000 (21:13 -0700)]
Add unwind info to core dumps. (#13547)

The createdump utility now enumerates all the native stack frames (with
some help from the managed stack walker) for all the threads adding all
the ELF unwind info needed.

On a different machine and without any of the native modules loaded when
the crashdump was generated all the thread stacks can still be unwound
with lldb/gdb.

Change the PAL_VirtualUnwindOutOfProc read memory adapter in DAC
to add the memory to instances manager.

Some misc. cleanup.

6 years agoMerge pull request #13553 from tijoytom/master
Tijoy Tom [Thu, 24 Aug 2017 03:44:00 +0000 (20:44 -0700)]
Merge pull request #13553 from tijoytom/master

Revert incorrect change from commit 16fc300

6 years agoFix ARM issues with Containment
Carol Eidt [Fri, 18 Aug 2017 19:12:40 +0000 (12:12 -0700)]
Fix ARM issues with Containment

These are changes that should have been part of PR #13198:
- Correctly contain struct arguments
- Correctly get number of source registers
- Clear register assignments on `GT_FIELD_LIST` nodes (thanks @hseok-oh).
- Remove now-redundant `ContainCheck` methods for armarch targets.

6 years agoMerge pull request #13550 from pgavlin/DevDiv482577
Pat Gavlin [Thu, 24 Aug 2017 00:33:19 +0000 (17:33 -0700)]
Merge pull request #13550 from pgavlin/DevDiv482577

Type `lea [this + delegateObject]` as `TYP_BYREF`.

6 years agoMerge pull request #13529 from wtgodbe/ParameterizeRids
William Godbe [Thu, 24 Aug 2017 00:16:46 +0000 (17:16 -0700)]
Merge pull request #13529 from wtgodbe/ParameterizeRids

Parameterize RIDs for package restore

6 years agoMerge pull request #13559 from noahfalk/add_ci_logging
Noah Falk [Thu, 24 Aug 2017 00:15:15 +0000 (17:15 -0700)]
Merge pull request #13559 from noahfalk/add_ci_logging

Add more logging to corefx test CI runs

6 years agoAdd more logging to corefx test CI runs
noahfalk [Thu, 24 Aug 2017 00:08:36 +0000 (17:08 -0700)]
Add more logging to corefx test CI runs

6 years agoMerge pull request #13548 from rartemev/revert_12469_fix
Roman Artemev [Thu, 24 Aug 2017 00:01:44 +0000 (17:01 -0700)]
Merge pull request #13548 from rartemev/revert_12469_fix

Revert "Fixed misconception between FP register allocator and RyuJIT's CSE phase"

6 years agoMerge pull request #13533 from wtgodbe/buildNumber
William Godbe [Wed, 23 Aug 2017 23:23:10 +0000 (16:23 -0700)]
Merge pull request #13533 from wtgodbe/buildNumber

Disable default BuildNumberMajor

6 years agoThis reverts
tijoytk [Wed, 23 Aug 2017 22:40:13 +0000 (15:40 -0700)]
This reverts
https://github.com/dotnet/coreclr/commit/16fc3005c085212f6e700a0df8ff7f36c1ea535b
The PR was trying to fix an incorrect test , we should be passing
in !fForWinRT.See https://github.com/dotnet/coreclr/issues/13460#issuecomment-324456870
for more info.

6 years agoFixed Equals/GetHashCode bug for struct. (#13164)
Jim Ma [Wed, 23 Aug 2017 22:32:15 +0000 (10:32 +1200)]
Fixed Equals/GetHashCode bug for struct. (#13164)

Other than `ContainsPointers` and `IsNotTightlyPacked`, added two new conditions for checking whether a valuetype can go to fast path or not. Following are the details of these 2 conditions:

- Check whether a valuetype contains a Single/Double field. If it does, we cannot go to fast path. Floating point numbers have special `Equals` and `GetHashCode` implementation. We cannot simply compare floating point numbers via bits (e.g. +0.0 should equal to -0.0, but their underlying bits are different).

- Check whether an user-defined valuetype overrides `Equals` or `GetHashCode`. If it does, we cannot go to fast path. Because `Equals` or `GetHashCode` result may be different to bit comparison.

To find Single/Double fields and overridden `Equals`/`GetHashCode`, we start a DFS to go through the whole hierachy of the source valuetype, and cache the result to `MethodTable`.

Fix #11452

6 years agoAdd "long GC" jobs to the pri1 build set.
Pat Gavlin [Wed, 23 Aug 2017 21:45:49 +0000 (14:45 -0700)]
Add "long GC" jobs to the pri1 build set.

6 years agoType `lea [this + delegateObject]` as `TYP_BYREF`.
Pat Gavlin [Wed, 23 Aug 2017 20:31:39 +0000 (13:31 -0700)]
Type `lea [this + delegateObject]` as `TYP_BYREF`.

This node was incorrectly typed as `TYP_GCREF`, which was causing an
assertion during GC stress in internal testing.

Fixes VSO 482577.

6 years agoParameterize RIDs for package restore
wtgodbe [Tue, 22 Aug 2017 21:20:01 +0000 (14:20 -0700)]
Parameterize RIDs for package restore

6 years agoRevert "Fixed misconception between FP register allocator and RyuJIT's CSE phase"
Roman Artemev [Wed, 23 Aug 2017 19:49:50 +0000 (12:49 -0700)]
Revert "Fixed misconception between FP register allocator and RyuJIT's CSE phase"

This reverts commit 3f4ee3bed52291e592d7ab67da1fc0e39ee8a3b7.

6 years agoMerge pull request #13534 from dotnet-bot/from-tfs
Brian Sullivan [Wed, 23 Aug 2017 19:37:03 +0000 (12:37 -0700)]
Merge pull request #13534 from dotnet-bot/from-tfs

Merge changes from TFS

6 years agoImprove ReaderWriterLockSlim scalability (#13495)
Koundinya Veluri [Wed, 23 Aug 2017 18:01:31 +0000 (11:01 -0700)]
Improve ReaderWriterLockSlim scalability (#13495)

* Improve ReaderWriterLockSlim scalability

Subset of #13243, fixes #12780

- Prevented waking more than one waiter when only one of them may acquire the lock
- Limited spinning in some cases where it is very unlikely that spinning would help

The _myLock spin lock runs into some bad scalability issues. For example:
1. Readers can starve writers for an unreasonable amount of time. Typically there would be more readers than writers, and it doesn't take many readers to starve a writer. On my machine with 6 cores (12 logical processors with hyperthreading), 6 to 16 reader threads attempting to acquire the spin lock to acquire or release a read lock can starve one writer thread from acquiring the spin lock for several or many seconds. The issue magnifies with more reader threads.
2. Readers and especially writers that hold the RW lock can be starved from even releasing their lock. Releasing an RW lock requires acquiring the spin lock, so releasers are easliy starved by acquirers. How badly they are starved depends on how many acquirers there are, and it doesn't take many to show a very noticeable scalability issue. Often, these acquirers are those that would not be able to acquire the RW lock until one or more releasers release their lock, so the acquirers effectively starve themselves.

This PR does not solve (1), but solves (2) to a degree that could be considered sufficient. #13243 solves (1) and (2) and for (2) it is still better by order-of-magnitude compared with this PR in several cases that I believe are not extreme, but if the complexity of deprioritization is deemed excessive for the goals then of what I tried so far this is the perhaps simplest and most reasonable way to solve (2).

I believe this PR would also be a reasonably low-risk one to port back to .NET Framework.

6 years agoEnable overriding default stack size on Unix (#13517)
Jan Vorlicek [Wed, 23 Aug 2017 17:03:16 +0000 (19:03 +0200)]
Enable overriding default stack size on Unix (#13517)

Alpine Linux has a very small default stack size limit, about 80kB.
This is not enough for running coreclr apps.

This change enables overriding the default stack size using the
COMPlus_DefaultStackSize env variable. For Alpine, it also sets
the default stack size to the same value we use for Windows, which
is 1.5MB.

6 years agoMerge pull request #13540 from wateret/fix-13423
Bruce Forstall [Wed, 23 Aug 2017 16:44:48 +0000 (09:44 -0700)]
Merge pull request #13540 from wateret/fix-13423

[RyuJIT/arm32] Fix MultiReg flag setter

6 years agoJIT: refine types when creating arg temps to improve devirtualization (#13530)
Andy Ayers [Wed, 23 Aug 2017 16:16:07 +0000 (09:16 -0700)]
JIT: refine types when creating arg temps to improve devirtualization (#13530)

The jit will refine the types of temps used to pass arguments to inlinees
when it creates the assignments to these temps.

Unfortunately this is too late to drive devirtualization in the body of
the inlinee, as thes assignments are created after the inlinee body is
imported.

So, add similar refinement logic to the place where the temps are first
created.

Closes #13520.

6 years agoAdd a regression test for #13160 (#13531)
Jonghyun Park [Wed, 23 Aug 2017 15:39:13 +0000 (00:39 +0900)]
Add a regression test for #13160 (#13531)

6 years agoMerge pull request #13450 from sjsinju/genisvaliddoublereg
Carol Eidt [Wed, 23 Aug 2017 14:13:45 +0000 (07:13 -0700)]
Merge pull request #13450 from sjsinju/genisvaliddoublereg

[RyuJIT/ARM32] Remove unnecessary genIsValidDoubleReg() assertion

6 years agoMerge pull request #13528 from JosephTremoulet/Iterate
Joseph Tremoulet [Wed, 23 Aug 2017 13:49:24 +0000 (09:49 -0400)]
Merge pull request #13528 from JosephTremoulet/Iterate

Add InnerIterationCount to layout benchmarks

6 years ago[RyuJIT/arm32] Fix MultiReg flag setter
Hanjoung Lee [Wed, 23 Aug 2017 08:47:03 +0000 (17:47 +0900)]
[RyuJIT/arm32] Fix MultiReg flag setter

Bitwise operation fix in `SetRegSpillFlagByIdx()`.

Fix #13423

6 years agoRemove empty span check from Stream.Read/Write (#13536)
Stephen Toub [Wed, 23 Aug 2017 07:37:33 +0000 (03:37 -0400)]
Remove empty span check from Stream.Read/Write (#13536)

When I added the base Stream.Read/Write(span) default implementations, I added a special-case check for if the span is empty, in which case it made the operation a nop.  But various streams want to impose behavior even in the 0-byte case, e.g. throwing an ObjectDisposedException if the stream has been closed.  This commit just removes the check and allows Read/Write to delegate for all sized spans.

6 years agoMerge pull request #13535 from rartemev/issue_12467
Roman Artemev [Wed, 23 Aug 2017 06:54:26 +0000 (23:54 -0700)]
Merge pull request #13535 from rartemev/issue_12467

Fixed assertion failure in legacy backend

6 years agoMerge pull request #13522 from stephentoub/fsspan
Stephen Toub [Wed, 23 Aug 2017 03:40:10 +0000 (23:40 -0400)]
Merge pull request #13522 from stephentoub/fsspan

Override Span-based Read/Write on FileStream

6 years agoFixed assertion failure in legacy backend
Roman Artemev [Wed, 23 Aug 2017 00:57:45 +0000 (17:57 -0700)]
Fixed assertion failure in legacy backend